JVM内存分配策略

操作系统的三种内存分配方式:

1.静态内存分配策略

    在编译时就能确定运行时的内存需求。

2.栈内存分配策略

    在运行时确定内存需求。

3.堆内存分配策略

    在运行中到相应代码的时候才确定需要的内存空间大小

JAVA中的内存分配:

1.JAVA栈的内存分配:

    JAVA栈是和线程绑定在一起的,一个线程的方法的调用和返回对应于这个java栈的压栈和出栈。当线程激活一个方法时,JVM就会在线程的Java堆栈中新压入一个帧,这个帧自然是在栈的顶部,并且处于活动状态。在这个方法的执行期间,这个帧将会用来保存参数,局部变量,中间计算过程和其他数据。

    栈中主要昂一些基本类型变量数据(如 int,short,long,byte,float,double,boolean,char)和对象句柄(引用)。存取速度比堆更快,仅次于寄存器,栈数据可以共享。缺点是:存在栈中数据的生命周期必须是确定的,这样也导致了其缺乏灵活性。stack的大小时在编译时确定的,运行时无法改变。

2.JAVA堆的内存分配

    每个Java应用都对应一个JVM实例,每个实例都对应一个堆。应用程序在运行中创建的所有类实例或数组都放在这个堆中,并由应用程序所有的线程共享。建立一个对象会分别在栈中存放这个对象的指针,在堆中实际建立这个对象。堆的优势是可以动态分配内存大小,生命周期也不需要告诉编译器,但是缺点正式因为需要动态分配内存,导致其速度较慢。heap的大小是动态分配的,不够时需要向操作系统再请求。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容