我必须用Java手动实现垃圾收集吗?

时间:2019-03-08 08:13:55

标签: java performance garbage-collection jvm command-line-arguments

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

感谢您的建议!

2 个答案:

答案 0 :(得分:6)

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

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

但不能保证垃圾收集器会删除未引用的对象。这是对JVM的建议。 只有您知道自己在做什么。后果自负。

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

答案 1 :(得分:2)

垃圾收集器主要自己完成这项工作。您不需要任何东西。但是您甚至可以看到垃圾收集器清除了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