<细节向>JVM内存分配机制(策略)
首先JVM内存分配机制有着三大原则和一个担保机制:
三大原则:
1.优先分配到eden区;
2.大对象,直接分配到老年代;
3.长期存活的对象分配到老年代;
担保机制:
空间分配担保
Firstly,首先验证三大原则之:优先分配到eden区
创建一个4m的字节数组,如下:
打印gc日志如下:
Heap
PSYoungGen total 38400K, used 6759K [0x0000000795580000, 0x0000000798000000, 0x00000007c0000000)
eden space 33280K, 20% used [0x0000000795580000,0x0000000795c19c00,0x0000000797600000)
from space 5120K, 0% used [0x0000000797b00000,0x0000000797b00000,0x0000000798000000)
to space 5120K, 0% used [0x0000000797600000,0x0000000797600000,0x0000000797b00000)
ParOldGen total 87552K, used 0K [0x0000000740000000, 0x0000000745580000, 0x0000000795580000)
object space 87552K, 0% used [0x0000000740000000,0x0000000740000000,0x0000000745580000)
Metaspace used 3078K, capacity 4496K, committed 4864K, reserved 1056768K
class space used 339K, capacity 388K, committed 512K, reserved 1048576K
可以明显看到,这个字节数组被优先分配到了年轻代的eden区。
Secondly, 验证第二大原则:大对象,直接放入老年代。
创建一个40m的字节数组,如下:
打印的gc日志如下:
Heap
PSYoungGen total 38400K, used 6759K [0x0000000795580000, 0x0000000798000000, 0x00000007c0000000)
eden space 33280K, 20% used [0x0000000795580000,0x0000000795c19c00,0x0000000797600000)
from space 5120K, 0% used [0x0000000797b00000,0x0000000797b00000,0x0000000798000000)
to space 5120K, 0% used [0x0000000797600000,