Tag: g1gc

java7 G1选项

我找不到与G1运作方式有关的任何选项。 以下两个命令不再适用于java7。 -XX:+G1ParallelRSetUpdatingEnabled -XX:+G1ParallelRSetScanningEnabled

Java中是否存在GC并未引入延迟(停止世界)或者同时运行100%?

只是好奇。 我听说过有关新的G1GC解决延迟问题的事情。 我不能/不想使用RTSJ。 提前致谢

Java的G1垃圾收集器(G1GC)中的类卸载

在Java 6中,我们过去使用以下GC配置来防止在我们的应用程序的多次重新部署后出现Perm Gen OutOfMemoryException : -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled 我们正在转向Java 7,并希望使用新的G1 GC,从我所读过的内容中,将类从Java内存中的PermGen移动到本机内存。 是否有一些标志可以卸载未使用的类?

什么原因导致Java中的长旋转和同步时间?

在Java 8 Update 45中,将这些选项添加到java调用中: -XX:+PrintGCApplicationStoppedTime -XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1 向我显示这些统计数据: vmop [threads: total initially_running wait_to_block] [time: spin block sync cleanup vmop] page_trap_count 3679.229: no vm operation [ 72 1 2 ] [ 6016 0 6016 0 0 ] 1 2015-05-22T11:25:27.519+0200: Total time for which application threads were stopped: 6.0168551 seconds, Stopping threads took: 6.0164099 seconds 这里的问题是Stopping threads时间很长。 […]

UseConcMarkSweepGC vs UseParallelGC

