java虚拟机内存优化实践_第1页
java虚拟机内存优化实践_第2页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java 虚拟机内存优化实践众所周知,Java 是从 C+的基础上发展而来的,而 C+程序的很大的一个问题就是内存难以解决,尽管 Java 的 JVM 有一套自己的回收机制来回收内存,在许多情况下并不需要 java 程序开发操太多的心,但也是存在泄露问题的,只是比 C+小一点。比如说,程序中存在被但无用的对象:程序了该对象,但后续不会或者不能再使用它,那么它占用的内存空间就浪费了。先来看看 GC 是如何工作的:每一个对象的运行状态,包括对象的申请、被、赋值等,当该对象不再被时,对象(GC 本文的重点,不做过多阐述)。很多 Java 程序员 过分依赖 GC,但问题的关键是无论 JVM 的回收机制

2、做得多好,内存总归是有限的资源,因此就算 GC 会为完成了大部分的回收,但适当地注意编码过程中的内存优化还是很必要的。这样可以有效的减少 GC 次数,同时内存利用率,最大限度地提高程序的效率。总体而言,Java 虚拟机的内存优化应从两方面着手:Java 虚拟机和 Java 应用程序。前者指根据应用程序的设计通过虚拟机参数控制虚拟机逻辑内存分区的大小以使虚拟机的内存与程序对内存的需求相得益彰;后者指优化程序算法,降低 GC 负担,提高 GC 回收成功率。通过参数优化虚拟机内存的参数如下所示:Xms初始 Heap 大小Xmxjava heap 最大值ujiuye41105Xmnyoung gene

3、ration 的 heap 大小Xss每个线程的 Stack 大小上面是三个比较常用的参数,还有一些:XX:MinHeapFreeRatio=40Minimum percentage of heap free after GC to avoid expan.XX:MaxHeapFreeRatio=70um percentage of heap free after GC to avoid shrinking.XX:NewRatio=2Ratio of new/old generation sizes. Sparc -cnt:8; x86 -server:8;x86 -cnt:12.-cnt:8

4、 (1.3.1+), x86:12XX:NewSize=2.125mDefault size of new generation (in bytes) 5.0 and newer: 64 bitVMs are scaled 30% larger; x86:1m; x86, 5.0 and older: 640kXX:MaxNewSize=um size of new generation (in bytes). Since 1.4, MaxNewSize is computed as a function of NewRatio.XX:SurvivorRatio=25Ratio of eden

5、/survivor spaize Solaris amd64: 6; Sparc in 1.3.1: 25; other Solaris platforms in5.0 and earr: 32XX:PermSize=ujiuye41105Initial size of permanent generationXX:MaxPermSize=64mSize of the Permanent Generation. 5.0 and newer: 64 bit VMs are scaled 30% larger; 1.4 amd64: 96m; 1.3.1 -cnt: 32m.下面所说通过优化程序算

6、法来提高内存利用率,并降低内存风险,完全是经验之谈,参考,不妥,请指正,!1.尽早无用对象的(XX = null;)看一段代码:1.publicListparse(HtmlPagepage)ujiuye411052.List list = null;3.try 4.List valueList = page.getByXPath(config.g etContentXpath();5.if (valueList = null | valueList.isEm pty() 6.return list;7.8./需要时才创建对象,节省内存,提高效率9.list = new ArrayList();

7、10.PageData pageData = negeData();11.StringBuilder value = new StringBuild er();12.for (i = 0; i valueList.size (); i+) 13.HtmlElement content = (HtmlEle ment) valueList.get(i);14.DomNist imgs = content.geementsByTagName(img);15.if (imgs != null & !imgs.is Empty() 16.for (HtmlElement img :imgs) 17.t

8、ry 18.HtmlImageimage = (HtmlImage) img;19.athStringp=image.getSrcAttribute();20.ormatStringpath.length();f=path.substring(path.lastIndexOf(.),21.ocalPathStringl= D:/images/ + MD5Helper.md5(path).replace(, ,).replace(/, ,) + format;22.alFileFile loc= new File(localPath);23.alFile.exists()if(!loc24.oc

9、alFile.createNewFile();l25.mage.saveAs(localFile);i26.27.Attribute(src,image.setfile:/+localPath);28.localFile= null;29.image =null;30.ull;img = n31.ion catch (Excepte)32.33.34.了,清除对其的/这个对象以后不会在使用,等同于提前告知GC,该对象可以回收了35.imgs = null;36.37.String text = content.asXml();38.;value.append(text).append()39.

10、valueList=null;40.content = null;41.text = null;42.43.pageData.setContent(value.toString();ujiuye411052.谨慎使用集合数据类型,如数组,树,图,链表等数据结构,这些数据结构对 GC 来说回收更复杂。3.避免显式申请数组空间,不得不显式申请时,尽量准确估计其合理值。4.尽量避免在类的默认构造器中创建、初始化大量的对象,防止在调用其自类的构造器时造成不必要的内存资源浪费5.尽量避免强制系统做内存的回收,增长系统做回收的最终时间6.尽量做方法调用类应用开发时使用瞬间值变量,除非调用端需要获取该瞬间值变量的值。7.尽量在合适的场景下使用对象池技术以提高系统性能ujiuye4110544.pageData.setCharset(page.getPageEncoding();45.list.add(pageData);46./这里 pageData=null; 是没用的,因为 list仍然持有该对象的,GC

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论