CN103365720B - 用于多线程环境下动态调整全局堆分配的方法和系统 - Google Patents
用于多线程环境下动态调整全局堆分配的方法和系统 Download PDFInfo
- Publication number
- CN103365720B CN103365720B CN201210086688.0A CN201210086688A CN103365720B CN 103365720 B CN103365720 B CN 103365720B CN 201210086688 A CN201210086688 A CN 201210086688A CN 103365720 B CN103365720 B CN 103365720B
- Authority
- CN
- China
- Prior art keywords
- global heap
- heap allocation
- allocation method
- global
- asked
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/0284—Multiple user address space allocation, e.g. using different base addresses
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Devices For Executing Special Programs (AREA)
- Memory System (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及多线程环境下的全局堆分配技术,具体涉及用于多线程环境下动态调整全局堆分配的方法和系统。更具体地,本发明尤其涉及通过监测全局堆分配方法的冲突参数来动态调整全局堆分配的方法和系统。本发明提供了一种用于在多线程环境下动态调整全局堆分配的方法,包括:识别应用程序中的全局堆分配方法;判断所述全局堆分配方法是否为多线程冲突热点;以及响应于判断结果为是,利用本地栈分配所述全局堆分配方法所请求的内存空间。根据该方法,可以有的放矢地根据实时运行状态动态调整程序中固有的全局堆分配方法,减少了全局堆上产生的锁竞争,有效提高了资源分配的效率以及资源的利用率。
Description
技术领域
本发明涉及多线程环境下的全局堆分配技术。更具体地,本发明尤其涉及通过监测全局堆分配方法的冲突参数来动态调整全局堆分配的方法和系统。
背景技术
目前,随着计算机多核技术的发展,多线程(multi-thread)程序得到了越来越广泛的应用。多线程环境下存在两大问题,其一是资源共享,也就是多个线程共享同一实体物理内存。其二是资源同步,也就是多线程环境要求同一实体物理内存在同一时间仅由一个线程访问。由此可见,资源共享与资源同步是彼此之间存在矛盾的要求。在保证资源共享的前提下,当多个线程同时请求对全局堆(Heap)的分配时,就会产生“锁竞争”,也就是说后请求的线程必须等待先请求的线程共享内存分配完毕后才能“解锁”,从而进行内存分配。如果同时请求内存分配的线程数量庞大,则会导致程序运行速度下降,造成“死机”甚至“系统崩溃”等现象。图2A示出了这种情形的一个示例。如图2A所示,线程(Thread)1-N需要共享全局内存堆(Global Memory Heap),而根据资源同步的要求,同一时间只能对一个线程进行全局内存堆的分配,其它线程必须处于锁等待状态以实现内存资源的同步。
现有技术中存在一种解决上述问题的技术方案,如图2B所示。在图2B中,将图2A中的共享全局内存堆分为多个子堆Heap1-HeapN,并为每个子堆分配若干线程。该技术方案确实可以从某种程度上缓解锁竞争的情况,但是其每个子堆上仍然被分配了多个线程,仍然存在锁竞争的问题。更重要的是,由于在划分子堆并分配线程的时候,并不可能知道应该将哪些线程分配至哪些子堆才能取得运行时最好的效果,因此往往会出现子堆Heap1处于空闲状态,而子堆Heap2确已经处于锁竞争状态,从而造成内存资源浪费并导致大量内存碎片。
发明内容
考虑到上述存在的问题,本发明的目的之一在于提供一种多线程环境下动态调整全局堆分配的方法和系统。
根据本发明的一个方面,提供了一种用于在多线程环境下动态调整全局堆分配的方法,包括:识别应用程序中的全局堆分配方法;判断所述全局堆分配方法是否为多线程冲突热点;以及响应于判断结果为是,利用本地栈分配所述全局堆分配方法所请求的内存空间。
根据本发明的一个实施例,其中判断所述全局堆分配方法是否为多线程冲突热点包括:
通过实时监测所述全局堆分配方法的多线程冲突参数来判断所述全局堆分配方法是否为多线程冲突热点,并且所述多线程冲突参数包括下列参数中的一个或多个:所述全局堆分配方法在单位时间内的调用次数;所述全局堆分配方法所请求分配的全局内存空间;以及所述全局堆分配方法在单位时间内的所冲突次数。
根据本发明的另一方面,提供了一种用于在多线程环境下动态调整全局堆分配的系统,包括:识别装置,被配置为识别应用程序中的全局堆分配方法;判断装置,被配置为判断所述全局堆分配方法是否为多线程冲突热点;以及调整装置,被配置为响应于判断结果为是,利用本地栈分配所述全局堆分配方法所请求的内存空间。
根据本发明所提供的方法或系统,通过判断程序中的全局堆分配方法是否为多线程冲突热点,来决定是否利用本地栈分配原始全局堆分配方法所请求的内存空间,从而有的放矢地根据实时运行状态动态调整程序中固有的全局堆分配方法,减少了全局堆上产生的锁竞争,有效提高了资源分配的效率以及资源的利用率。
附图说明
通过对结合附图所示出的实施方式进行详细说明,本发明的上述以及其他特征将更加明显,本发明附图中相同的标号表示相同或相似的部件。在附图中,
图1示出了适于用来实现本发明实施方式的示例性计算系统100的框图;
图2A示出了多个线程共享全局内存堆时导致的锁竞争情形;
图2B示出了现有技术中为解决图2A的问题所采取的将共享全局内存堆划分为多个共享内存子堆的示意图;
图3示出了根据本发明一个实施例的用于在多线程环境下动态调整全局堆分配的方法的流程图;
图4示出了根据本发明又一实施例的用于在多线程环境下动态调整全局堆分配的方法的流程图;
图5示出了根据本发明又一实施例的用于在多线程环境下动态调整全局堆分配的系统的框图。
具体实施方式
在下文中,将参考附图通过实施方式对本发明提供的的方法和系统进行详细地描述。
所属技术领域的技术人员知道,本发明的多个方面可以体现为系统、方法或计算机程序产品。因此,本发明的多个方面可以具体实现为以下形式,即,可以是完全的硬件、完全的软件(包括固件、驻留软件、微代码等)、或者本文一般称为“电路”、“模块”或“系统”的软件部分与硬件部分的组合。此外,本发明的多个方面还可以采取体现在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可用的程序码。
可以使用一个或多个计算机可读的介质的任何组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电的、磁的、光的、电磁的、红外线的、或半导体的系统、装置、器件或任何以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括以下:有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任何合适的组合。在本文件的语境中,计算机可读存储介质可以是任何包含或存储程序的有形的介质,该程序被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可包括在基带中或者作为载波一部分传播的、其中体现计算机可读的程序码的传播的数据信号。这种传播的信号可以采用多种形式,包括——但不限于——电磁信号、光信号或任何以上合适的组合。计算机可读的信号介质可以是并非为计算机可读存储介质、但是能发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序的任何计算机可读介质。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、RF等等,或者任何合适的上述组合。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、RF等等,或者任何合适的上述组合。
用于执行本发明的操作的计算机程序码,可以以一种或多种程序设计语言的任何组合来编写,所述程序设计语言包括面向对象的程序设计语言-诸如Java、Smalltalk、C++之类,还包括常规的过程式程序设计语言-诸如“C”程序设计语言或类似的程序设计语言。程序码可以完全地在用户的计算上执行、部分地在用户的计算机上执行、作为一个独立的软件包执行、部分在用户的计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在后一种情形中,远程计算机可以通过任何种类的网络——包括局域网(LAN)或广域网(WAN)-连接到用户的计算机,或者,可以(例如利用因特网服务提供商来通过因特网)连接到外部计算机。
以下参照按照本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明的多个方面。要明白的是,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得通过计算机或其它可编程数据处理装置执行的这些指令,产生实现流程图和/或框图中的方框中规定的功能/操作的装置。
也可以把这些计算机程序指令存储在能指令计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令产生一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置(instruction means)的制造品。
也可以把计算机程序指令加载到计算机或其它可编程数据处理装置上,使得在计算机或其它可编程数据处理装置上执行一系列操作步骤,以产生计算机实现的过程,从而在计算机或其它可编程装置上执行的指令就提供实现流程图和/或框图中的方框中规定的功能/操作的过程。
下面参看图1。图1示出了适于用来实现本发明实施方式的示例性计算系统100的框图。如所示,计算机系统100可以包括:CPU(中央处理单元)101、RAM(随机存取存储器)102、ROM(只读存储器)103、系统总线104、硬盘控制器105、键盘控制器106、串行接口控制器107、并行接口控制器108、显示控制器109、硬盘110、键盘111、串行外部设备112、并行外部设备113和显示器114。在这些设备中,与系统总线104耦合的有CPU 101、RAM 102、ROM 103、硬盘控制器105、键盘控制器106、串行控制器107、并行控制器108和显示控制器109。硬盘110与硬盘控制器105耦合,键盘111与键盘控制器106耦合,串行外部设备112与串行接口控制器107耦合,并行外部设备113与并行接口控制器108耦合,以及显示器114与显示控制器109耦合。应当理解,图1所述的结构框图仅仅为了示例的目的而示出的,而不是对本发明范围的限制。在某些情况下,可以根据具体情况而增加或者减少某些设备。
图3示出了根据本发明一个实施例的用于在多线程环境下动态调整全局堆分配的方法的流程图。图3所示的方法从步骤301开始,在步骤301中,识别应用程序中的全局堆分配方法。
首先要明确两个概念:全局堆(Heap)和本地栈(Stack)。全局堆,又可称为全局内存堆,是指由多个线程所共享的内存空间。而本地栈,是指由多个线程中的各个线程所独享的内存空间。通常,全局堆是由应用程序开发人员在开发程序的过程中指定分配的,例如在C语言中,通常用malloc指令从全局堆中分配内存。而本地栈则是在应用程序编译过程中自动分配的,程序开发人员通常不会也没有必要在编写程序过程中指定本地栈的分配,当然理论上也可以通过例如alloca指令来从本地栈中分配内存。
接下来要明确的概念是全局堆分配方法。所谓全局堆分配方法,是指在程序代码中指定从全局堆中分配内存空间的方法(method)、函数或功能。例如malloc(...)即为在C语言中的一个全局堆分配方法的示例。本领域人员应当理解,全局堆分配方法的具体表达形式依程序开发语言的不同或者源代码、目标代码的不同而有所区别,例如在Java、C++等高级语言中,通常使用Object a=new Object()这样的语句来实现全局堆分配,它也是一种全局堆分配方法。
现有技术中已经提供了如何识别程序代码中的不同类型的方法以及方法的范围的技术方案,在此不再赘述。需要指出的是,在步骤301中,既可以通过扫描程序的源代码来识别其中的全局堆分配方法,也可以通过扫描程序的目标代码来识别其中的全局堆分配方法,这取决于程序开发语言的类型、源代码以及目标代码的格式。
接下来,在步骤302中,判断所述全局堆分配方法是否为多线程冲突热点。这里的多线程冲突热点是指在多线程环境下,执行该全局堆分配方法会导致全局堆分配的锁竞争比较突出,从而说明需要对该全局堆分配方法进行调整,也就是让程序在执行该全局堆分配方法时退出锁竞争。下文结合图4将具体说明多种判断全局堆分配方法是否为多线程冲突热点的实施例。
根据本发明的一个实施例,在步骤303中,让程序在执行该全局堆分配方法时退出锁竞争的方式是:利用本地栈分配该所识别出的全局堆分配方法(也就是原始全局堆分配方法)所请求的内存空间。由上所述,本地栈是多线程中的每个线程独享的内存空间,因此利用本地栈分配原始全局堆分配方法所请求的内存空间,不会影响其它线程,也不会导致全局内存堆的锁竞争进一步激烈,相反会降低原有全局内存堆锁竞争的冲突程度。
根据本发明的一个实施例,所识别的应用程序中的全局堆分配方法为包含本地栈分配和全局堆分配的条件分支语句,并且所述条件为所述全局堆分配方法是否为多线程冲突热点。下面给出了一个包含分支语句的全局堆分配方法的具体示例:
上述包含分支语句的全局堆分配方法的含义是:如果该内存分配并非多线程冲突热点,则执行全局堆分配方法;否则,执行本地栈分配方法。
根据本发明的一个实施例,上述包含分支语句的全局堆分配方法是由程序开发人员在编写程序代码过程中编写的。根据本发明的另一实施例,上述包含分支语句的全局堆分配方法是通过代码注入的方式,对应用程序中的原始全局堆分配方法进行修改而得到的。在此情形下,原始全局堆分配方法(也就是程序开发人员所编写的全局堆分配方法)可能是例如:
malloc(...);//allocate memory from global heap
综上所述,通过图3所示的方法,通过判断程序中的全局堆分配方法是否为多线程冲突热点,来决定是否利用本地栈分配原始全局堆分配方法所请求的内存空间,从而有的放矢地根据实时运行状态动态调整程序中固有的全局堆分配方法,减少了全局堆上产生的锁竞争,有效提高了资源分配的效率以及资源的利用率。
图4示出了根据本发明又一实施例的用于在多线程环境下动态调整全局堆分配的方法的流程图。
图4所示的方法从步骤401开始,在步骤401中,识别应用程序中的全局堆分配方法。步骤401对应于图3所示的方法中的步骤301,在此不再赘述。在步骤402中,通过代码注入修改全局堆分配方法,以使得原始全局堆分配方法被修改为包含本地栈分配和全局堆分配的条件分支语句。具体的条件分支语句的示例在上文中已经给出,在此不再赘述。需要指出的是,步骤402中的代码注入并非必需的步骤。程序开发人员可以在程序开发时即将全局堆分配方法写成包含所述分支语句的全局堆分配方法,从而无需代码注入的步骤。还需要指出的是,利用代码注入手段来修改全局堆分配方法,并非意味着一定要修改原始程序代码本身,而可以仅在编译或实际运行的过程中加入“条件分支逻辑”,而原始的程序代码并不发生改变。本领域技术人员应当理解,代码注入为现有技术中的技术手段,具体实现代码注入的细节不再详述。并且,代码注入既可以在源代码级别实现,也可以在目标代码级别实现,这取决于具体的程序代码类型。
接下来,在步骤403中,判断所述全局堆分配方法是否为多线程冲突热点。可以理解,步骤403对应于图3所示的方法中的步骤302。根据本发明的一个实施例,通过实时监测所述全局堆分配方法的多线程冲突参数来判断所述全局堆分配方法是否为多线程冲突热点。根据本发明的一个实施例,多线程冲突参数包括下列参数中的一个或多个:所述全局堆分配方法在单位时间内的调用次数;所述全局堆分配方法所请求分配的全局内存空间;以及所述全局堆分配方法在单位时间内的锁冲突次数。需要指出的是,上述参数种类以及所监测的数量并非固定的,本领域技术人员在理解本发明构思的基础上完全可以引入多种其它的参数类型,例如锁等待时间。通过在程序运行过程中所监测到的参数值,利用预设的规则,就可以判断全局堆分配方法是否为多线程冲突热点。预设的规则的一个具体实例如下:“如果(锁冲突次数/方法调用次数)>90%并且单位时间内方法被调用次数>1000,则认为该全局堆分配方法为多线程冲突热点”。本领域技术人员应当理解,规则的设定可以根据具体的程序类型、代码类型、程序运行环境的不同而有多种组合或变化。并且,带有条件分支语句的全局堆分配方法本身即体现了一种规则的设定,无论是否存在另外的预设规则,均不影响实现本发明的构思。
根据本发明的一个实施例,上述对参数的监测是定时触发的,例如每5秒或每2秒监测一次。根据本发明另一实施例,上述对参数的单位时间的设定可以是事先设定的,例如每3秒内的方法调用次数、锁冲突次数。由于对参数的监测是在程序实时运行(run time)过程中进行的,因此可以根据实时运行的监测结果动态调整全局堆的分配,有可能当前从本地栈中分配内存,而下一次监测被触发时又调整为从全局堆中分配内存。
需要指出的是,上述各类参数的监测均可利用现有技术手段实现,不同的监测手段取决于具体的实现平台或运行环境。例如,对于“全局堆分配方法在单位时间内的调用次数”这一参数,在AIX平台上,可以利用tprof这一工具取得,而在Linux平台上,则可以利用operafile来取得。对于“全局堆分配方法在单位时间内的锁冲突次数”这一参数,在java中,可以利用Java Lock Monitor来取得,而在DB2环境下,则可以利用DB2的Lock Trace来获取。
如果在步骤403中的判断结果为是,则进行至步骤404,判断所述全局堆分配方法所请求的内存空间是否大于本地栈所允许分配的上限空间。由于本地栈(Stack)所允许的内存空间通常有一定的上限,这取决于不同的平台环境。例如,在Window环境下,本地栈的默认空间大小为1M;在Linux环境下为2M;在AIX环境下,对于32-bits的应用而言为0.75M,对于64-bits的应用而言为1.5M。本领域技术人员应当理解,虽然不同的平台可能具有默认的本地栈上限空间,用户可以自行设定或改变该默认空间的大小。在步骤404中的判断的目的是:如果全局堆分配方法是多线程冲突热点,但是该全局堆分配方法请求分配的内存空间超过了本地栈的默认空间上限,那么需要进行至步骤406(也就是步骤404的判断结果为否),仍然利用全局堆分配内存空间。如果步骤404的判断结果为是,则进行至步骤405,利用本地栈分配所述全局堆分配方法请求的内存空间。
如果在步骤403中的判断结果为否,则说明该全局堆分配方法并非多线程冲突热点,因此进行至步骤406,仍然利用全局堆分配内存空间。
需要指出的是,本地栈所允许分配的上限空间完全可以作为一个监测参数,也就是作为在步骤403中判断是否为多线程冲突热点的一个判断依据。也就是说,步骤404的判断并非必需的,之所以在图4中特别地示出该步骤,是为了便于更详细地说明技术方案可能的变化及实施例。
图5示出了根据本发明又一实施例的用于在多线程环境下动态调整全局堆分配的系统的框图。图5所示的系统在整体上由系统500表示。具体地,系统500包括识别装置501,被配置为识别应用程序中的全局堆分配方法;判断装置502,被配置为判断所述全局堆分配方法是否为多线程冲突热点;以及调整装置503,被配置为响应于判断结果为是,利用本地栈分配所述全局堆分配方法所请求的内存空间。本领域技术人员应当理解,图5所示的系统中的装置501-503分别对应于图3所示的方法中的步骤301-303,在此不再赘述。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
虽然以上结合具体实例,对本发明的利用远程应用处理本地文件的系统及方法进行了详细描述,但本发明并不限于此。本领域普通技术人员能够在说明书教导之下对本发明进行多种变换、替换和修改而不偏离本发明的精神和范围。应该理解,所有这样的变化、替换、修改仍然落入本发明的保护范围之内。本发明的保护范围由所附权利要求来限定。
Claims (12)
1.一种用于在多线程环境下动态调整全局堆分配的方法,包括:
识别应用程序中的全局堆分配方法;
判断所述全局堆分配方法是否为多线程冲突热点;
响应于判断结果为是,利用本地栈提供所述全局堆分配方法所请求的内存空间,
该全局堆为由多个线程所共享的内存空间,并且该本地栈为由多个线程中的各个线程所独享的内存空间,
其中判断所述全局堆分配方法是否为多线程冲突热点包括:
通过实时监测所述全局堆分配方法的多线程冲突参数来判断所述全局堆分配方法是否为多线程冲突热点,所述多线程冲突参数包括下列参数中的一个或多个:
所述全局堆分配方法在单位时间内的调用次数;
所述全局堆分配方法所请求分配的全局内存空间;
所述全局堆分配方法在单位时间内的锁冲突次数。
2.如权利要求1所述的方法,还包括:
响应于判断结果为否,利用所述全局堆分配所述全局堆分配方法所请求的内存空间。
3.如权利要求1或2所述的方法,其中响应于判断结果为是,利用本地栈分配所述全局堆分配方法所请求的内存空间包括:
响应于判断结果为是,判断所述全局堆分配方法所请求的内存空间是否大于本地栈所允许分配的上限空间;
响应于所述全局堆分配方法所请求的内存空间大于本地栈所允许分配的上限空间,利用所述全局堆提供所述全局堆分配方法所请求的内存空间;以及
响应于所述全局堆分配方法所请求的内存空间不大于本地栈所允许分配的上限空间,利用所述本地栈提供所述全局堆分配方法所请求的内存空间。
4.如权利要求1所述的方法,其中所识别的应用程序中的全局堆分配方法为包含本地栈分配和全局堆分配的条件分支语句,所述条件为所述全局堆分配方法是否为多线程冲突热点。
5.如权利要求4所述的方法,其中条件分支语句是通过代码注入对应用程序中的原始全局堆分配方法进行修改而得到的。
6.如权利要求3所述的方法,其中本地栈所允许分配的上限空间值为预设的不大于本地栈最大空间的值。
7.一种用于在多线程环境下动态调整全局堆分配的系统,包括:
识别装置,被配置为识别应用程序中的全局堆分配方法;
判断装置,被配置为判断所述全局堆分配方法是否为多线程冲突热点;以及
调整装置,被配置为响应于判断结果为是,利用本地栈提供所述全局堆分配方法所请求的内存空间,
该全局堆为由多个线程所共享的内存空间,并且该本地栈为由多个线程中的各个线程所独享的内存空间,
其中判断装置被配置为:
通过实时监测所述全局堆分配方法的多线程冲突参数来判断所述全局堆分配方法是否为多线程冲突热点,所述多线程冲突参数包括下列参数中的一个或多个:
所述全局堆分配方法在单位时间内的调用次数;
所述全局堆分配方法所请求分配的全局内存空间;
所述全局堆分配方法在单位时间内的锁冲突次数。
8.如权利要求7所述的系统,所述调整装置被进一步配置为:
响应于判断结果为否,仍然利用所述全局堆分配所述全局堆分配方法所请求的内存空间。
9.如权利要求7或8所述的系统,其中调整装置被配置为:
响应于判断结果为是,判断所述全局堆分配方法所请求的内存空间是否大于本地栈所允许分配的上限空间;
响应于所述全局堆分配方法所请求的内存空间大于本地栈所允许分配的上限空间,利用所述全局堆提供所述全局堆分配方法所请求的内存空间;以及
响应于所述全局堆分配方法所请求的内存空间不大于本地栈所允许分配的上限空间,利用所述本地栈提供所述全局堆分配方法所请求的内存空间。
10.如权利要求7所述的系统,其中所识别的应用程序中的全局堆分配方法为包含本地栈分配和全局堆分配的条件分支语句,所述条件为所述全局堆分配方法是否为多线程冲突热点。
11.如权利要求10所述的系统,其中条件分支语句是通过代码注入对应用程序中的原始全局堆分配方法进行修改而得到的。
12.如权利要求9所述的系统,其中本地栈所允许分配的上限空间值为预设的不大于本地栈最大空间的值。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210086688.0A CN103365720B (zh) | 2012-03-28 | 2012-03-28 | 用于多线程环境下动态调整全局堆分配的方法和系统 |
US13/851,540 US9229775B2 (en) | 2012-03-28 | 2013-03-27 | Dynamically adjusting global heap allocation in multi-thread environment |
US14/487,139 US9235444B2 (en) | 2012-03-28 | 2014-09-16 | Dynamically adjusting global heap allocation in multi-thread environment |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210086688.0A CN103365720B (zh) | 2012-03-28 | 2012-03-28 | 用于多线程环境下动态调整全局堆分配的方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103365720A CN103365720A (zh) | 2013-10-23 |
CN103365720B true CN103365720B (zh) | 2017-12-05 |
Family
ID=49236865
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210086688.0A Active CN103365720B (zh) | 2012-03-28 | 2012-03-28 | 用于多线程环境下动态调整全局堆分配的方法和系统 |
Country Status (2)
Country | Link |
---|---|
US (2) | US9229775B2 (zh) |
CN (1) | CN103365720B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103365720B (zh) | 2012-03-28 | 2017-12-05 | 国际商业机器公司 | 用于多线程环境下动态调整全局堆分配的方法和系统 |
CN103617123A (zh) * | 2013-11-21 | 2014-03-05 | 珠海金山网络游戏科技有限公司 | 一种通过内存块实现内存管理的方法及系统 |
US9575804B2 (en) * | 2015-03-27 | 2017-02-21 | Commvault Systems, Inc. | Job management and resource allocation |
CN106293885B (zh) * | 2015-05-20 | 2019-06-28 | 联芯科技有限公司 | 任务创建、挂起和恢复方法 |
US11030262B2 (en) * | 2015-08-25 | 2021-06-08 | Verizon Media Inc. | Recyclable private memory heaps for dynamic search indexes |
CN107544899B (zh) * | 2016-06-24 | 2020-04-24 | 深圳市中兴微电子技术有限公司 | 一种执行测试用例的方法及装置 |
US10579520B2 (en) * | 2017-11-30 | 2020-03-03 | Webroot Inc. | Multi-ring shared, traversable, and dynamic advanced database |
US10776256B2 (en) | 2018-05-16 | 2020-09-15 | International Business Machines Corporation | Sharing consumed off-heap for parallel data loading |
CN110647397B (zh) * | 2019-09-16 | 2022-06-03 | 北京方研矩行科技有限公司 | 一种基于块内存的内存总量动态控制方法及系统 |
CN110688102B (zh) * | 2019-09-29 | 2022-03-22 | 北京浪潮数据技术有限公司 | 捕获异步接口执行结果的方法、系统、装置及存储介质 |
CN111190961B (zh) * | 2019-12-18 | 2023-09-29 | 航天信息股份有限公司 | 一种动态优化的多线程数据同步方法及系统 |
CN113688068B (zh) * | 2021-10-25 | 2022-02-15 | 支付宝(杭州)信息技术有限公司 | 图数据加载方法及装置 |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6219772B1 (en) | 1998-08-11 | 2001-04-17 | Autodesk, Inc. | Method for efficient memory allocation of small data blocks |
US6341338B1 (en) | 1999-02-04 | 2002-01-22 | Sun Microsystems, Inc. | Protocol for coordinating the distribution of shared memory |
US7035989B1 (en) | 2000-02-16 | 2006-04-25 | Sun Microsystems, Inc. | Adaptive memory allocation |
US6427195B1 (en) | 2000-06-13 | 2002-07-30 | Hewlett-Packard Company | Thread local cache memory allocator in a multitasking operating system |
US7111294B2 (en) | 2001-01-16 | 2006-09-19 | Microsoft Corporation | Thread-specific heaps |
US6848033B2 (en) | 2001-06-07 | 2005-01-25 | Hewlett-Packard Development Company, L.P. | Method of memory management in a multi-threaded environment and program storage device |
US7124251B2 (en) * | 2002-06-24 | 2006-10-17 | Microsoft Corporation | Stack allocation system and method |
US7447829B2 (en) * | 2003-10-15 | 2008-11-04 | International Business Machines Corporation | Heap and stack layout for multithreaded processes in a processing system |
US7558935B1 (en) * | 2004-05-04 | 2009-07-07 | Sun Microsystems, Inc. | Method and system for optimizing memory allocation |
US8024505B2 (en) | 2006-05-11 | 2011-09-20 | Oracle International Corporation | System and method for optimistic creation of thread local objects in a virtual machine environment |
US7992146B2 (en) * | 2006-11-22 | 2011-08-02 | International Business Machines Corporation | Method for detecting race conditions involving heap memory access |
US9038041B2 (en) | 2006-12-04 | 2015-05-19 | Tibco Software, Inc. | Stream processor with compiled programs |
US20080270732A1 (en) * | 2007-04-27 | 2008-10-30 | Weidong Cai | Adaptive arena assignment based on arena contentions |
CN101593131A (zh) * | 2008-05-28 | 2009-12-02 | 国际商业机器公司 | 基于对象池来实现线程操作的方法和设备 |
JP2010039536A (ja) * | 2008-07-31 | 2010-02-18 | Panasonic Corp | プログラム変換装置、プログラム変換方法およびプログラム変換プログラム |
CN101685408B (zh) * | 2008-09-24 | 2013-10-09 | 国际商业机器公司 | 多个线程并行访问共享数据结构的方法及装置 |
CN103365720B (zh) | 2012-03-28 | 2017-12-05 | 国际商业机器公司 | 用于多线程环境下动态调整全局堆分配的方法和系统 |
-
2012
- 2012-03-28 CN CN201210086688.0A patent/CN103365720B/zh active Active
-
2013
- 2013-03-27 US US13/851,540 patent/US9229775B2/en active Active
-
2014
- 2014-09-16 US US14/487,139 patent/US9235444B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN103365720A (zh) | 2013-10-23 |
US20130263149A1 (en) | 2013-10-03 |
US9229775B2 (en) | 2016-01-05 |
US9235444B2 (en) | 2016-01-12 |
US20150007195A1 (en) | 2015-01-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103365720B (zh) | 用于多线程环境下动态调整全局堆分配的方法和系统 | |
CN111052149B (zh) | 用于确定网络中的内存需求的方法和装置 | |
CN108885571B (zh) | 分批处理机器学习模型的输入 | |
US20200401913A1 (en) | Resource configuration method and apparatus forheterogeneous cloud services | |
CN109254842B (zh) | 分布式流式系统的资源管理方法、装置及可读存储介质 | |
US9946563B2 (en) | Batch scheduler management of virtual machines | |
CN106959894B (zh) | 资源分配方法和装置 | |
CN110389816B (zh) | 用于资源调度的方法、装置以及计算机可读介质 | |
US20220035544A1 (en) | Memory allocation method and device, and electronic apparatus | |
CN113157410A (zh) | 线程池调节方法、装置、存储介质及电子设备 | |
CN115840643A (zh) | 计算图的基于流的加速器处理 | |
CN103999121B (zh) | 用于将图像基元部署至计算构造的图像流管线控制器 | |
CN106557369A (zh) | 一种多线程的管理方法及系统 | |
KR20080041047A (ko) | 멀티 코어 프로세서 시스템에서 로드 밸런싱을 위한 장치및 방법 | |
US9104491B2 (en) | Batch scheduler management of speculative and non-speculative tasks based on conditions of tasks and compute resources | |
CN111352711B (zh) | 多计算引擎调度方法、装置、设备及存储介质 | |
CN110300959B (zh) | 用于动态运行时任务管理的方法、系统、设备、装置和介质 | |
CN112764893B (zh) | 数据处理方法和数据处理系统 | |
CN115543577B (zh) | 基于协变量的Kubernetes资源调度优化方法、存储介质及设备 | |
CN115249315B (zh) | 面向异构计算设备的深度学习图像分类方法及装置 | |
CN110287018A (zh) | 批量任务编排方法及装置 | |
CN113157379A (zh) | 集群节点资源调度方法及装置 | |
CN116881009A (zh) | Gpu资源调度方法、装置、电子设备和可读存储介质 | |
CN112181613A (zh) | 异构资源分布式计算平台批量任务调度方法及存储介质 | |
WO2022072012A1 (en) | Optimizing job runtimes via prediction-based token allocation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |