JavaString在虚拟机中的实现
2024-08-27 10:08:30
1.String在虚拟机中的实现
特点:
① 不变性,是在多线程的访问中,保持对象的不变性的话就不需要实现同步,省略了同步和锁的等待时间。提高了多线程的访问性能,堆所有想成都是只读的。它的修改操作都是创建新的对象来实现的。
② 针对常量池的优化,是指两个String对象拥有相同的值时,他们只引用常量池中的同一个拷贝。当同一个字符串反复出现时,这个技术可以大幅度节省内存空间。
③ 类的final定义,final类型的对象在系统中不可能有任何子类,这对系统的安全性保护,
String的内存泄漏:
String的内存泄漏在JDK1.7之前,其中的一个SubString()函数在截取字符串时,是直接调整偏离值off和长度count,通过直接对原来Value的引用实现新的字符串。但是当垃圾回收器对原有数据进行回收后,除了被引用的字符外其他字符依然占用内存而没有被清理,造成了内存泄漏。解决办法是通过在JDK1.7中对字符串中的长度进行value的实际length进行计算,并且在SUB新的字符串时,直接创建一个新的字符串而不是使用引用。
String常量池的位置变化:
JDK1.6中还是在永久区,在JDK1.7中就在堆空间中了。
最新文章
- 【转】TensorFlow练习20: 使用深度学习破解字符验证码
- js按键监听
- World of Warcraft
- 中国各城市PM2.5数据间的相关分析
- ASP.NET MVC 4 让数据库自动迁移
- WinForm(C#)CheckedlistBox绑定数据,并获得选中的值(ValueMember)和显示文本(DisplayMember)
- Java反射-简单应用
- SQL基础学习_04_视图
- for/range/break/continue
- 小程序之 微信小程序下拉上方出现空白
- Spring常用注解总结(2)
- SharePoint 读取内容的插件之SharepointPlus
- cocos2d-x JS 定时器暂停方法
- GitHub入门与实践 读书笔记二:Git的导入
- Filebeat的Registry文件解读
- java监控工具VisualVM
- 【转发】centos 7开启FTP以及添加用户配置权限,只允许访问自身目录,不能跳转根目录
- Windows Service application 初步探索
- Codeforces 1006 F - Xor-Paths
- PAT 乙级 1031 查验身份证(15) C++版