有自己的垃圾收集实现,因此它不需要像C这样的任何析构函数.这使得Java开发人员懒得实现内存管理.
我们仍然可以使用析构函数和垃圾收集器,开发人员可以释放资源,这可以节省垃圾收集器的工作.这可能会提高应用程序的性能.为什么Java不提供任何析构函数的机制?
开发人员无法控制GC,但他/她可以控制或创建对象.那为什么不给它们破坏物体的能力呢?
你断言“垃圾收集非常昂贵” – 你能用证据支持吗?垃圾收集当然不是免费的,但现代垃圾收集器非常好.
请注意,GC能够高效的方法之一是它知道它是进行内存分配和释放(对于托管对象)的唯一方法.允许开发人员明确释放对象可能会妨碍这种效率.您还需要担心如果开发人员试图“使用”一个释放的对象会发生什么:
Foo f = new Foo(); Foo g = f; free(f); // Or whatever System.out.println(g.toString()); // What should this do?
您是否建议每个对象都应该有一个额外的标志“是否已明确释放”需要在每次取消引用时进行检查?说实话,这就像是一场灾难.
你是对的 – 它确实允许Java开发人员在这方面懒惰.这是好事. IDE也允许开发人员变得懒惰 – 高级语言也是如此.等内存分配的懒惰使得托管环境中的开发人员能够花费精力来解决业务问题而不是内存管理.
翻译自:https://stackoverflow.com/questions/2606523/why-does-java-not-have-any-destructor-like-c