虚拟机如何给对象分配内存?
2018-02-12 21:13
246 查看
当创建一个对象时,需要给新生对象分配内存,而分配内存就是在堆上进行分配。在堆上进行分配的时候,可能在新生代的Eden区上,也可能在老年代中分配,具体的分配策略需要参考一些内存分配的规则。
优先在Eden区分配
大多数情况下,新生对象都在新生代的Eden区进行内存分配,当新生代Eden区没足够空间的时候,会触发一次Minor GC。大对象直接进入老年代
当一个新生对象需要大量连续空间并且对象所需空间大于-XX:PretenureSizeThreshold参数值的时候,这个对象将在老年代分配内存空间,这样可以避免新生代发生大量的内存复制。年龄大的存活对象进入老年代
在新生代每经过一次Minor GC,存活对象的年龄都会增加一岁,当年龄超过-XX:MaxTenuringThreshold参数值的时候,这个对象将进入老年代。动态对象年龄判断
如果新生代Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,年龄等于或超过该年龄的对象将直接进入老年代,不再等待年龄超过-XX:MaxTenuringThreshold参数值的条件进入老年代。相关文章推荐
- java程序运行时对象是怎么进行放置安排? 内存是如何分配的呢?
- JAVA基础积累(程序运行时对象是怎么放置安排,内存是如何分配?)
- 虚拟机如何分配内存和CPU
- Dalvik虚拟机为新创建对象分配内存的过程分析
- Dalvik虚拟机为新创建对象分配内存的过程分析
- Hotspot虚拟机--对象分配,内存布局,访问定位
- 对象如何在内存中分配
- 如何在已经分配的内存上创建对象(摘自cadn论坛)
- 堆的内存结构,对象内存如何分配,GC过程对象的转移
- 简述c++中string对象的内存分配策略?如何获得其可存储的最大字节
- Java内存区域与内存溢出异常--HotSpot虚拟机对象探秘
- Android虚拟机(DVM)内存分配——内存溢出问题
- 如何设置Tomcat的JVM虚拟机内存大
- 《More Effective C++》条款27:如何让类对象只在栈(堆)上分配空间?
- Java对象与内存分配
- Java对象的生命周期-内存分配、回收内存
- Java对象创建、分配、布局、访问小析(HotSpot虚拟机)(三)
- 深入理解JVM虚拟机学习笔记(三)内存分配和回收策略
- placement new 在一块已分配内存上创建对象
- Java虚拟机学习(7):对象内存分配与回收