既然 Java 的垃圾回收机制能够自动的回收内存,怎么还会出现内存泄漏的情况呢

既然 Java 的垃圾回收机制能够自动的回收内存,怎么还会出现内存泄漏的情况呢

海绵宝宝撒
浏览 738回答 10
10回答

长风秋雁

内存溢出分两种情况:一种是栈溢出,比如调用了一个无限递归。还有一种是堆溢出,即new 出来的对象没有即使销毁,比如一直new。

largeQ

一些对象其实不需要了但却一直被引用,没办法回收

扬帆大鱼

就目前来说,人做的东西还不能超越人本身,java的GC算法是人写出来的,奈何就有人会作死写出让GC无法回收的代码来

人到中年有点甜

这就如同中国那么大,为什么还有人在朝阳区懵逼一样。

慕桂英3389331

我自己的理解,说的不对的地方欢迎指正。JDK6中,String的一个方法叫subString,这个是用来生成一个子字符串的。为了更加快速的生成,String有一个构造函数,String(int offset, int count, char value[]) { this.value = value; this.offset = offset; this.count = count; }直接指向了原来String的数组。我们都知道,每次都会生成一个新的常量池中的String字符串。然而这个引用就导致了原来的String无法被回收。因为subString的value会指向他。这里就会导致内存泄露。 JVM的确是自己进行GC的,不用程序员过多干涉,但是由于一些错误操作,导致一些本来不在需要使用的对象仍然有引用,才会导致内存泄露的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java