gpt4 book ai didi

java - Java中的垃圾收集是特定于JVM的,如果一个JVM中的应用程序泄漏内存,其他JVM会发生什么

转载 作者:行者123 更新时间:2023-11-30 08:26:08 25 4
gpt4 key购买 nike

我理解 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 填满不会影响其他系统。

If an application in a JVM is leaking memory, will GC in that JVM stop threads running in other JVMs too?

只能间接使用所有可用的 CPU。

How do I study the GC pauses of my application?

打印您的 GC 日志并阅读它们,或者获取一个工具来阅读它们。仅仅研究它们通常不如降低内存需求那么有用,我建议使用内存分析器,最好是像 YourKit 这样的商业分析器。

调整负载不重的 GC 会容易得多。即,您首先要减少垃圾的产生。

Do I run a canary thread to measure the pause time and fire load to my application in the same JVM?

你可以做到这一点。有一个工具叫做 jHiccup正是这样做的。它使 JVM 中的暂停更加明显。

I'd really appreciate an example.

我会下载源代码并自己运行。

关于java - Java中的垃圾收集是特定于JVM的,如果一个JVM中的应用程序泄漏内存,其他JVM会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21759404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com