问题标签 [g1gc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
314 浏览

java - Java G1垃圾收集器产生Java不一致?

我最近尝试激活垃圾优先垃圾收集器并对其进行评估。作为开始,我编写了这段代码,试图生成一个java.lang.OutOfMemoryError

...我使用两种情况运行代码:

案例 1. 使用这些标志:-Xmx4096M -XX:+UseG1GC,我得到以下输出:

...这意味着臭名昭著的东西OutOfMemoryError被扔到了某个地方,但在 main 方法中被捕获了。

案例 2. 使用这个标志:-Xmx4096M,我得到这个输出:

...这意味着异常在我期望它被捕获的地方被捕获。

笔记:

  1. 该代码是纯实验性的,不遵循任何特定目的 - 只是为了观察行为。
  2. 该代码使用 Oracle JDK 1.7.0 更新 60、64 位在 Dell Precision M4700 上运行的 Windows 7 Enterprise 上运行。

问题是是否有人可以解释这种行为 - 找不到任何类似的帖子或任何错误报告(我的问题是缺乏一致性)。

0 投票
1 回答
1516 浏览

java - UseG1GC 选项在仅安装 JRE 的系统中是否有效?

我添加了-XX:+UseG1GC选项 JAVA_OPTS 但它似乎不起作用。

我在这台服务器上只安装了 JRE 7,所以我只是想知道是否需要安装 JDK 7。

安装在服务器中的 JRE 如下。

java 版本“1.7.0_25”
Java(TM) SE 运行时环境(构建 1.7.0_25-b15)
Java HotSpot(TM) 64 位服务器 VM(构建 23.25-b01,混合模式)

我必须安装JDK吗?

0 投票
0 回答
596 浏览

java - 在 G1 收集器的并发标记步骤期间,无法解释的长时间停止世界暂停

在 G1 收集器的并发标记步骤中,我们遇到了无法解释/未知的长时间停顿(8 秒)。

从显示问题的 GC 日志中提取。

2014-08-07T13:42:30.555-0400: 92183.305是并发标记开始时,大约在此步骤的 2 秒后,应用程序开始暂停,直到下一次 GC 暂停。

但是 GC 日志声称应用程序在此窗口期间未暂停。
感谢您在理解此问题的根本原因方面提供的任何帮助。

我们的目标 JVM:我们尝试过 Java7 和 Java8

我们的 JVM 选项:

0 投票
1 回答
613 浏览

garbage-collection - G1 垃圾收集器长时间停顿不知道

我正在尝试调整我的应用程序的响应能力,最大允许的 GC 暂停是 40 毫秒。无法理解为什么这个暂停需要大约 900 毫秒的时间。应用程序是低延迟应用程序,旨在提供高 QPS。

GC 参数:-Xmx5G -XX:+UseG1GC -XX:MaxGCPauseMillis=40

日志:

java -version:
java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode)

请帮我理解是什么导致了这么长时间的停顿?以及如何预防?

0 投票
5 回答
1483 浏览

java - Java - 哪些对象正在被垃圾收集?

我的应用程序有很多垃圾收集,我想分析一下。我想看看哪些对象正在被垃圾收集。我认为这会让我知道在哪里寻找优化(添加缓存或其他)。

是否有打印详细 GC 信息的选项,包括每个类中有多少对象被垃圾回收?

如果这很重要,我正在使用 G1GC。

谢谢!

0 投票
1 回答
612 浏览

java - 为什么我使用 G1GC 时 Scan RS 会花很长时间

我正在使用 java1.7.0_67 并使用以下命令运行我的应用程序:

以下是我的 gc 日志:

扫描 RS 花费的时间太长...

我该如何修改它?

0 投票
3 回答
1891 浏览

java - Java中的零垃圾大字符串反序列化,Humongous对象问题

我正在寻找一种方法来反序列化Java 中String的 abyte[]并尽可能少地产生垃圾。因为我正在创建自己的序列化器和反序列化器,所以我可以完全自由地在服务器端(即序列化数据时)和客户端(即反序列化数据时)实现任何解决方案。

