Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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 JProfiler是什么;运行GC";与JVM执行的常规GC调优相比,按钮用于清理垃圾_Java_Garbage Collection_Jprofiler - Fatal编程技术网

Java JProfiler是什么;运行GC";与JVM执行的常规GC调优相比,按钮用于清理垃圾

Java JProfiler是什么;运行GC";与JVM执行的常规GC调优相比,按钮用于清理垃圾,java,garbage-collection,jprofiler,Java,Garbage Collection,Jprofiler,我有一个java企业应用程序,它在几天内消耗了更多的内存,即使GC正在运行,并且我们有足够的参数集(ConcMarkSweepGC),但它并没有释放完整的内存 当我连接JProfiler时,可以观察到,每当GC运行时,它只会被清除,比如说,如果它消耗了9GB,则只有大约1到1.2GB被清除。同时,如果我点击JProfiler附带的“RunGC”按钮,它将清除占用的9GB中的至少6-7GB 我试图理解Jprofiler GC与应用程序执行的常规GC相比有什么额外的功能 以下是所需的一些细节: -应

我有一个java企业应用程序,它在几天内消耗了更多的内存,即使GC正在运行,并且我们有足够的参数集(ConcMarkSweepGC),但它并没有释放完整的内存

当我连接JProfiler时,可以观察到,每当GC运行时,它只会被清除,比如说,如果它消耗了9GB,则只有大约1到1.2GB被清除。同时,如果我点击JProfiler附带的“RunGC”按钮,它将清除占用的9GB中的至少6-7GB

我试图理解Jprofiler GC与应用程序执行的常规GC相比有什么额外的功能

以下是所需的一些细节: -应用服务器:Wildfly 9 -Java版本:Java8 -操作系统:Windows 2012-64位


这方面的任何帮助都会很有帮助。提前感谢。

不同的GC算法的行为有所不同,但原则上,旧空间上的GC不应总是清除所有未使用的内存。在新的空间中,我们看到了一个复制并行GC来对抗内存碎片,但旧的空间应该要大得多。运行这样一个GC将导致长时间的停止,世界将暂停。您选择了
concmarkswipegc
,这是一个并发GC,如果有足够的可用内存,它将不会尝试执行世界GC循环的完全停止。您可能使用JProfiler在旧空间上启动了一个句号世界GC


如果您想详细了解它,请阅读JVM中不同的GC算法。它们有很多,而且设计时考虑到了不同的目标。

这是正确的。至于实现,JProfiler中的“Run GC”按钮只是在配置好的JVM中调用
System.GC()
。是的,我已经对GC算法有了相当多的了解,我试图理解的是JProfiler是如何告诉GC执行完全停止世界GC的,据我所知,我们只能调用System.gc或runtime.gc,这并不保证完全gc,而且每当我们单击JProfiler的“Run gc”时,它都会在几秒钟内主动清理内存。我错过什么了吗?