Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中给GC更多的CPU时间?_Java_Optimization_Garbage Collection - Fatal编程技术网

在java中给GC更多的CPU时间?

在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

我有一个java应用程序,它可以使用尽可能多的CPU,并使用大量内存(高达80Gb)

我正在优化该应用程序的GC,我想告诉JVM使用给定的GC时间百分比(60%),否则机器不在GC中的时间量就是处理和分配更多内存

我想确认
-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
    设置停止世界阶段的核心数量
  • -XX:congcthreads=N
    设置并发任务的核心数量(仅适用于CMS)

您可以找到更多与GC相关的选项。

“我想确认XX:CMSIncrementalDutyCycle=60参数就是我要寻找的东西”-尝试一下,启用GC日志记录,然后查看?另外,出于好奇:您正在做的是什么,它创建了足够的垃圾,使您在GC中花费的60%时间不会太多?好的。那么,除了GC运行之外,次要集合之间会发生什么呢?您的应用程序执行,jit编译方法,等等。您还应该假设启用了-XX:+CMSIncrementalMode,这对于“大”框来说不是一个好主意。事实上,CMSIncrementalDutyCycle只提供了对它的间接控制。唉,我的问题通过大幅度减少年轻一代而得以解决。谢谢大家。