1.String在虚拟机中的实现
特点:
① 不变性,是在多线程的访问中,保持对象的不变性的话就不需要实现同步,省略了同步和锁的等待时间。提高了多线程的访问性能,堆所有想成都是只读的。它的修改操作都是创建新的对象来实现的。
② 针对常量池的优化,是指两个String对象拥有相同的值时,他们只引用常量池中的同一个拷贝。当同一个字符串反复出现时,这个技术可以大幅度节省内存空间。
③ 类的final定义,final类型的对象在系统中不可能有任何子类,这对系统的安全性保护,
String的内存泄漏:
String的内存泄漏在JDK1.7之前,其中的一个SubString()函数在截取字符串时,是直接调整偏离值off和长度count,通过直接对原来Value的引用实现新的字符串。但是当垃圾回收器对原有数据进行回收后,除了被引用的字符外其他字符依然占用内存而没有被清理,造成了内存泄漏。解决办法是通过在JDK1.7中对字符串中的长度进行value的实际length进行计算,并且在SUB新的字符串时,直接创建一个新的字符串而不是使用引用。
String常量池的位置变化:
JDK1.6中还是在永久区,在JDK1.7中就在堆空间中了。
时间: 2024-10-06 22:08:25