今天再看JDK源码的时候看到了String类的不同版本的实现方式的不同,主要是substring这个方法,JDK6里面的实现方式是:
很明显可以看到,调用String对象的substring方法后指向的对象地址并没有发生改变,只是改变的是偏移量,这样的话在GC阶段就有可能造成内存泄露了。
还好查了一下资料JDK7解决了这个问题,于是赶紧查看了JDK7的源码:
这个里面是通过内存复制的方式重新指向了一个新的地址,解决了内存泄露的隐患
时间: 2024-10-06 15:35:34
今天再看JDK源码的时候看到了String类的不同版本的实现方式的不同,主要是substring这个方法,JDK6里面的实现方式是:
很明显可以看到,调用String对象的substring方法后指向的对象地址并没有发生改变,只是改变的是偏移量,这样的话在GC阶段就有可能造成内存泄露了。
还好查了一下资料JDK7解决了这个问题,于是赶紧查看了JDK7的源码:
这个里面是通过内存复制的方式重新指向了一个新的地址,解决了内存泄露的隐患