小编典典

了解Java内存管理

java

Java程序员知道JVM运行垃圾回收器,而System.gc()只是建议JVM运行垃圾回收器。如果我们使用System.gc(),并不一定会立即运行GC。

如果我误解了Java的垃圾收集器,请纠正我。

除了依赖Java的Garbage Collector之外,还有其他方法可以进行内存管理吗?
如果您打算通过某种有助于管理内存的编程实践来回答问题,请这样做。


阅读 211

收藏
2020-09-23

共1个答案

小编典典

关于Java内存管理,要记住的最重要的事情是“无效化”您的引用。

仅未引用的对象将被垃圾回收。

例如,以下代码中的对象永远不会被收集,并且您的内存将满,而无所事事。

List objs = new ArrayList();
for (int i = 0; i  < Integer.MAX_VALUE; i++) objs.add(new Object());

但是,如果您不引用那些对象,则可以无限循环,而不会出现内存问题。

List objs = new ArrayList();
for (int i = 0; i  < Integer.MAX_VALUE; i++) new Object();

因此,无论您做什么,都要确保删除对不再使用的对象的引用(将引用设置为null或清除集合)。

垃圾收集器何时运行,最好由JVM决定。好吧,除非您的程序即将开始执行占用大量内存且对速度至关重要的事情,所以您可能建议JVM在进入之前运行GC,因为您可能会收集垃圾并继续使用额外的内存。否则,我个人认为没有理由参加竞选System.gc()

希望对您有所帮助。

2020-09-23