相关疑难解决方法(0)

关于G1的Java 7(JDK 7)垃圾收集和文档

Java 7已经出现了一段时间了,但我找不到任何关于垃圾收集器配置的好资源,特别是新的G1收集器.

我的问题:

  1. G1是Java 7中的默认收集器,如果不是,我如何激活G1?
  2. g7在Java7中有哪些可选设置?
  3. 是否对Java 7中的其他收集器(如cms并行收集器)进行了更改?
  4. 在哪里可以找到有关Java 7中垃圾收集的好文档?

java garbage-collection heap-memory g1gc java-7

80
推荐指数
5
解决办法
10万
查看次数

Hotspot JVM - G1GC 堆大小调整问题

我最近正在测试一个并发负载相对较高的演示应用程序。该应用程序是一个 java 应用程序,并在 Hotspot JVM (1.8.0_111) 上运行。

使用 4G 堆和并行吞吐量收集器,我可以获得大约 400 TPS 的最大吞吐量。吞吐量图表(作为负载的函数)如下所示。

在此处输入图片说明

因为 Oracle 建议对大于 4G 的堆大小使用 G1GC,所以我想尝试 G1,看看这是否对我的应用程序吞吐量有任何好处。

令我惊讶的是,使用 G1GC,我看到了以下吞吐量趋势。

在此处输入图片说明

我真的很惊讶,并决定深入了解这里发生了什么。这是我发现的。

在此处输入图片说明

我看到最初,在 4G 堆中,1.5G 分配给旧代区域,2.5G 分配给 eden 区域。但是随着时间的推移,旧的 gen 不再适合 1.5G,堆会被调整大小。这似乎无伤大雅。但问题似乎在于调整大小的方式。

现在所有的 4G 都分配给了旧的 gen 区域,几乎没有分配给 eden 区域。现在,当需要将某些东西分配给 eden 时,堆会再次调整大小。这成为新的常态,堆被反复调整大小,从而导致应用程序的巨大性能成本。

有没有人在 G1GC 之前注意到这一点?是否有任何建议来协商这个问题?

下面是带有 JVM 选项的启动命令行。

java -server -Xms4096m -Xmx4096m -XX:MetaspaceSize=100m -XX:MaxMetaspaceSize=100m -XX:MaxDirectMemorySize=512m -XX:MinMetaspaceFreeRatio=0 -XX:MaxMetaspaceFreeRatio=100 -XX:CompressedClassSpaceSize=20m -XX:InitialCodeCacheSize=50m -XX:ReservedCodeCacheSize=50m -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/tmp -Xloggc:/servers/logs/gc.log.2017-01-05-085234 -Djava.awt.headless=true -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -Dio.netty.leakDetectionLevel=simple -XX:MaxDirectMemorySize=512m -Dadmin.connectors.http.port=9000 -Dproxy.connectors.http.port=8080 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8654 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -server …
Run Code Online (Sandbox Code Playgroud)

java heap jvm g1gc hotspot

5
推荐指数
1
解决办法
1806
查看次数

标签 统计

g1gc ×2

java ×2

garbage-collection ×1

heap ×1

heap-memory ×1

hotspot ×1

java-7 ×1

jvm ×1