Questions tagged «garbage-collection»

垃圾回收(GC)是一种自动内存管理形式,它尝试回收垃圾或程序不再使用的对象所占用的内存。


4
减少Javascript中垃圾收集器活动的最佳实践
我有一个相当复杂的Javascript应用程序,它的主循环每秒调用60次。似乎有很多垃圾收集正在进行(基于Chrome开发工具中“内存”时间轴的“锯齿”输出)-这通常会影响应用程序的性能。 因此,我正在尝试研究最佳实践,以减少垃圾收集器要做的工作量。(我在网络上能够找到的大多数信息都考虑到避免内存泄漏,这是一个稍微不同的问题-我的内存正在释放,只是正在进行太多的垃圾收集。)这主要归结为尽可能多地重用对象,但是魔鬼在细节上。 该应用程序按照John Resig的Simple JavaScript Inheritance的 “类”结构进行构造。 我认为一个问题是,某些函数每秒可以调用数千次(因为在主循环的每次迭代中都会调用数百次),也许这些函数中的局部工作变量(字符串,数组等)也可以被调用。可能是问题所在。 我知道较大/较重对象的对象池化(并且在一定程度上使用了这种方法),但是我正在寻找可以广泛应用的技术,特别是在紧密循环中多次调用的函数。 我可以使用哪些技术来减少垃圾收集器必须完成的工作量? 而且,也许还有-可以采用哪些技术来识别哪些对象被垃圾收集最多?(这是一个非常大的代码库,因此比较堆的快照并不是很有效)


1
超出了GC开销限制
JVM抛出“ java.lang.OutOfMemoryError:超出了GC开销限制”的采样时间是多少?我知道您可以使用参数GCTimeLimit和GCHeapFreeLimit来控制98%和2%,但是采样时间是多少?

16
生产中的Java G1垃圾回收
由于Java 7将默认使用新的G1垃圾收集,因此Java是否能够处理更大数量级的堆而不会“破坏” GC暂停时间?有人在生产中实际实施过G1,您的经验是什么? 公平地说,我唯一看到过很长的GC暂停时间是在非常大的堆上,远远超过了工作站。为了澄清我的问题;G1是否会打开通往数百GB堆的网关?结核病?

6
什么时候删除Java临时文件?
假设我使用以下方法在Java中创建了一个临时文件 File tmp = File.createTempFile(prefix, suffix); 如果我没有明确调用该delete()方法,什么时候删除该文件? 凭直觉,可能是JVM终止或更早(由Garbage Collector终止),或更晚(由某些操作系统清除进程终止)。

4
Android-活动构造函数与onCreate
我了解到AndroidActivities具有特定的生命周期,onCreate应该重写该生命周期并将其用于初始化,但是构造函数中到底发生了什么?在任何情况下,您也可以/应该重写Activity构造函数,或者永远不要触摸它? 我假设永远不要使用构造函数,因为对 Activities不会完全清除(从而妨碍了垃圾收集器),并且onDestroy为此目的而存在。它是否正确?

15
在Java中将final用于变量会改善垃圾回收吗?
今天,我和我的同事们讨论了如何final在Java中使用关键字来改善垃圾回收。 例如,如果您编写如下方法: public Double doCalc(final Double value) { final Double maxWeight = 1000.0; final Double totalWeight = maxWeight * value; return totalWeight; } final在方法退出后,在方法中声明变量将有助于垃圾回收从方法中未使用的变量中清除内存。 这是真的?