通过遍历字符(_ String_ _ 这里有一个很好的辩论。另一种方法是使用反射直接访问底层,但这超出了问题的范围。String'sString.charAt(i)charString'schar[]

但是,我似乎不可能在byte[]不创建char[] 两次的情况下反序列化,这似乎很奇怪。

步骤:

  1. 创造char[]
  2. 遍历byte[]并填写char[]
  3. String(char[])使用构造函数创建字符串

由于 Java 的String不变性规则,构造函数会复制 char[],从而产生 2 倍的 GC 开销。我总是可以使用机制来规避这一点(不安全String的分配 + 反射来设置char[]实例),但我只是想问一下,除了打破关于String's不变性的所有约定之外,这是否有任何后果。

当然,对此最明智的回应是“来吧,停止这样做并信任 GC,原始char[]将非常短暂,G1 将暂时摆脱它”,这实际上是有道理的,如果char[]较小超过 G1 区域大小的 1/2。如果它更大,char[] 将被直接分配为一个巨大的对象(即自动传播到 G1 的区域之外)。在 G1 中,此类对象极难有效地进行垃圾回收。这就是为什么每个分配都很重要。

关于如何解决这个问题的任何想法?

非常感谢。

0 投票
1 回答
794 浏览

java - G1 垃圾收集器是否对每个区域使用相同的区域大小?

Oracle 的G1 垃圾收集器入门教程对 G1 垃圾收集器的区域大小进行了如下说明:

堆是一个内存区域,分为许多固定大小的区域。

[...]

区域大小由 JVM 在启动时选择。JVM 通常针对大约 2000 个区域,大小从 1 到 32Mb 不等。

不清楚 JVM 中是否所有区域都具有相同的大小,或者可能存在不同大小的区域(例如,1500 个区域的大小为 1MB,500 个区域的大小为 2MB)。

0 投票
1 回答
866 浏览

java - 如何从 G1 gc 日志中提取密钥信息

我发现 G1 GC 日志有点神秘,我想问一下日志文件本身是否可以用于了解用于 GC 的特定时间窗口的总“停止世界”时间?

另外,如何为 G1 收集器指定完整的 gc 循环?我看到很多 GC 暂停(年轻),但没有与完整 GC 相当的东西。当然这可能是因为还没有发生,但我不能肯定地说。

任何反馈将不胜感激。

问候,鲍勃

0 投票
1 回答
796 浏览

java - 几天后 GC 暂停变得非常长

我正在运行一个构建系统。我们曾经使用 CMS 收集器,但我们开始遭受非常长的完整 GC 周期,吞吐量(不执行 GC 的时间)约为 90%。所以我现在决定切换到 G1,假设即使我有更长的整体 GC 时间,暂停也会更短,从而确保更高的可用性。所以这个想法似乎比我预期的更有效,我几乎 3 天没有看到完整的 GC,吞吐量为 97%,整体 GC 性能要好得多。(所有截图和数据来自GCViewer

普通的

直到现在(第 6 天)。今天,系统简直发疯了。使用的旧空间仅略低于 100%。我看到 Full GC 几乎每 2-3 分钟触发一次: 狂暴!

旧空间利用: 旧空间

堆大小为 20G(总共 128G RAM)。我目前使用的标志是:

加上日志标志。我似乎缺少的是-XX:+ParallelGCThreads=20(我有 32 个处理器),默认应该是 8。我还从 oracle 中读到建议使用-XX:+G1NewSizePercent=420G 堆,默认应该是 5。

我正在使用 Java HotSpot(TM) 64-Bit Server VM 1.7.0_76,Oracle Corporation

你有什么建议?我有明显的错误吗?要改变什么?我只给 Java 20G 是不是很贪心?这里的假设是,给它太多堆意味着更长的 GC,因为要清理的只是更多(农民逻辑)。

PS:申请不是我的。对我来说,它是一个盒子产品。