- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我经常读到,在 Sun JVM 中,短期对象(“相对较新的对象”)可以比长期对象(“相对较旧的对象”)更有效地进行垃圾收集
最佳答案
大多数 Java 应用程序会创建 Java 对象,然后很快将其丢弃,例如。您在方法中创建了一些对象,然后一旦退出该方法,所有对象都会消失。大多数应用程序都以这种方式运行,并且大多数人倾向于以这种方式编写应用程序。 Java 堆大致分为 3 部分,永久、老(长生命周期)代和年轻(短生命周期)代。 Young gen 进一步分为 S1、S2 和 eden。这些只是堆。
大多数对象都是在年轻一代中创建的。这里的想法是,由于对象的死亡率很高,我们快速创建它们,使用它们然后丢弃它们。速度至关重要。当你创建对象时,young gen 会被填满,直到发生 Minor GC。在次要 GC 中,所有存活的对象都从 eden 复制过来,并将 S2 复制到 S1。然后,“指针”停留在 eden 和 S2 上。
每个副本都会使对象老化。默认情况下,如果一个对象存在 32 个副本,即。 32 次次要 GC,然后 GC 估计它会存在更长的时间。因此,它所做的就是通过将其移至老一代来对其进行终身维护。老一代只是一个大空间。当老一代填满时,老一代会发生一次完整的 GC 或主要 GC。因为没有其他空间可以复制,GC 必须压缩。这比 Minor GC 慢很多,这就是我们避免更频繁地这样做的原因。
您可以使用
调整tenuring参数java -XX:MaxTenuringThreshold=16
如果你知道你有很多长寿的对象。您可以使用
打印应用程序的各个年龄段java -XX:-PrintTenuringDistribution
关于java - 为什么让短期和长期对象在垃圾收集中有所不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2620533/
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 5年前关闭。 Improve this
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我试图弄清楚如何基于 JSESSIONID cookie 为具有长期交互式用户 session 的 web 应用程序提供零停机滚动更新,这些 session 应该是粘性的。 出于这个(和其他)原因,我
这更像是一个“你能给我指出正确的方向吗”类型的问题。 基本上,我想为客户提供一种“保存”购物车的方法,也许以后可以与亲戚一起查看(这是摄影师客户的“照片篮”)。 当使用我的“照片篮”时,它会创建一个篮
我正在编写一个使用商店的网络应用程序。如果客户端在30秒内没有收到响应,则认为该请求已失效,并给出超时错误。 我正在尝试让 MongoDB 做同样的事情。例如,如果连接断开 1 分钟,驱动程序将尝试重
我多年来一直在开发和管理 Oracle 数据库应用程序,并且想学习 SQL Server。有没有人有任何书籍推荐(最好是电子版)。当然,我已经对 SQL 了如指掌,所以我想避免任何介绍性的内容,直接进
我是一名优秀的程序员,十分优秀!