4
是否收集Java线程垃圾
该问题已发布在某个网站上。我在这里找不到正确的答案,因此我将其再次发布在这里。 public class TestThread { public static void main(String[] s) { // anonymous class extends Thread Thread t = new Thread() { public void run() { // infinite loop while (true) { try { Thread.sleep(1000); } catch (InterruptedException e) { } // as long as this line printed out, you …

14
在Java中将对象分配为null是否会影响垃圾回收?
null在Java中分配未使用的对象引用是否可以以任何可衡量的方式改善垃圾回收过程? 我在Java(和C#)方面的经验告诉我,尝试超越虚拟机或JIT编译器通常是反直观的,但是我看到同事使用这种方法,我很好奇这是否是一个好的选择或其中一种巫术编程迷信?

2
ASP MVC:何时调用IController Dispose()?
我正在对其中一个较大的MVC应用程序进行大的重构/速度调整。现在已经将它部署到生产中了几个月,而我开始等待连接池中的连接等待超时。我已将问题归结为未正确处理的连接。 鉴于此,我此后对基本控制器进行了更改: public class MyBaseController : Controller { private ConfigurationManager configManager; // Manages the data context. public MyBaseController() { configManager = new ConfigurationManager(); } protected override void Dispose(bool disposing) { if (disposing) { if (this.configManager != null) { this.configManager.Dispose(); this.configManager = null; } } base.Dispose(disposing); } } 现在,我有两个问题: 我要介绍比赛条件吗?由于configManager管理DataContext暴露IQueryable<>参数给视图的,因此我需要确保Dispose()在视图完成渲染之前不会在控制器上调用该参数。 MVC框架Dispose()是在呈现视图之前还是之后在Controller上调用的?还是MVC框架将其留给GarbageCollector?

8
G1上的Java 7(JDK 7)垃圾收集和文档
Java 7已经出现了一段时间,但是我在垃圾收集器(尤其是新的G1收集器)的配置上找不到任何好的资源。 我的问题: G1是Java 7中的默认收集器吗?如果不是,我如何激活G1? g1在Java7中有哪些可选设置? 是否对其他收集器(例如cms或Java 7中的并行收集器)进行了更改? 在哪里可以找到有关Java 7中垃圾回收的良好文档?

7
跟踪Java中的内存泄漏/垃圾回收问题
这是我几个月来一直试图寻找的问题。我有一个正在运行的Java应用程序,该应用程序处理xml提要并将结果存储在数据库中。存在间歇性的资源问题,很难追踪。 背景: 在生产包装盒(问题最明显的地方)上,我对包装盒的访问不是特别好,并且无法使Jprofiler运行。那个盒子是运行centos 5.2,tomcat6和java 1.6.0.11的64位四核8gb机器。它以这些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 休眠3 石英1.6.1 DBCP 1.2.1 的MySQL 5.0.45 高速缓存1.5.0 (当然还有许多其他依赖项,特别是jakarta-commons库) 我最能重现该问题的是内存需求较低的32位计算机。我确实可以控制。我已经使用JProfiler对其进行了探究,并修复了许多性能问题(同步问题,预编译/缓存xpath查询,减少线程池,删除不必要的休眠预取以及处理过程中过度的“缓存变暖”)。 在每种情况下,探查器都显示这些资源由于某种原因占用了大量资源,并且一旦进行更改,这些资源就不再是主要的资源消耗。 问题: JVM似乎完全忽略了内存使用设置,填满了所有内存并且变得无响应。这对于面对最终客户的客户来说是个问题,他们希望定期进行轮询(每5分钟一次,然后重试1分钟),对于我们的运营团队来说,这是不断得到通知的,盒子已变得没有响应,必须重新启动它。此框上没有其他可运行的东西。 问题似乎是垃圾回收。我们使用ConcurrentMarkSweep(如上所述)收集器是因为原始的STW收集器导致JDBC超时并变得越来越慢。日志显示,随着内存使用量的增加,即开始引发cms故障,并踢回原始的世界停止收集器,然后该收集器似乎未正确收集。 但是,使用jprofiler运行时,“运行GC”按钮似乎可以很好地清理内存,而不是显示增加的占用空间,但是由于我无法将jprofiler直接连接到生产盒,并且无法解决已证明的热点问题,因此我正在使用剩下的是将Garbage Collection调为盲人的巫毒教。 我试过的 分析和修复热点。 使用STW,Parallel和CMS垃圾收集器。 以最小/最大堆大小以1 / 2、2 / 4、4 / …

7
Java GC:为什么有两个幸存者区域?
对于Sun / Oracle的JVM,我读过GC算法将新一代划分为一个伊甸园区域和两个幸存者区域。我想知道的是,为什么有两个幸存者地区而不是一个?该算法可以在伊甸园和一个幸存者区域之间保持乒乓(目前它在两个幸存者区域之间的方式);还是这种方法有什么缺点?

3
如何请求node.js中的垃圾收集器运行?
在启动时,看来我的node.js应用程序使用了大约200MB的内存。如果我搁置一段时间,它会缩小到9MB左右。 是否可以从应用程序内执行以下操作: 检查应用程序正在使用多少内存? 请求垃圾收集器运行? 我问的原因是,我从磁盘加载了一些文件,这些文件是临时处理的。这可能会导致内存使用量激增。但是在GC运行之前,我不希望加载更多文件,否则存在内存用完的风险。 有什么建议 ?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.