Tag: 垃圾收集

什么是固定对象?

我试图find使用ant内存分析器的内存泄漏,我遇到了一个新的术语: 固定对象。 有人可以给我一个很好的和简单的解释这个对象是什么,我怎么能pinn / unpinn对象,并检测谁固定对象? 谢谢

我如何编写一个unit testing来确定一个对象是否可以被垃圾收集?

关于我以前的问题 ,我需要检查一下,是否会被Castle Windsor实例化的组件可以在我的代码完成使用后被垃圾回收。 我已经在上一个问题的答案中尝试了这个build议,但至less对于我的代码来说,它似乎没有像预期的那样工作。 所以我想写一个unit testing,testing某个特定的对象实例是否可以在我的一些代码运行后被垃圾回收。 这可以做到可靠的方式吗? 编辑 根据Paul Stovell的回答,我目前有以下的testing成功: [TestMethod] public void ReleaseTest() { WindsorContainer container = new WindsorContainer(); container.Kernel.ReleasePolicy = new NoTrackingReleasePolicy(); container.AddComponentWithLifestyle<ReleaseTester>(LifestyleType.Transient); Assert.AreEqual(0, ReleaseTester.refCount); var weakRef = new WeakReference(container.Resolve<ReleaseTester>()); Assert.AreEqual(1, ReleaseTester.refCount); GC.Collect(); GC.WaitForPendingFinalizers(); Assert.AreEqual(0, ReleaseTester.refCount, "Component not released"); } private class ReleaseTester { public static int refCount = 0; public ReleaseTester() { […]

卸载使用Assembly.LoadFrom()加载的程序集

我需要检查加载dll后运行GetTypes()的时间量。 代码如下。 Assembly assem = Assembly.LoadFrom(file); sw = Stopwatch.StartNew(); var types1 = assem.GetTypes(); sw.Stop(); double time1 = sw.Elapsed.TotalMilliseconds; 我想卸载并重新加载DLL来检查再次运行GetTypes()花费的时间。 我怎样才能卸载它? assem = null是否足够好? 有没有一种明确的方式来调用垃圾回收器来回收分配给组装的资源?

PHP的垃圾收集澄清

从PHP手册中,session.gc_probability和session.gc_divisor声明gc将基于这个概率发生。 我明白了。 我不清楚的是,这个概率是按照会话还是总体来说的。 所以如果我的概率是GC的1%(1/100),那么这是否意味着如果一个会话不断扩展,每次有1%的改变,特定的会话将被清除? 或者这是否意味着所有现有会议(以及新会议)的1%将触发所有其他会议的GC? 我很确定这是后者,我只是想确定一下。 这个问题的目的是在我们的网站上,我希望用户有长期的会议(6个月)。 如果所有会话中有1%触发了GC,那么这将有效地消除长期会话的目的,因为GC最终会每隔一两个小时发生一次。

强制在Google Chrome中进行垃圾回收

我们正在开发一个ZK单页网页应用程序不断与服务器通信,并更新其部分屏幕。 更新可以像1s一样频繁。 在这些更新期间,大量的JS对象的引用将丢失,最终这些对象必须由垃圾回收器清理。 就我们所知,Chrome只在非活动选项卡上运行垃圾收集器。 这对我们来说是一个问题,因为应用程序的选项卡通常是活动的,几乎从不刷新,所以JS对象永远不会被收集。 如果保持足够的时间,标签最终崩溃( Aww Snap消息)。 我们需要手动启动垃圾回收。 到目前为止,我们已经尝试使用–js-flags="–expose-gc"运行Chrome并运行gc() ,但是它会抛出一个exception: ReferenceError: gc is not defined 这不会发生在Firefox上 – 内存使用率或多或less是一个常数。 强制刷新页面不是一个选项。 我们将感谢任何和所有的build议。 编辑 :我们已经尝试在Chrome版本23.0.1271.97 m和25.0.1364.2 dev-m上运行window.gc()和gc()

垃圾收集的“隔离岛”

任何人都可以解释垃圾收集隔离岛的概念吗?

Java并发和并行GC

本文中的这篇文章build议使用-XX:+UseParNewGC “使用并行GC启用平行年轻代GC”。 我的困惑是,为了使并行和并发GC,我应该 使用-XX:+UseParNewGC或 同时使用-XX:+UseParNewGC 和 -XX:+UseConcMarkSweepGC ? PS 我正在使用JVM 6。

Java 8的默认垃圾收集器

什么是Java 8的默认垃圾收集器? 当我检查JMX Beans时,他们发现它是新一代的平行收集器,老一代的老系列收集器。

system.gc()和runtime.gc()之间的区别

System.gc()和Runtime.gc()之间有什么区别?

在java中滚动垃圾收集器日志

是否有可能在Sun JVM中滚动垃圾收集器日志? 目前我使用以下产生日志: -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -verbose:gc -Xloggc:gc.log 但是我必须使用fifo队列和rotatelogs手动轮换它们来为每一天创build一个新的日志。 我希望有更好的解决办法。 也许有办法从Java内部访问这个日志条目,所以我可以redirect到log4j? 编辑:与FIFO队列的解决scheme是不够好的,因为如果从这个队列(例如rotatelogs)读取的进程慢,它会减慢整个jvm(显然Sun / Oracle做gc日志logging同步)