草庐IT

ruby - 为什么这个 XML 解析 Ruby 代码在禁用 GC 的情况下运行得更慢?

我有一段使用libxml-rubygem解析500MBXML文件的代码。令我惊讶的是,这段代码在GC禁用的情况下运行较慢,这似乎违反直觉。可能是什么原因?我有足够的可用内存,但系统没有交换。require'xml'#GC.disable@reader=XML::Reader.file('books.xml',:options=>XML::Parser::Options::NOBLANKS)@reader.read@reader.readwhile@reader.name=='book'book_id=@reader.get_attribute('id')@reader.readunti

go - 'gc' 和 'gccgo' 之间的主要区别是什么?

两种流行的Go编译器“gc”和“gccgo”之间的主要区别是什么?构建性能?运行时性能?命令行选项?许可?我不是在寻找关于哪个最好的意见,只是对它们之间的差异的基本概述,因此我可以决定哪个最适合我的需求。 最佳答案 你可以在“Settingupandusinggccgo”中看到更多:gccgo,acompilerfortheGolanguage.ThegccgocompilerisanewfrontendforGCC.Notethatgccgoisnotthegccompiler如“GccgoinGCC4.7.1”(2012年7月)

go - 'gc' 和 'gccgo' 之间的主要区别是什么?

两种流行的Go编译器“gc”和“gccgo”之间的主要区别是什么?构建性能?运行时性能?命令行选项?许可?我不是在寻找关于哪个最好的意见,只是对它们之间的差异的基本概述,因此我可以决定哪个最适合我的需求。 最佳答案 你可以在“Settingupandusinggccgo”中看到更多:gccgo,acompilerfortheGolanguage.ThegccgocompilerisanewfrontendforGCC.Notethatgccgoisnotthegccompiler如“GccgoinGCC4.7.1”(2012年7月)

Java GC : why two survivor regions?

对于Sun/Oracle的JVM,我读到GC算法将新一代划分为一个Eden区域和两个幸存者区域。我想知道的是,为什么有两个幸存者区域而不仅仅是一个?该算法可以在伊甸园和一个幸存者区域之间保持乒乓球(就像它目前在两个幸存者区域之间所做的那样);或者这种方法有什么缺点吗? 最佳答案 我相信JRockit的GC实现更像你建议的那样工作,只有一个伊甸园和一个幸存者空间,但不要引用我的话。HotSpotJVM有两个幸存者空间的原因是为了减少处理碎片的需要。新对象分配在伊甸园空间中。一切都很好。当它满了时,你需要一个GC,所以杀死陈旧的对象并将

Java GC : why two survivor regions?

对于Sun/Oracle的JVM,我读到GC算法将新一代划分为一个Eden区域和两个幸存者区域。我想知道的是,为什么有两个幸存者区域而不仅仅是一个?该算法可以在伊甸园和一个幸存者区域之间保持乒乓球(就像它目前在两个幸存者区域之间所做的那样);或者这种方法有什么缺点吗? 最佳答案 我相信JRockit的GC实现更像你建议的那样工作,只有一个伊甸园和一个幸存者空间,但不要引用我的话。HotSpotJVM有两个幸存者空间的原因是为了减少处理碎片的需要。新对象分配在伊甸园空间中。一切都很好。当它满了时,你需要一个GC,所以杀死陈旧的对象并将

生产环境中的 Java G1 垃圾收集

既然Java7将默认使用新的G1垃圾回收,那么Java是否能够处理一个数量级更大的堆,而不会出现所谓的“破坏性”GC暂停时间?有没有人真正在生产环境中实现过G1,你的经验是什么?公平地说,我唯一一次看到非常长的GC暂停是在非常大的堆上,比工作站要多得多。澄清我的问题;G1会为数百GB的堆打开网关吗?结核病? 最佳答案 我一直在用一个繁重的应用程序对其进行测试:为堆分配60-70GB,随时使用20-50GB。对于这些类型的应用程序,轻描淡写地说您的里程可能会有所不同。我在Linux上运行JDK1.6_22。次要版本很重要——大约在1.

生产环境中的 Java G1 垃圾收集

既然Java7将默认使用新的G1垃圾回收,那么Java是否能够处理一个数量级更大的堆,而不会出现所谓的“破坏性”GC暂停时间?有没有人真正在生产环境中实现过G1,你的经验是什么?公平地说,我唯一一次看到非常长的GC暂停是在非常大的堆上,比工作站要多得多。澄清我的问题;G1会为数百GB的堆打开网关吗?结核病? 最佳答案 我一直在用一个繁重的应用程序对其进行测试:为堆分配60-70GB,随时使用20-50GB。对于这些类型的应用程序,轻描淡写地说您的里程可能会有所不同。我在Linux上运行JDK1.6_22。次要版本很重要——大约在1.

java - System.gc() 什么时候做某事?

我知道垃圾收集在Java中是自动化的。但我知道,如果您在代码中调用System.gc(),JVM可能会或可能不会决定在此时执行垃圾收集。这如何精确地工作?当看到System.gc()时,JVM究竟基于什么/参数决定执行(或不执行)GC?是否有任何示例表明将其放入代码中是个好主意? 最佳答案 在实践中,它通常决定进行垃圾回收。答案因许多因素而异,例如您正在运行的JVM、它所处的模式以及它使用的垃圾收集算法。我不会在您的代码中依赖它。如果JVM即将抛出OutOfMemoryError,调用System.gc()不会阻止它,因为垃圾收集器

java - System.gc() 什么时候做某事?

我知道垃圾收集在Java中是自动化的。但我知道,如果您在代码中调用System.gc(),JVM可能会或可能不会决定在此时执行垃圾收集。这如何精确地工作?当看到System.gc()时,JVM究竟基于什么/参数决定执行(或不执行)GC?是否有任何示例表明将其放入代码中是个好主意? 最佳答案 在实践中,它通常决定进行垃圾回收。答案因许多因素而异,例如您正在运行的JVM、它所处的模式以及它使用的垃圾收集算法。我不会在您的代码中依赖它。如果JVM即将抛出OutOfMemoryError,调用System.gc()不会阻止它,因为垃圾收集器

GC耗时高,原因竟是服务流量小?

原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。简介最近,我们系统配置了GC耗时的监控,但配置上之后,系统会偶尔出现GC耗时大于1s的报警,排查花了一些力气,故在这里分享下。发现问题我们系统分多个环境部署,出现GC长耗时的是俄罗斯环境,其它环境没有这个问题,这里比较奇怪的是,俄罗斯环境是流量最低的一个环境,而且大多数GC长耗时发生在深夜。发现报警后,我立马查看了GC日志,如下: 日志中出现了to-spaceexhausted,经过一番了解,出现这个是由于g1在做gc时,都是先复制存活对象,再回收原region,当没有空闲空间复制存活对象时,就会出现to-space