相关疑难解决方法(0)

Java垃圾收集背后的理论和算法

我在很多地方看过,但找不到我可以了解的地方:

什么是Java垃圾收集?

它是如何实现的?

何时以及如何调用?

如果以下是什么算法来回收内存?

总之一切都是关于:)

固定!!!

一篇非常好的文章:http://www.artima.com/insidejvm/ed2/gcP.html

java garbage-collection

18
推荐指数
1
解决办法
2万
查看次数

可以增加gc time引用了旧对象的短命对象吗?

我需要一些关于次要gc集合行为的澄清。调用a()或调用b()寿命长的应用程序,如果它们在旧空间变大时表现最差

//an example instance lives all application life cycle 24x7
public class Example {

    private Object longLived = new Object(); 

    public void a(){
        var shortLived = new ShortLivedObject(longLived); // longLived now is attribute
        shortLived.doSomething();
    }


    public void b(){
       new ShortLivedObject().doSomething(new Object()); // actually now is shortlived
    }

}
Run Code Online (Sandbox Code Playgroud)

我的疑惑来自何处?我发现,在使用的使用权空间变大的应用程序中,gc暂停次数增加了。

做一些测试,我发现如果我强迫jvm使用option,a()而另一个jvm使用option b(),则b()当旧空间变大时,带有option的jvm的暂停持续时间较短,但我不知道为什么。

gc cpu的使用时间

我使用4096中的此属性XX:ParGCCardsPerStrideChunk在应用程序中解决了该问题,但我想知道上述情况是否会导致gctimes增大,从而导致gccard表中的扫描速度变慢或我不知道或正在完全没有关系。

java garbage-collection jvm concurrent-mark-sweep java-8

5
推荐指数
1
解决办法
127
查看次数

Java GC如何调用finalize()方法?

据我了解,GC从一组初始对象(堆栈,静态对象)开始,然后递归遍历它,以建立可达对象图。然后,将这些对象占用的内存标记为已占用,并假定其余所有内存均已释放。

但是,如果此“空闲”内存包含具有finalize方法的对象怎么办?GC必须调用它,但是我不知道它怎么能知道不再可访问的对象。

我想GC可以在所有“可完成的”对象存活时对其进行跟踪。如果是这样,拥有可终结化的对象是否会使垃圾回收即使在它们还活着的情况下也变得更加昂贵?

java garbage-collection jvm

3
推荐指数
1
解决办法
1053
查看次数

HotSpot 使用的 Mark-Compact 算法是什么?

在阅读The Garbage Collection Handbook上的 Mark-Compact 章节时,提供了一系列替代方案,但其中大多数看起来很旧/理论化(例如,2-finger compaction 和 Lisp2 3-pass 方法需要每个额外的标题词)目的)。

有没有人知道 HotSpot 在运行 Mark-Compact 时使用什么算法(我假设是老一代)?

谢谢

garbage-collection jvm jvm-hotspot

3
推荐指数
1
解决办法
264
查看次数