我目前遇到很长时间的垃圾收集问题。 请参阅以下内容。 我目前的设置是我使用-Xms1g和-Xmx3g。 我的应用程序使用的是java 1.4.2。 我没有设置任何垃圾收集标志。 从它的外观来看,3gb是不够的,我真的有很多垃圾收集的对象。 题: 我应该改变我的垃圾收集算法吗? 我该怎么用? 是否更好地使用-XX:+UseParallelGC or -XX:+UseConcMarkSweepGC 或者我应该使用这种组合 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC 占用内存的主要是报告数据而不是缓存数据。 此外,该机器有16GB的内存,我打算将堆增加到8GB。 这两个选项之间有什么区别,因为我仍然觉得很难理解。 该机器有多个处理器。 我可以拍摄最多5秒,但30至70秒真的很难。 谢谢您的帮助。 Line 151493: [14/Jan/2012:11:47:48] WARNING ( 8710): CORE3283: stderr: [GC 1632936K->1020739K(2050552K), 1.2462436 secs] Line 157710: [14/Jan/2012:11:53:38] WARNING ( 8710): CORE3283: stderr: [GC 1670531K->1058755K(2050552K), 1.1555375 secs] Line 163840: [14/Jan/2012:12:00:42] WARNING ( 8710): CORE3283: stderr: [GC […]

G1GC评论阶段耗时太长

我的服务器应用程序负载有时没有响应,我发现该问题与很长的“GC备注”有关。 没有实现垃圾收集调整。 我的测试服务器是4核/ 8 GB / 8 GB交换。 这是gc logs的日志输出。 2014-04-06T04:39:58.426+0530: 67263.405: [GC remark, 46.7308340 secs] 2014-04-06T04:40:45.167+0530: 67310.146: [GC cleanup 1951M->1750M(2954M), 0.0037930 secs] 2014-04-06T04:40:45.174+0530: 67310.153: [GC concurrent-cleanup-start] 2014-04-06T04:40:45.175+0530: 67310.154: [GC concurrent-cleanup-end, 0.0002800 secs] 2014-04-06T04:40:45.633+0530: 67310.612: [GC pause (young) 2451M->1546M(2954M), 0.0764360 secs] 2014-04-06T04:40:45.815+0530: 67310.794: [GC pause (young) (initial-mark) 1672M->1554M(2954M), 0.0687640 secs] 2014-04-06T04:40:45.884+0530: 67310.863: [GC concurrent-root-region-scan-start] 2014-04-06T04:40:45.912+0530: […]

是-XX:+ UseG1GC正确替换-Xincgc?

目前,我们通过在java命令中添加-Xincgc来使用增量垃圾收集器。 在JDK 8中,不推荐使用此开关。 那么什么是它的等效替代品呢? -XX:+UseG1GC ? 背景:应用程序有一个8GB的堆,并创建了许多短生命对象。 我注意到它经常暂停几秒钟来进行垃圾收集。 出于好奇,我添加了-Xincgc并发现停顿消失了,整体性能提高了~4倍。 不幸的是,我没有找到任何关于-Xincgc触发什么类型的垃圾收集器的-Xincgc 。 有CMS(并发标记和扫描)和新G1(垃圾优先)。 但是我用-Xincgc得到了-Xincgc ?

是否默认启用G1垃圾收集器的String Deduplicationfunction?

JEP 192:在Java 8 Update 20中实现的G1中的字符串重复数据删除添加了新的字符串重复数据删除function: 通过增强G1垃圾收集器来减少Java堆实时数据集,以便自动且连续地对重复的String实例进行重复数据删除。 JEP页面提到命令行选项UseStringDeduplication (bool)允许启用或禁用重复数据删除function。 但是JEP页面并没有指出默认值。 ➠与Java 8和Java 9捆绑在一起的G1垃圾收集器中,默认情况下重复数据删除function是打开还是关闭? ➠是否有“getter”方法在运行时validation当前设置? 我不知道在JEP页面之外查找文档的位置。 至少在Java 9的HotSpot配置实现中,默认情况下启用 G1垃圾收集器 。 这个事实现在促成了这个问题。 有关String interning和重复数据删除的更多信息,请参阅Aleksey Shipilev在29:00的2014-10演示文稿 。

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

我正在寻找一种方法从Java中的byte[]反序列化String ,尽可能少生成垃圾。 因为我正在创建自己的序列化器和反序列化器,所以我可以完全自由地在服务器端(即在序列化数据时)和客户端(即在反序列化数据时)实现任何解决方案。 我已经设法通过遍历String’s ( String.charAt(i) )并将每个char (16位值)转换为2x 8位值,有效地序列化 String而不会产生任何垃圾开销。 这里有一个很好的辩论。 另一种方法是使用Reflection直接访问String’s底层char[] ,但这超出了问题的范围。 但是,我似乎不可能在不创建char[] 两次的情况下反序列化byte[] ,这看起来很奇怪。 步骤: 创建char[] 迭代byte[]并填写char[] 使用String(char[])构造函数创建String 由于Java的String immutability规则,构造函数复制char [],创建2x GC开销。 我总是可以使用机制来规避这个(不安全String分配+reflection来设置char[]实例),但我只是想问一下除了我违反String’s不变性的每个约定之外是否还有其他后果。 当然,对此最明智的回应是“来吧,停止这样做,并相信GC,原始的char[]将是非常短暂的,G1将暂时摆脱它”,这实际上是有道理的, 如果char[]小于G1区域大小的1/2 。 如果它更大,char []将直接分配为一个巨大的对象(即自动传播到G1的区域之外)。 这些物体很难在G1中有效地进行垃圾收集。 这就是每个分配都很重要的原因。 关于如何解决这个问题的任何想法? 非常感谢。

有人能理解G1垃圾收集器输出吗?

我使用以下选项运行G1垃圾收集器的Java程序: -XX:-UseBiasedLocking -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:/var/tmp/gclog.out 输出看起来像这样…… 44900.297: [GC pause (young)44900.386 (initial-mark), 0.08894851 secs] : [GC concurrent-mark-start] [Parallel Time: 83.7 ms] [GC Worker Start Time (ms): 44900297.6 44900297.6 44900297.6 44900297.6 44900297.6 44900297.7 44900297.7 44900297.7 44900297.7 44900297.7 44900297.7 44900297.7 44900297.7 Avg: 44900297.7, Min: 44900297.6, Max: 44900297.7, Diff: 0.1] [Update RS (ms): 23.5 24.3 25.0 […]