[英]Is Garbage Collection in java, specific to a JVM, what happens to other JVMs if an application in one JVM is leaking memory
我知道JVM是一个标准过程,每个JVM都有自己的堆,线程,并且每个Java应用程序都使用独立的JVM。
我想知道一个JVM中的垃圾收集是否会影响计算机中的其他JVM?
我的目标是:研究GC STW会因我编写的应用程序而暂停。
问题1:
If an application in a JVM is leaking memory, will GC in that JVM stop threads
running in other JVMs too? My instinct says no, but I would like to confirm.
问题2:
How do I study the GC pauses of my application? Do I run a canary thread to
measure the pause time and fire load to my application in the same JVM? How can
I do so (in terms of number of threads)? I'd really appreciate an example.
您遇到的最常见但晦涩的问题是,默认情况下,JVM将在STW收集期间使用系统中的所有CPU。 这意味着在同一个盒子上运行的任何其他进程将在此持续时间内变慢,并且此后可能会变短。
建议您在共享系统上运行时减少GC线程数。
否则,如果您对堆大小设置了合理的限制,并且没有对系统进行过多提交,则仅JVM填充不会影响另一个。
如果JVM中的应用程序正在泄漏内存,该JVM中的GC是否也会停止在其他JVM中运行的线程?
仅间接使用所有可用的CPU。
如何研究应用程序的GC暂停?
打印您的GC日志并阅读它们,或者获取一个工具来阅读它们。 仅研究它们通常没有减少内存需求的帮助,我建议使用一种内存分析器,理想情况是使用商业化的工具,例如YourKit。
调整负载不重的GC容易得多。 即首先您要减少垃圾的地方。
是否在同一个JVM中运行一个canary线程来测量我的应用程序的暂停时间和启动负载?
你可以这样做。 有一个叫做jHiccup的工具可以做到这一点。 它使JVM中的暂停更加明显。
我真的很感谢一个例子。
我会下载源代码并自己运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.