首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sun最大阈值

Sun最大阈值
EN

Stack Overflow用户
提问于 2010-08-06 21:04:02
回答 2查看 2.2K关注 0票数 3

有一个关于Sun的问题。Sun (旧的1.4.2)表示吞吐量收集器不使用MaxTenuringThreshold ()参数。它只用于CMS。http://java.sun.com/docs/hotspot/gc1.4.2/faq.html

(12)如果我的应用程序有中长性对象,我应该做什么?

  • 年轻一代集合中幸存下来的对象有复制成本(年轻一代集合的部分算法是复制任何幸存的对象)。可以多次复制中期或长期存在的对象。使用-XX选项MaxTenuringThreshold确定复制成本。使用-XX:MaxTenuringThreshold=0将年轻一代集合中幸存下来的对象立即移动到终身代。如果这提高了应用程序的性能,那么长寿命对象的复制就很重要了。注意,吞吐量收集器不使用MaxTenuringThreshold参数

我不知道如何验证这一点,但如果是真的,吞吐量收集器如何确定何时将年轻对象提升到终身生成呢?每一次年轻一代都会被填满(换句话说,MTT =0?)。

EN

回答 2

Stack Overflow用户

发布于 2010-08-07 03:49:42

如果您正在讨论的是一个现代的(1.6.0) Sun GC,您可以下载源代码并自己计算出到底是怎么回事。但当然,这种行为可能会随着补丁级别的不同而改变。

下面是一些最近提到-XXmaxTenuringThreshold选项的文档:

  • Java调优白皮书 - Sun (2005年)
  • “Java6JVM最完整的-XX选项列表” -尤金·库拉舒夫(2006年)

谷歌搜索中也出现了各种各样的提示。但我在网上找不到任何明确的文件或你的问题的明确答案。

票数 0
EN

Stack Overflow用户

发布于 2013-03-01 13:07:39

检查OpenJDK 1.6源代码中的psScavenge.cpp (= -XX:+UseParallelGC =吞吐量收集器)

代码语言:javascript
复制
if (AlwaysTenure) {
    _tenuring_threshold = 0;
} else if (NeverTenure) {
    _tenuring_threshold = markOopDesc::max_age + 1;
} else {
    // We want to smooth out our startup times for the AdaptiveSizePolicy
    _tenuring_threshold = (UseAdaptiveSizePolicy) ? InitialTenuringThreshold :
                                                MaxTenuringThreshold;
}

在这种情况下(OpenJDK 1.6),MaxTenuringThreshold不只是在-XX:+UseAdaptiveSizePolicy被激活时使用。然后,使用缺省初始值7代替。

IMHO,这个粗体的句子确实意味着JDK 1.4.2将使用默认/计算的最大值来确定何时促进年轻对象。

如果要检查值,可以使用-XX:+PrintTenuringDistribution

代码语言:javascript
复制
 Desired survivor size 48286924 bytes, new threshold 10 (max 10)
 - age   1:   28992024 bytes,   28992024 total
 - age   2:    1366864 bytes,   30358888 total
 - age   3:    1425912 bytes,   31784800 total
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3427786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档