资源描述:
《从虚拟机内部机制着手提高Java效率》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、<<∋∋第卷第期上海师范大学学报∃自然科学版%;,3>类>关键词虚拟
2、机装载垃圾回收===?一!!∀中图分类号邢?文献标识码≅文章编号!∀?Α∃%!朋一∀!引言&+6+是独特的<它的虚拟机运行机制与传统的编程语言大不相同,是实现跨平台等多种优异特色的<、、,6+基础&+虚拟机要完成程序装载代码执行内存管理和线程控制等工作其中无用对象实例的自动回收和运行时类代码的动态装载是最具革新意义、也最值得关注的两大独特机制<反映了其设计理念从重视机器运算效率,向更注重开发维护的方便性、灵活性的巨大转变<弄懂了这些机制,才能深人理解+&+6的精髓,体会到它的进步所在<<,+运行效率+这些机制还提供了改善&
3、+6性能的一个重要途径是&+6的一个弱点和指令码直接对,十十,+应于ΒΧ5芯片内存等资源完全由程序员控制的Β相比采用虚拟机的&+6无论是运算速度还是,<,,∋内存需求都有一定差距迫切需要改进现行的几Δ采用了Ε98Φ∋9技术它能在运行时监控分析代码,,对偶尔执行的部分仍保持解释执行而对频繁执行的代码进行即时编译变成本地代码后使ΒΧ(可直接执行<它能很好地进行循环抽取、方法内联等优化处理<可以说原来由于代码解释执行而引起的性能问题,除了程序启动时因为要进行即时编译而显得稍慢外,已基本获得解决<现在剩下妨碍性能的因素大都与内存策略有
4、关<对象回收就是&;Δ内最费时、可能使响应完全停顿的操作〔’?,常常是系统性能的瓶颈<代码的装Γ卸载也关系到内存容量的需求,会间接影响速度<这些机制一般自动执行,常被初学者,<,比如几个市场上成功的+忽视但它们在提高性能方面却大有潜力&+6应用服务器就在此狠下了功夫应用多种方法来提高效率<本文就是分析这些内部机制对性能的影响,探讨可能改善性能的方法,使我们也能开发出同样水平的高效软件
5、态堆<针对运行时Η∀Ι以上对象都是小尺寸、短寿命的现象,现行&;Δ采用了分代拷贝回收一收稿日期=∃ϑ%刁?Α<=?Η一%,,上海师范大学数理信息学院讲师作者简介严忠林∃#男第期严=忠林从虚拟机内部机制着手提高&+6+效率,‘<,Χ”)‘“算法仁’&按对象生存时间长短采用不同的回收方法以获得尽可能高Κ的效率<整个堆空间如图,,分成两大区域<∋,Ν区放置较长寿命对象,其,中有特殊的Χ7)4区专门保存也包装成对象形式的各个类信息和方法代码<:∋(∗1区存放较新的对象,它又被分为ΟΝ7∗区和两块同样大小的()<,8:、;∋),(
6、∗7Π?Κ/∋26∋)区运算时所有新对象都从ΟΝ7∗获得空间当空间用完无一万弄石丁砚丁Λ,Μ,,即「?法生成新对象时首先启动采用拷贝紧缩算法的初级回收扫描ΟΝ7∗,,(∋26∋)/()626∋)ΟΝ7∗,三Ν∋∗和/,将仍然有效对象顺序拷贝至空的∗清空和/()626∋),,并交换/()626∋),,?的角色以备下次回收<这时大量临时对,,()象被清除留在/)626∋中的是寿命较长的对象ΟΝ7∗区也重新成为一图?堆空间分配图块便于分配的连续自由空间<遇下列两情形时还发生另一种拷贝,使这<,,ΝΝ区!∃#部分对象存人在∀#!%
7、&间多次复制已达到规定次数的对象∋因∃#∀!∃太小而放不下的对象()∗+仅在察觉!%,区空间不够存放−!&.区已有对象时/用以保证最坏情况下能将所有,,,−!&.对象移至!%,区0才在!%,区启动采用标记紧缩算法的全面回收它跟踪各引用标记出所有无效,,,,对象通过移动使有效对象集合在一起覆盖掉无效对象产生的内存碎片释放出!%,区的自由空间并使其继续保持连续(两种回收算法都要花费时间,但初级回收仅处理较新的那些对象,速度较快1全面回收要检查所有对象,比较费时,所以最好仅偶尔执行(理解了这些机制,使我们可能找到多种优化性能的方法
8、(2(3合理配置堆空间,,知道了回收算法的触发条件就容易理解图2堆中各区间的大小设置将影响回收的执行频率比如扩大4,5&区可减少初级回收的频率,!%,和−!&.区大小过于接近,容易频繁引发全面回收等等(要提高性能,特别是减少全面回收,就应根据实际情况重新设置堆中各区间大小()