草庐IT

fvtable-gc

全部标签

java - Full GC变得非常频繁

我有一个在一个tomcat实例上运行的Javawebapp。在高峰时段,Web应用程序每秒提供大约30个页面,通常约为15个页面。我的环境是:O/S:SUSELinuxEnterpriseServer10(x86_64)RAM:16GBserver:Tomcat6.0.20JVM:JavaHotSpot(TM)64-BitServerVM1.6.0_14JVMoptions:CATALINA_OPTS="-Xms512m-Xmx1024m-XX:PermSize=128m-XX:MaxPermSize=256m-XX:+UseParallelGC-Djava.awt.headless=

java - 具有大量引用字段(数组除外)的对象是否会破坏 Hotspot JVM 的 GC(s) 堆遍历性能?

假设我定义了aclasswithdozensofreferencefields(而不是使用Object[]等引用数组),并在应用程序中大量实例化此类。HotspotJVM中垃圾回收器遍历堆计算可达对象时会不会影响垃圾回收器的性能?或者,对于某些JVM的内部数据结构或类元数据,它可能会导致显着的额外内存消耗?或者,它会以其他方式影响应用程序的效率吗?这些方面是特定于Hotspot中的每个垃圾收集器算法,还是Hotspot机制的那些部分被所有垃圾收集器共享和使用? 最佳答案 让我改一下问题。“下面是A级还是B级更好?”classA{Ta

java - 如果实例变量仍然有引用,Java GC 会销毁对象吗?

我已经在线阅读了一些Java垃圾收集指南,但我仍然有点不清楚,想确保我的代码中没有内存泄漏。JavaGC会收集失去引用的对象,但它的变量仍然有引用吗?假设我有SomeObject:publicclassSomeObject{publicObjectVarvar;publicSomeObject(){var=newObjectVar();}}还有我的代码:SomeObjectobj1=newSomeObject();SomeObjectobj2=newSomeObject();obj2.var=obj1.var;obj1=null;所以obj1的var有引用,但是obj1不再有任何引用。

java - 需要有关 G1 的并行完整 GC 的解释

作为javaJDK10JEP307的一部分是ParallelFullGCforG1实现了。我试图理解它的描述,但我仍然不确定我是否正确理解了这个想法。我怀疑它是否与并发垃圾有关 最佳答案 作为一个简化的解释——垃圾收集器有两种可能的收集类型,“增量”和“完整”。增量收集是两者中最好的一种,因为它会经常做一些工作。完整收集通常更具破坏性,因为它需要更长的时间并且通常必须在运行时停止整个程序的执行。正因为如此,大多数现代GC(包括G1)一般都会尽量保证在正常情况下,增量回收就足够了,永远不需要全量回收。但是,如果不同世代的大量对象以不可

java - GC 日志旋转数据在应用程序重启时丢失

我使用这个jvm选项来创建gc日志并启用滚动:$java-Xloggc:gc.log-verbose:gc-XX:+PrintGCDetails-XX:+PrintGCDateStamps-XX:+PrintGCTimeStamps-XX:+UseGCLogFileRotation-XX:NumberOfGCLogFiles=5XX:GCLogFileSize=128K但是,当我重新启动应用程序时出现问题。重启后,第一个日志文件gc.log.0被覆盖,该文件的数据未滚动到gc.log.1,因此丢失。我想知道我是否正确,是否有解决方案。提前致谢! 最佳答案

java - 为什么看似不必要地触发 G1 Full GC?

我正在使用javaversion"1.7.0_09"Java(TM)SERuntimeEnvironment(build1.7.0_09-b05)JavaHotSpot(TM)64-BitServerVM(build23.5-b02,mixedmode)使用G1垃圾收集器。JVM参数是-server-Xss4096k-XX:MaxPermSize=512m-XX:PermSize=512m-Xms30G-Xmx30G-Xnoclassgc-XX:+UseNUMA-XX:+UseFastAccessorMethods-XX:ReservedCodeCacheSize=48m-XX:+Us

java - 显式调用 System.gc()?

据说我们不能强制java中的垃圾回收进程。毕竟,它是一个守护线程。但有时,为什么我们显式调用System.gc();函数?值得调用吗?有什么优点和缺点吗?如果在很多情况下都没有用,为什么不从Java中弃用此方法?PS:举例说明会很有用 最佳答案 在我看来,考虑System.gc()方法的最佳方式是向VM发出垃圾收集应该运行的“提示”。也就是说,就像人们认为他们正在执行的大部分“优化”一样,通常最好让系统自己处理事情。系统在不断发展等等。在某些情况下,开发人员实际上可能知道得更多,并且它的用例可能与为什么某些代码仍然用汇编编写的原因非

java - 如何重现 Java OutOfMemoryError - 超出 GC 开销限制

我的方法是创建十万个本地集合并用随机字符串填充它们,如下所示:SecureRandomrandom=newSecureRandom();for(inti=0;imap=newHashMap();for(intj=0;j我也提供了-XX:+UseGCOverheadLimitjvm参数,但是无法获取错误。是否有任何简单可靠的方法/破解方法来解决此错误? 最佳答案 由于您还没有接受任何答案,我假设它们都不适合您。这是一个会的。但首先,回顾theconditionsthattriggerthiserror:Theparallelcolle

Java GC 日志充满了奇怪的字符

我在一些服务器上遇到GC日志问题。它充满了这个:^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@注意到这发生在为JVM提供大内存的服务器上:-Xms32G-Xmx48G。虽然这可能是一个转移注意力的问题,但还

python - 难以理解 python 的 gc.garbage(用于跟踪内存泄漏)

我的一个Python应用程序似乎泄漏了内存,从稳步增加的内存使用情况来看。我的假设是某处的循环引用,尽管已尽最大努力避免这种情况。为了隔离问题,我正在研究手动检查无法访问的项目的方法,这是一种纯粹用于调试的工具。gc模块似乎能够进行必要的跟踪,我尝试了以下代码,旨在编译自上次调用以来形成的无法访问的项目列表。第一次调用仅设置一个基本检查点,不会识别无法访问的项目。defunreachable():#firsttimesetupimportgcgc.set_threshold(0)#onlymanualsweepsgc.set_debug(gc.DEBUG_SAVEALL)#keepun