Tag: 垃圾收集

如何将详细垃圾收集输出redirect到文件?

如何将详细垃圾收集输出redirect到文件? Sun的网站显示了一个Unix的例子,但它不适用于Windows。

Java GC(分配失败)

为什么总是“GC(分配失败)”? 适用于linux-amd64 JRE( 1.8.0_25 -b17)的Java HotSpot(TM)64位服务器VM(25.25-b02), CommandLine flags: -XX:CMSInitiatingOccupancyFraction=60 -XX:GCLogFileSize=10485760 -XX:+HeapDumpOnOutOfMemoryError -XX:InitialHeapSize=32212254720 -XX:MaxHeapSize=32212254720 -XX:NewRatio=10 -XX:OldPLABSize=16 -XX:ParallelGCThreads=4 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintStringTableStatistics -XX:+PrintTenuringDistribution -XX:StringTableSize=1000003 -XX:SurvivorRatio=4 -XX:TargetSurvivorRatio=50 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParNewGC -XX:+UseConcMarkSweepGC 27.329: [GC (Allocation Failure) 27.329: [ParNew Desired survivor size 44728320 bytes, new threshold 15 (max 15) – age 1: 16885304 bytes, 16885304 total : 349568K->16618K(436928K), 0.2069129 secs] […]

为什么存在WeakHashMap,但缺lessWeakSet?

从J.布洛赫 一个…内存泄漏的来源是侦听器…确保callback是垃圾回收的最好方法是只存储对它们的弱引用,例如,只将它们作为键存储在WeakHashMap中 。 那么,为什么Java Collections框架中没有任何WeakSet呢?

“Dispose”只能用于包含非托pipe资源的types吗?

我最近和同事讨论了实现IDisposable的Dispose和types的价值。 我认为在实施IDisposable的时候,尽可能快地清理types是有价值的, 即使没有非托pipe资源可以清理 。 我的同事有不同的看法, 如果您没有任何非托pipe资源,则不需要实施IDisposable ,因为您的types最终将被垃圾收集。 我的观点是,如果你有一个ADO.NET连接,你想尽快closures,那么实现IDisposable并using new MyThingWithAConnection()将是有道理的。 我的同事回答说,在封面下,一个ADO.NET连接是一个非托pipe资源 。 我的答复是, 一切最终都是非托pipe资源 。 我知道推荐的一次性模式 ,如果释放托pipe和非托pipe资源,如果Dispose被调用,但是只有通过终结器/析构函数 调用时 才是免费的非托pipe资源 (并且前段时间博客提醒消费者不恰当地使用您的IDisposabletypes ) 所以,我的问题是,如果你有一个不包含非托pipe资源的types,是否值得实现IDisposable ?

由于.NET有一个垃圾收集器,为什么我们需要finalizer / destructors / dispose-pattern?

如果我理解正确的话.net运行库将永远在我之后清理。 所以,如果我创build新的对象,并停止在我的代码中引用它们,运行时将清理这些对象并释放它们占用的内存。 既然是这样,那么为什么一些对象需要一个析构函数或者处理方法呢? 当他们不被引用之后,运行时不会清理它们吗?

在执行“m1 = null;”之后有多less个对象可以进行垃圾回收。 平方米= NULL;”?

执行m1 = null;后我很困惑m1 = null; m2 = null; 。 有多less个对象有资格进行垃圾回收? public class MyTest { MyTest m; void show() { System.out.println("Hello this is show method."); } public static void main(String args[]) { MyTest m1 = new MyTest(); MyTest m2 = new MyTest(); MyTest m3 = new MyTest(); m1.m = m2; m2.m = m3; m3.m = m1; […]

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); } } 现在我有两个问题: 我介绍一个竞赛条件? 由于configManagerpipe理将IQueryable<>参数公开给视图的DataContext ,所以我需要确保在视图完成呈现之前不会在控制器上调用Dispose() 。 视图呈现之前或之后,MVC框架是否在Controller上调用Dispose() […]

Java线程垃圾收集与否

这个问题被张贴在一些网站上。 我没有find正确的答案,所以我在这里再次发布。 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 know it is alive. […]

RAII与垃圾收集器

我最近在CppCon 2016上观看了Herb Sutter关于“Leak Free C ++ …”的畅谈,他谈到了如何使用智能指针来实现RAII(资源获取是初始化) – 概念以及它们如何解决大部分的内存泄漏问题。 现在我在想。 如果我严格遵循RAII规则,这似乎是一件好事,那么为什么这与C ++中的垃圾收集器有什么不同呢? 我知道,在RAII中,程序员完全控制了资源何时被释放,但是在任何情况下都有利于只有垃圾收集器? 会不会有效率? 我甚至听说有一个垃圾收集器可以更有效率,因为它可以一次释放更大的内存块,而不是释放整个代码中的小内存块。

Java非常大的堆大小

有没有人有在Java中使用非常大的堆,12 GB或更高的经验? GC是否使程序无法使用? 你使用什么GC参数? 哪个JVM,Sun或BEA会更适合这个? 哪个平台,Linux或Windows,在这样的条件下performance更好? 在Windows的情况下,在如此高的内存负载下,64位Vista和XP之间会有什么性能差距?