我有一个相当复杂的JavaScript应用程序,它有一个主循环,每秒钟被称为60次。 似乎有很多垃圾回收正在进行(基于Chrome开发工具中内存时间线的“锯齿”输出) – 这经常会影响应用程序的性能。 所以,我正在努力研究减less垃圾收集器的工作量的最佳实践。 (我在网上find的大部分信息都是关于避免内存泄漏,这是一个稍微不同的问题 – 我的内存正在被释放,只是垃圾收集太多了。)我假设这主要归结为尽可能地重复使用对象,但当然魔鬼是在细节中。 该应用程序是按照John Resig的简单JavaScriptinheritance的 “类”构造的。 我认为一个问题是一些函数每秒可以调用几千次(因为它们在主循环的每次迭代中使用了几百次),也许这些函数中的局部工作variables(string,数组等等)可能是问题。 我知道更大/更重的对象的对象池(我们在一定程度上使用这个对象),但是我正在寻找可以在整个板上应用的技术,特别是在紧密循环中被称为非常多次的函数。 我可以使用哪些技术来减less垃圾收集器必须完成的工作量? 而且,也许还有 – 可以采用哪些技术来确定哪些对象最被垃圾收集? (这是一个非常大的代码库,所以比较堆的快照并不是非常有成效的)
我知道Android的Activities有特定的生命周期,应该重写onCreate并用于初始化,但是在构造函数中究竟发生了什么? 是否有任何情况下,你可以/应该重写Activity构造函数,或者你应该永远不要碰它? 我假设不应该使用构造函数,因为对Activities引用没有完全清理(从而阻碍垃圾收集器),并且onDestroy就是为此目的而存在的。 它是否正确?
这是我一直试图追查几个月的问题。 我有一个Java应用程序运行该进程的XML饲料并将结果存储在数据库中。 有间歇性的资源问题,很难追查。 背景:在生产箱(问题最明显的地方),我没有特别好的访问权限,并且无法运行Jprofiler。 那个盒子是一个64位四核,运行centos 5.2的8gb机器,tomcat6和java 1.6.0.11。 它从这些java-opts开始 JAVA_OPTS="-server -Xmx5g -Xms4g -Xss256k -XX:MaxPermSize=256m -XX:+PrintGCDetails – XX:+PrintGCTimeStamps -XX:+UseConcMarkSweepGC -XX:+PrintTenuringDistribution -XX:+UseParNewGC" 技术堆栈如下: Centos 64位5.2 Java 6u11 雄猫6 Spring / WebMVC 2.5 hibernate3 石英1.6.1 DBCP 1.2.1 Mysql 5.0.45 Ehcache 1.5.0 (当然还有一些其他的依赖项,特别是雅加达公共图书馆) 最近我可以重现这个问题是一个32位的内存要求较低的机器。 我有控制权。 我已经用JProfiler探测死了,并修复了许多性能问题(同步问题,预编译/cachingxpath查询,减less线程池,并消除不必要的hibernate预取,以及在处理过程中overzealous“高速caching预热”)。 在每种情况下,剖析者都将这些资源视为占用了大量资源,并且一旦变化进入,这些资源已经不再是主要资源。 问题: JVM似乎完全忽略了内存使用情况设置,填满了所有的内存并且没有响应。 对于面向客户的客户来说,这是一个问题,他们期望定期进行投票(5分钟和1分钟重试),同样也适用于我们的运营团队,他们经常被告知一个箱子没有响应,必须重新启动。 这个盒子上没有别的重要的东西了。 这个问题似乎是垃圾收集。 我们使用ConcurrentMarkSweep(如上所述)收集器,因为原始的STW收集器导致JDBC超时并且变得越来越慢。 这些日志显示,随着内存使用量的增加,开始抛出cms失败,并且回到原来的停止世界的收集器,然后收集器似乎不能正确收集。 然而,使用jprofiler运行,“运行GC”button似乎很好地清理内存,而不是显示增加的足迹,但由于我不能直接连接到生产框jprofiler,并解决经certificate的热点似乎没有工作我是留下了调整垃圾收集盲目的巫术。 我曾经尝试过: 分析和修复热点。 使用STW,并行和CMS垃圾收集器。 以最小/最大堆大小以1 / […]
今天,我和我的同事讨论了Java中final关键字的用法,以改善垃圾收集。 例如,如果您编写如下的方法: public Double doCalc(final Double value) { final Double maxWeight = 1000.0; final Double totalWeight = maxWeight * value; return totalWeight; } 在方法final声明variables将有助于垃圾收集在方法退出后从方法中未使用的variables中清除内存。 这是真的?
Java 7已经出现了一段时间了,但是在垃圾收集器 ,特别是新的G1收集器的configuration方面我找不到任何好的资源。 我的问题: G1是Java 7中的默认收集器,如果不是,我该如何激活G1? g1在Java7中有什么可选的设置? Java 7中的其他收集器(如cms或并行收集器)是否有任何更改? 我在哪里可以find关于在Java 7垃圾收集良好的文档?
可能重复: 弱引用 – 它们有多有用? 由于垃圾收集器可以随时声明弱引用,是否有使用它们的实际原因?
Go是一种垃圾收集语言: http://golang.org/doc/go_faq.html#garbage_collection 这里说它是一个标记和清理垃圾收集器,但它并没有深入细节,并且正在进行replace……但是,自从Go发布以来,这个段落看起来并没有被更新。 它仍然是标记和扫描? 这是保守的还是精确的? 它是世代吗?
由于Java 7将会默认使用新的G1垃圾回收function,因此Java能够处理大一个数量级的堆而不会造成“破坏性”的GC暂停时间? 有没有人在生产中实际使用G1,你有什么经验? 公平地说,我看到真正长时间的GC暂停是非常大的,比工作站要多得多。 澄清我的问题; G1会打开数百GB的网关吗? TB?
JVM用于抛出java.lang.OutOfMemoryError:超出GC开销限制的采样时间是多less? 我知道你可以通过参数GCTimeLimit和GCHeapFreeLimit控制98%和2%,但是什么是采样时间?
当我运行'git gui'时,出现一个popup窗口 这个版本库目前有大约1500个松散对象。 然后build议压缩数据库。 我之前做过这件事,它将松散的对象减less到大约250个,但是这不会抑制popup。 再次压缩不会改变松散对象的数量。 我们目前的工作stream程需要在从Perforce转换时大量使用“rebase”,而Perforce仍然是规范的SCM。 一旦Git是规范的SCM,我们会定期合并,松散对象问题应该大大减轻。 与此同时,我真的想让这个“有用的”popup窗口消失。