JVM 的内存分配策略主要涉及到对象的创建和回收。在 Java 中,当需要创建一个对象时,JVM 会在堆内存中分配一块连续的空间作为该对象的存储空间。而在对象不再被引用时,JVM 会将其标记为可回收对象,并在适当的时候回收这些对象,以释放它们占用的内存空间。下面介绍 JVM 内存分配策略的几种方式:
对象优先在 Eden 区分配:JVM 会将新创建的对象优先分配到 Eden 区,即年轻代的一个区域。当 Eden 区的空间不足时,JVM 会触发一次新生代的垃圾回收。
大对象直接进入老年代:JVM 会将大对象直接分配到老年代,避免大对象在年轻代和老年代之间频繁移动,造成系统开销。
长期存活的对象进入老年代:JVM 会将经过多次垃圾回收仍然存活的对象移动到老年代,避免在年轻代和老年代之间频繁移动。
空间分配担保:JVM 会在新生代发生垃圾回收时,如果某个对象无法分配到空间,则会将其移到老年代中。如果老年代的空间也不足以分配该对象,则会触发一次 Full GC。
栈上分配:对于一些临时对象,JVM 会将其分配到线程栈上,而不是在堆上分配。这样可以避免对象在堆上分配和回收带来的系统开销。
这些内存分配策略都是为了提高 JVM 的内存使用效率,减少垃圾回收带来的系统开销。