在java中给GC更多的CPU时间?
我有一个java应用程序,它可以使用尽可能多的CPU,并使用大量内存(高达80Gb) 我正在优化该应用程序的GC,我想告诉JVM使用给定的GC时间百分比(60%),否则机器不在GC中的时间量就是处理和分配更多内存 我想确认在java中给GC更多的CPU时间?,java,optimization,garbage-collection,Java,Optimization,Garbage Collection,我有一个java应用程序,它可以使用尽可能多的CPU,并使用大量内存(高达80Gb) 我正在优化该应用程序的GC,我想告诉JVM使用给定的GC时间百分比(60%),否则机器不在GC中的时间量就是处理和分配更多内存 我想确认-XX:CMSIncrementalDutyCycle=60参数是我正在寻找的,并且是否有任何其他参数赋予GC更大的权力(我已经看到了CMSIncrementalPacing和CMSIncrementalDutyCycleMin) 非常感谢 我想确认XX:CMSIncremen
-XX:CMSIncrementalDutyCycle=60
参数是我正在寻找的,并且是否有任何其他参数赋予GC更大的权力(我已经看到了CMSIncrementalPacing
和CMSIncrementalDutyCycleMin
)
非常感谢
我想确认XX:CMSIncrementalDutyCycle=60参数 是我正在寻找的东西,如果有任何其他参数 给GC更多的权力(我已经看到了CMS的增长) 和CMSIncrementalDutyCycleMin) 不,你错了。此标志将不控制分配给JVM GC的可用CPU百分比。文件规定:
-XX:CMSIncrementalDutyCycle=<N> default: 50
-XX:CMSIncrementalDutyCycle=默认值:50
这是在次收集之间的时间百分比(0-100)
允许并发收集器运行。如果CMS增量面板是
启用,则这只是初始值
因此,假设您正在使用CMS收集器(-XX:+UseConMarkSweepGC
),那么上面的标志控制允许CMS在次要GC集合之间执行的时间百分比
没有允许您直接控制GC线程执行时间的标志。您无法为GC收集期间的CPU使用设置上限
CMSIncrementalDutyCycle
用于设置次要收集之间的时间(请参阅),因此您可以控制GC运行的频率,从而间接控制CPU的使用。但是,没有参数允许您直接控制CPU的使用 首先,CMSIncreamentalDutyCycle
影响增量CMS algoright(应通过-XX:+CMSIncrementalMode
启用)。增量模式无论如何都不利于您的任务
其次,您可以限制GC任务消耗的CPU核心数量
设置停止世界阶段的核心数量-XX:ParallelGCThreads=N
设置并发任务的核心数量(仅适用于CMS)-XX:congcthreads=N
您可以找到更多与GC相关的选项。“我想确认XX:CMSIncrementalDutyCycle=60参数就是我要寻找的东西”-尝试一下,启用GC日志记录,然后查看?另外,出于好奇:您正在做的是什么,它创建了足够的垃圾,使您在GC中花费的60%时间不会太多?好的。那么,除了GC运行之外,次要集合之间会发生什么呢?您的应用程序执行,jit编译方法,等等。您还应该假设启用了-XX:+CMSIncrementalMode,这对于“大”框来说不是一个好主意。事实上,CMSIncrementalDutyCycle只提供了对它的间接控制。唉,我的问题通过大幅度减少年轻一代而得以解决。谢谢大家。