java - JVM -Xmn 内存
问题描述
我的 jvm 内存分配方案。
-Xms2048m -Xmx2048m -Xmn1536m
官方推荐年轻代占堆内存的3/8。
如果我的 -Xmn 分配的内存很小或很大。会有什么影响?
解决方案
年轻代的大小将决定次要 GC 之间的时间。使用简单的指针碰撞方法在 Eden 空间中分配对象,这种方法非常快(对于多个线程,通过使用线程本地分配块来消除争用问题会稍微复杂一些)。Eden 空间越大,应用程序在分配指针到达地址空间末尾之前创建对象的时间就越长。
当 Eden 空间中无法分配更多对象时,将执行 Minor GC,将活动对象从 Eden 复制到幸存者空间,并将已达到tenuring 阈值的对象提升到老年代。大多数对象的寿命都很短(弱世代假设),因此通常只需要复制少量对象。让你的 Eden 空间更大也意味着更多的对象有机会被取消引用,你最终会给老一代带来更低的负载。
3/8 建议适用于广泛的应用。显然,对于不同的应用程序,您可以将其调高或调低以适应内存使用情况。不过要遵循的一个重要规则是保持年轻代小于 50% 的堆空间(即年轻代应该总是小于老一代)。这样做的原因是,如果不是,那么每次运行一次次要 GC 时,收集器都会运行一次主要 GC。这是因为收集器需要确保老一代有足够的空间来从年轻一代提升对象。
推荐阅读
- mongodb - 使用spring boot将大量数据从一个集合复制到Mongodb中的另一个集合
- angular - NGRX-Entity-Relationship Graph 没有收到选择器
- mongodb - 如何将 Eclipse 同上连接到 mongodb 云
- asp.net - ASP.NET 4 - 如何在 SQL 中为数据库生成 asp.net 身份架构?
- c# - 如何使用 Cefsharp Winform 共享屏幕?
- jquery - 通过 npm 安装包时如何导入/需要 slim 版本?
- javascript - 从 ASCII 数组中获取总和
- postgresql - 为什么我的 postgreSQL 查询没有从我的表中找到正确的对象?
- macos - SwiftUI NSTitlebarAccessoryViewController
- javascript - 制作具有相对位置和绝对位置的两列