我正在做一个针对JVM GC的项目,我打算用我的手动GC代替JVM自动GC。
我知道JAVA具有自动垃圾收集器。如果我们集成了新的手动垃圾收集器,开发人员需要在其中明确调用new并删除对象(如C ++),该怎么办?
让我们假设程序员编写了没有内存泄漏的空闲代码。
使用手动垃圾收集器代替自动垃圾收集是否有效?
在行业中使用手动GC是否常见?还是程序员到处都使用自动垃圾收集器?。
答案 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是。
在许多其他编程语言中可以。但并非所有语言。
参考: