×

Java的紧凑高效字符串。 (英语) Zbl 1209.68082号

摘要:在几个Java虚拟机中,字符串由两个单独的对象组成:元数据(如字符串长度)存储在实际的字符串对象中,而字符串字符存储在字符数组中。这种分离会导致不必要的开销。每个字符串方法都必须访问这两个对象,这会导致错误的缓存行为并降低执行速度。
我们建议在运行时将字符数组与字符串的元数据对象合并。这将产生一种新的字符串布局,具有更好的缓存性能、更少的字段访问和更少的内存开销。我们为Sun Microsystems的Java HotSpot(^{\text{TM}})VM实现了此优化,因此优化在运行时自动执行,程序员无需执行任何操作。原始类String被转换为优化版本,所有分配字符串对象的方法的字节码都被重写。所有这些转换都是在加载类时由Java HotSpot(^{text{TM}})VM执行的。因此,转换的时间开销可以忽略不计。
基准测试表明,性能得到了改进,内存使用量也有所减少。SPECjbb2005基准测试的性能提高了8%,完全垃圾收集后平均使用的内存减少了19%。SPECjvm98的峰值性能平均提高了8%,最大加速比为62%。

MSC公司:

68甲15 编程语言理论
PDF格式BibTeX公司 XML格式引用
全文: 内政部

参考文献:

[1] 戈斯林,J。;乔伊,B。;斯蒂尔,G。;Bracha,G.:(Java^{TM})语言规范,(2005)·Zbl 0865.68001号
[2] 林德霍姆,T。;Yellin,F.:(Java^{TM})虚拟机规范,(1999)
[3] 标准绩效评估公司,SPECjbb2005基准,http://www.spec.org/jbb2005/, 2005.
[4] 标准绩效评估公司,SPECjvm98基准,http://www.spec.org/jvm98/, 1998.
[5] 布莱克本,S.M。;加纳,R。;霍夫曼,C。;A.M.Khan。;麦金利,K.S。;Bentzur,R。;迪万,A。;范伯格,D。;Frampton,D。;盖耶,S.Z。;Hirzel,M。;霍斯金,A。;跳跃,M。;Lee,H。;莫斯,J.E.B。;Phansalkar,A。;斯特凡诺维奇,D。;Vandrunen,T。;冯·丁克拉奇,D。;维德曼,B.:达卡波基准测试:Java基准测试开发与分析,169-190(2006)
[6] 标准绩效评估公司,SPECjvm2008基准,http://www.spec.org/jvm2008/, 2008.
[7] Häubl,C。;维默,C。;Mössenböck,H.:Java虚拟机的优化字符串,105-114(2008)
[8] Sun Microsystems,Inc.,Java Platform,Standard Edition 7 Source Snapshot版本,http://download.java.net/jdk7/, 2007.
[9] Griesemer,R。;Mitrovic,S.:Java(HotSpot^{TM})虚拟机的编译器,《niklaus wirth:简单的艺术》,133-152(2000)
[10] Kotzmann,T。;维默,C。;Mössenböck,H。;罗德里格斯,T。;罗素,K。;Cox,D.:Java 6的Java(HotSpot^{TM}\)客户端编译器的设计,关于架构和代码优化的ACM事务5,No.1,7(2008)
[11] Cytron,R。;费兰特,J。;罗森,B.K。;韦格曼,M.N。;Zadeck,F.K.:高效计算静态单一赋值形式和控制依赖图,《编程语言和系统上的ACM事务》13,第4期,451-490(1991)
[12] 维默,C。;Mössenböck,H.:线性扫描寄存器分配器中的优化间隔拆分,132-141(2005)
[13] M.Paleczny,C.Vick,C.Click,Java HotSpot\(^{TM}\)服务器编译器,载于:Java虚拟机研究与技术研讨会论文集,USENIX,2001,第1-12页。
[14] 罗素,K。;Detlefs,D.:用有偏锁定和批量重平衡消除与同步相关的原子操作,263-272(2006)
[15] Boldi,P。;Vigna,S.:《Java中的可变字符串:设计、实现和轻量级文本搜索算法》,《计算机编程科学》54,第1期,3-23页(2005年)
[16] Tian,Y.H.:Java字节码的字符串级联优化,945-951(2006)
[17] 瓦列·雷,R。;公司,P。;加格农,E。;亨德伦。;Lam,P。;Sundaresan,V.:Soot–Java优化框架,125-135(1999)
[18] Ananian,C.S。;Rinard,M.:Java程序的数据大小优化,59-68(2003)
[19] 陈,G。;坎德米尔,M。;北纬维杰里什南。;欧文,M.J。;马蒂斯克,B。;Wolczko,M.:内存约束Java环境的堆压缩,282-301(2003)
[20] 陈,G。;坎德米尔,M。;Irwin,M.J.:利用Java对象中的频繁字段值减少堆内存需求,68-78(2005)
[21] 杜比,J。;Chien,A.:自动对象内联优化及其评估,345-357(2000)
[22] 维默,C。;Mössenböck,H.:Java虚拟机中的自动反馈定向对象内联,12-21(2007)
[23] 维默,C。;Mössenböck,H.:Java虚拟机中的自动数组内联,14-23(2008)
[24] Larsen,S.:BEA jrockit的热门话题(2007)
[25] Zilles,C.:手风琴阵列,55-66(2007)
[26] Shuf,Y。;古普塔,M。;Bordawekar,R。;Singh,J.P.:利用丰富的类型进行内存管理和优化,295-306(2002)
[27] Shuf,Y。;古普塔,M。;弗兰克,H。;阿佩尔。;Singh,J.P.:在分配和垃圾收集时间创建和保存Java应用程序的本地性,13-25(2002)
[28] K.Casey,M.A.Ertl,D.Gregg,《使用指令集增强优化Java口译员》,技术代表,都柏林大学计算机科学系,三一学院,2005年。
此参考列表基于出版商或数字数学图书馆提供的信息。其项与zbMATH标识符进行启发式匹配,可能包含数据转换错误。在某些情况下,zbMATH Open的数据对这些数据进行了补充/增强。这试图尽可能准确地反映原始论文中列出的参考文献,而不要求完整或完全匹配。