1、对象优先分配在Eden区,如果Eden区没有足够的空间时,虚拟机执行一次Minor GC(执行前会判断是否是执行full gc 还是 minor gc)
2、大对象(需要大量连续内存空间的对象)直接进入老年代。这样可以避免大对象在Eden和Survivor之间来回的拷贝
3、长期存活的大对象进入老年代。在survivor区的对象每经过一次minor gc存活下来,年龄就加1。等到年龄达到阈值后(hotspot默认15)就进入老年代
4、动态判断对象的年龄。也就是说在新生代的对象不一定要年龄达到阈值才会进入老年代。当同一个年龄的对象的数量大于survivor区的对象的总量的一半时,
大于等于这个年龄的对象都进入老年代(什么时机进入老年代?minor gc的时候吗)
5、空间分配担保。每次进行minor gc的时候jvm都会计算从survior区进入老年代的对象的大小是否大于老年代的剩余空间,如果大于就只进行minor gc 不然就进行 full gc
最后
以上就是呆萌银耳汤最近收集整理的关于java内存分配规则的全部内容,更多相关java内存分配规则内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复