首页 > 解决方案 > JVM -Xmn 内存

问题描述

我的 jvm 内存分配方案。

-Xms2048m -Xmx2048m -Xmn1536m

官方推荐年轻代占堆内存的3/8。

如果我的 -Xmn 分配的内存很小或很大。会有什么影响?

标签: javamemoryjvm

解决方案


年轻代的大小将决定次要 GC 之间的时间。使用简单的指针碰撞方法在 Eden 空间中分配对象,这种方法非常快(对于多个线程,通过使用线程本地分配块来消除争用问题会稍微复杂一些)。Eden 空间越大,应用程序在分配指针到达地址空间末尾之前创建对象的时间就越长。

当 Eden 空间中无法分配更多对象时,将执行 Minor GC,将活动对象从 Eden 复制到幸存者空间,并将已达到tenuring 阈值的对象提升到老年代。大多数对象的寿命都很短(弱世代假设),因此通常只需要复制少量对象。让你的 Eden 空间更大也意味着更多的对象有机会被取消引用,你最终会给老一代带来更低的负载。

3/8 建议适用于广泛的应用。显然,对于不同的应用程序,您可以将其调高或调低以适应内存使用情况。不过要遵循的一个重要规则是保持年轻代小于 50% 的堆空间(即年轻代应该总是小于老一代)。这样做的原因是,如果不是,那么每次运行一次次要 GC 时,收集器都会运行一次主要 GC。这是因为收集器需要确保老一代有足够的空间来从年轻一代提升对象。


推荐阅读