草庐IT

GC_concurrent

全部标签

Java 垃圾回收和原子事件/停止 gc 暂停中断一系列函数调用

我有一个复杂的大型多线程应用程序,我正在为其引入新功能。我添加了对一个专业硬件的调用(通过供应商提供的JNI库)。然而,在此(非常快的)函数被调用之前,一些工作是预先完成的,以填充发送给它的数据结构。然而,应用程序的GC配置文件非常不稳定/糟糕,并且这些填充步骤中的一些似乎被GC中断了。这很重要,因为在这些事件中的第一个事件和移交给硬件资源之间的时间需要保持恒定或尽可能恒定。有没有办法说“为GC同步”,这些操作不会在stoptheworldGC暂停期间被阻止?在RHL5.5上使用64位1.7JDK谢谢 最佳答案 如果实际上是在完整垃

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

在Java6中,我们曾经使用以下GC配置来防止在多次重新部署我们的应用程序后出现PermGenOutOfMemoryException:-XX:+UseConcMarkSweepGC-XX:+CMSClassUnloadingEnabled我们正在迁移到Java7并希望使用新的G1GC,根据我的阅读,它将类从Java内存中的PermGen移动到native内存。是否有一些标志可以启用卸载未使用的类? 最佳答案 G1在FullGC期间执行类卸载,因此您无需指定任何参数即可启用此功能。您可以使用-XX:+TraceClassUnload

java - 使用并发标记扫描 GC 收集器?

这个问题是基于我对link的Java垃圾收集器部分的理解看起来jvm默认情况下在Windows7上使用“ParallelGC”,正如我确认的那样-XX:+PrintCommandLineFlags-version。这篇文章还说Theparallelgarbagecollectorusesmultiplethreadstoperformtheyounggenerationgarbagecollection.Thiscollectorshouldbeusedwhenalotofworkneedtobedoneandlongpausesareacceptable我不确定并行GC使用哪个收集器

Java GC - 有没有办法确定收集了哪些对象

我正在尝试使用-verbosegc标志来监控我的应用程序中的gcActivity。我可以看到有完整和次要的集合,但是有没有办法确定(订阅事件/vm标志/等等)实际收集了哪些对象?谢谢! 最佳答案 有关内存中对象的一般信息,我建议您查看jvisualvm(它位于JDK的bin文件夹中)。它包含许多有关VM在您的程序运行时正在执行的操作的有用信息,包括有关各种对象和内存状态的信息。如果您想要更具体的内容,可以使用Wea​​kReferences和ReferenceQueues。如果您只对几种类型的对象感兴趣,则此选项可能可行。您可以创建

java - 避免在 Java CMS GC 中升级失败

我有一个使用CMS垃圾收集的Java应用程序,它每天都会遭受几次“ParNew(提升失败)”完整GC(请参见下面的示例)。我知道当垃圾收集无法在老一代中找到足够的(连续的)空间来将新一代对象提升到其中时,就会发生提升失败。在这一点上,它被迫进行昂贵的stop-the-worldfullGC。我想避免此类事件。我已经阅读了几篇建议可能的解决方案的文章,但我想在这里澄清/巩固它们:-Xmx:增加堆大小,例如。从2G到4G——为老一代提供更多余量的简单解决方案——根据我的经验,似乎工作得相当好-XX:NewRatio:增加NewRatio,例如。从2到4,为了增加老一代/减少新一代——给老一

java - 为什么 Queue.poll 比 Iteration 快? (java.util.concurrent.ConcurrentLinkedQueue)

我有一段代码可以从队列中获取所有元素。之后我不关心队列的状态,我可以确信在我从队列中删除元素时队列不会被修改。我最初使用迭代器来提取元素,因为我认为它比轮询元素更快...但我运行了以下测试:ConcurrentLinkedQueuequeue=newConcurrentLinkedQueue();for(inti=0;ilist=newLinkedList();longstart=System.currentTimeMillis();for(Objectobject:queue)list.add(object);longtime1=System.currentTimeMillis()-

Unity中字符串拼接0GC方案

本文主要分析C#字符串拼接产生GC的原因,以及介绍名为ZString的库,它可以将字符串生成的内存分配为零。在C#中,字符串拼接通常有三种方式:直接使用+号连接;string.format;使用StringBuilder;下面分别细述。故事的开始首先,简单介绍下String类型。C#String类型内部是“UTF-16”字节字符串。与普通对象一样,它有一个对象头,并在堆内存中分配。同样,字符串基本上只能由“新字符串”生成。'StringBuilder.ToString','Encoding.GetString'等,最后也调用'newstring'来分配一个新字符串。即使是相同的字符串值,“ne

java - 堆内存使用中的 PS Old Gen 内存 : GC settings for Java Out Of Memory Exception

以下是我的JVM设置:JAVA_OPTS=-server-Xms2G-Xmx2G-XX:MaxPermSize=512M-Dsun.rmi.dgc.client.gcInterval=1200000-Dsun.rmi.dgc.server.gcInterval=1200000-XX:+UseParallelOldGC-XX:ParallelGCThreads=2-XX:+UseCompressedOops-Djava.net.preferIPv4Stack=true-Djboss.modules.system.pkgs=org.jbos88,server=y,suspend=n问题:总

java - G1 : What are the differences between mixed gc and full gc?

对于垃圾优先收集器,younggc意味着仅在年轻代执行gc,mixedgc将同时清理年轻代和老年代。那么什么是fullgc?为什么它比mixedgc持续时间更长?我进行了一些搜索,但没有找到任何解释fullgc的帖子。 最佳答案 来自甲骨文G1GCblog和technetworkarticle年轻的GC:YoungGC的集合仅包含年轻/幸存者区域。混合GC:MixedGC的收集集既包括年轻/幸存者区域,也包括老区域。巨大的对象和巨大的分配对于G1GC,任何超过区域大小一半的对象都被视为“Humongousobject”。这样的对象在

java - 使用 java.util.concurrent.Executor 阻止 tomcat 停止

背景:我需要使用java.util.concurrent.Executor来序列化WebService中一些遗留代码的执行。我在WebService类中添加了一个成员变量executor。它由springframework从外部注入(inject)。执行器bean定义如下:Tomcat版本:6.0.22Java版本:1.6Spring框架:2.5.5问题:WS按预期工作。我们将它推出到Linux服务器上。然后我们意识到tomcat停止脚本不能再停止服务。我对tomcat实例使用kill-3。在线程转储中,我找到了这些行:"pool-2-thread-1"prio=10tid=0xad6