可以让 Java 在没有 GC 的情况下运行吗

use*_*435 1 java rust

我在网上找不到太多关于此的内容,但这是我的想法,一种像 rust 分析这样的语言,用于编译何时从内存中释放对象。为什么不能用 Java 做同样的事情,那么我们不需要垃圾收集器。除非是因为这会使编码更加复杂。

所以问题是 Java 编译器能否在运行前管理内存

And*_*ner 12

Java 可以进行“简单”清理,它可以确定某个对象没有从堆栈中泄漏,因此在清理堆栈时可以安全地进行清理。这种逃逸分析还有其他用途,比如判断进入synchronized块时是否需要取锁:如果保证引用是栈限制的,就不需要取锁,因为有没有任何其他线程看到它的风险。

Java 和 Rust 的区别在于 Rust 有严格的所有权概念,因此可以静态地知道何时可以安全地清理所有对象;Java 没有这个概念,所以一般来说,它必须依靠 GC 来解决这个问题。

所以,本质上,不,Java 离不开 GC,因为这就是语言的设计方式;Rust 可以在没有 GC 的情况下工作,因为这就是该语言的设计方式。