JVM中的手动垃圾收集器

时间:2019-07-02 05:43:06

标签: garbage-collection jvm

我正在做一个针对JVM GC的项目,我打算用我的手动GC代替JVM自动GC。

我知道JAVA具有自动垃圾收集器。如果我们集成了新的手动垃圾收集器,开发人员需要在其中明确调用new并删除对象(如C ++),该怎么办?

让我们假设程序员编写了没有内存泄漏的空闲代码。

使用手动垃圾收集器代替自动垃圾收集是否有效?

在行业中使用手动GC是否常见?还是程序员到处都使用自动垃圾收集器?。

1 个答案:

答案 0 :(得分:3)

我认为您的项目过于雄心勃勃。例如,用alloc / free内存管理替换现有的JVM JVM框架可能需要对JVM本地代码代码库进行大量重写,并重新设计Java类库。

(您知道Java 11 OpenJDK源存储库的签出为2.5 GB吗?那里有很多代码。请在跳转之前先看一下。)


您问:

  

使用手动垃圾收集器代替自动垃圾收集是否有效?

我认为不,

  • 正如很久以前所展示的(请参阅Zorn的经典论文),对于大型应用程序,自动GC的速度与使用带智能指针的malloc / free的存储管理一样快(如果不快的话)。

  • 整个Java类库都是在GC自动且高效的前提下设计的。如果您对此进行更改,那么当前的许多API设计都会有问题;即它将泄漏堆对象。

但是,如果您在该项目中投入10多年的熟练开发人员精力,您可能会得到不同的答案。 (可能是一种非常不同的编程语言!)

  

在行业中使用手动GC是否常见?

Java闻所未闻。

在诸如C / C ++之类的语言中,没有考虑自动GC的情况下,使用手动存储管理仍然很常见。 (但不是通用的。了解Boehm conservative collector。)

  

还是程序员到处都使用自动垃圾收集器?

使用Java是。

在许多其他编程语言中可以。但并非所有语言。


参考:

  • 本杰明·佐恩(Benjamin G. Zorn)的“保守垃圾收集的测量成本”,发表在《软件》杂志上。 Exper。 1993. DOI:10.1002/spe.4380230704