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

时间:2021-01-28 15:47:29

标签: java rust

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

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

1 个答案:

答案 0 :(得分:12)

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

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

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