我是否必须在Java中手动实现垃圾收集?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我是否必须在Java中手动实现垃圾收集?相关的知识,希望对你有一定的参考价值。

我已经阅读了一些关于Java中垃圾收集的内容,但是我找不到在代码中处理垃圾收集的“最佳实践”。我应该在使用后将每个变量设置为null,还是只使用默认的垃圾收集器更有效率和高性能?或者在这种情况下我是否必须通过命令行参数配置垃圾收集器?

谢谢你的建议!

答案

不,JVM为您做到了。这就是为什么它是一种具有自动内存管理的语言。如果您愿意,由于性能问题,您可以致电:

Runtime r = Runtime.getRuntime();
r.gc();

但无法保证垃圾收集器将删除未引用的对象。这是对JVM的一个建议。只有你知道自己在做什么。风险自负。

您可以做的是选择适合您需求的垃圾收集器实现。例如,如果您不想回收任何内存,出于测试目的,您可以通过添加epsilon标志来选择XX:+UseEpsilonGC

另一答案

垃圾收集器主要是自己做的工作。你不需要任何东西。但您甚至可以看到垃圾收集器清除JVM内存,如图所示

its not hard to tell where the garbage collector did his job... From https://raw.githubusercontent.com/dsyer/spring-boot-memory-blog/master/manual-gc-web.png

自动垃圾收集是查看堆内存,识别正在使用哪些对象以及哪些对象未被删除以及删除未使用对象的过程。

进一步的信息:Java Garbage Collection Basics

以上是关于我是否必须在Java中手动实现垃圾收集?的主要内容,如果未能解决你的问题,请参考以下文章

局部变量上的垃圾收集

Java虚拟机9:垃圾收集(GC)-4(垃圾收集器)

java 垃圾收集

Java垃圾收集机制

标记为垃圾收集vs符合java中的垃圾收集条件

Java开发中啥是垃圾回收?