我的jvm内存分配方案。
-Xms2048m -Xmx2048m -Xmn1536m
官方的建议是年轻一代是堆内存的3/8。
如果我的-Xmn分配的内存很小或很大。它会有什么影响?
年轻一代的规模将决定小型GC之间的时间。使用简单的指针碰撞方法在Eden空间中分配对象,这种方法非常快(对于多个线程,通过使用线程本地分配块来消除争用问题,它会更复杂一些)。您的Eden空间越大,应用程序在分配指针到达地址空间末尾之前创建对象的时间就越长。
当不能在Eden空间中分配更多对象时,将执行次要GC,将活动对象从Eden复制到幸存者空间,并将已达到临界阈值的对象提升到旧代。大多数对象都是非常短暂的(弱代数假设),因此通常只需要复制少量对象。使你的伊甸园空间更大也意味着更多的物体有可能被解除引用,你最终会降低老一代的负荷。
3/8建议适用于广泛的应用。显然,对于不同的应用程序,您可以向上或向下调整它以适应内存使用情况配置文件。接下来要遵循的一条重要规则是让年轻一代保持不到50%的堆积空间(即年轻一代应始终小于老一代)。这样做的原因是,如果没有,收集器将在每次运行次要GC时运行主要GC。这是因为收藏家需要确保老一代有足够的空间来促进年轻人的对象。