JVM的内存分配策略主要围绕对象在堆内存中的分配规则展开,核心目标是高效利用内存并减少垃圾回收开销。主要分配策略如下:
大多数对象在新生代的Eden区中创建。当Eden区没有足够空间时,JVM会触发Minor GC(新生代GC)。
示例:
new Object() → 优先分配到Eden区-XX:PretenureSizeThreshold参数设置阈值(单位:字节),超过此值的对象直接进入老年代示例参数:
-XX:PretenureSizeThreshold=1048576 // 1MB以上的对象直接进入老年代-XX:MaxTenuringThreshold参数调整晋升阈值示例参数:
-XX:MaxTenuringThreshold=10 // 年龄达到10的对象进入老年代当Survivor区中相同年龄的所有对象大小总和大于Survivor区的一半时,年龄大于或等于该年龄的对象会直接进入老年代,无需等待达到MaxTenuringThreshold。
-XX:+HandlePromotionFailure)-XX:+UseTLAB开启(默认开启),-XX:TLABSize设置大小这些策略共同作用,实现了对象在JVM堆中的合理分配,平衡了内存利用率和GC效率。实际应用中,这些策略会根据JVM版本、垃圾收集器类型和具体参数配置有所调整。