




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JVM内存参数调优堆内存(heap)是由Java虚拟机控制管理的,因此,这些参数对JVM而言都有一个默认值,但在某些情况下这些参数的默认值并不是最优的,这就需要我们通过调整这些参数的值来提高JVM的性能,最终提高应用的性能指标。在实际的应用开发中,如果应用所使用的系统内存较大,经常会引发内存溢出的错误:java.lang.OutOfMemoryError java.lang.OutOfMemoryError Exception in thread main这可能是因为应用要使用的堆内存(heap)超过了JVM所管理内存范围,如果我们适当追加内存值有时就可以避免这种致命错误的出现。在WINDOW
2、S系统上你可以通过参数-verbosegc查看JVM回收内存的信息,在HP UNIX系统上你可以通过-Xverbosegc:file=/tmp/gc$.out参数将信息重定向到一个文件中。然后查看相应的信息,例如下面的这个类。public class A public static void main(String args for (int i =0 ;i java -verbosegc AGC 512K-91K(1984K, 0.0027537 secsthis is aGC test从输出信息中可以看出总共有1984KB的内存被回收,耗时0.002 753 7秒。现在我们将类A添加一行清
3、除对象引用的代码:public class A public static void main(String args for (int i =0 ;i java -verbosegc AGC 512K-91K(1 984K, 0.0 027 450 secsthis is aGC test我们看到被回收内存的数量并没有变化,但是回收所需要的时间却变成了0.002 745 0秒,后者比前者节省了0.000 008 7秒,千万不要小看这0.000 008 7秒,当你的应用足够复杂时这个时间就会成指数级增长,看来我们主动清除对象引用的方法,确实可以加速JVM对垃圾内存的回收。如果再在类A中加入一行
4、强制系统内存回收的代码,结果又会怎样呢?如下所示:public class A public static void main(String args for (int i =0 ;i java -verbosegc AGC 512K-91K(1984K, 0.0 027 272 secsFull GC 487K-91K(1984K, 0.0 070 730 secsthis is aGC test系统这次做了两次内存回收,第一次是程序中强制系统内存回收的代码System.gc(导致的内存回收,而后者是系统最终的内存回收操作,我们看到强制内存回收耗时不长,可是却导致了系统最终垃圾回收的时间加长
5、了很多,因此我们在采用强制系统垃圾回收(通过显式调用方法System.gc()的办法来回收系统垃圾内存的办法,还是存在一些弊端的,应尽量少用,或者说只在必要的时候应用。上面我们提到的内存回收操作就是回收JVM所管理的堆内存(heap)。当系统连续申请内存并且超过JVM所管理的堆内存(heap)的最大值时,就会产生系统内存溢出的致命异常,下面我们来看一下怎样通过设置JVM的内存参数来优化JVM对内存的管理,避免内存溢出异常的发生。表2-1所示的就是与JVM内存相关的参数及其说明。表2-1与JVM内存相关的参数及其说明下载 (128.89 KB2010-1-22 08:44根据表2-1中所描述的参
6、数意义,我们可以在启动应用时为JVM设置相应的参数值以提高系统的性能,例如下面的例子:java -XX:NewSize=128m -XX:MaxNewSize=128m -XX:SurvivorRatio=8-Xms512m-Xmx512m MyApplication类文件(.class)的大小由Java源文件.java文件编译成JVM 可解释执行的Java字节文件.class。因所采用的编译方式的不同而大小也不同。通常.class文件的大小也存在是否占用较大内存的问题。通过降低.class文件的大小,不但可以降低系统内存的开销,还可以节省网络开销,虽然这部分内容与JVM内存管理联系不大,但是
7、我觉得还是有必要提一下,因为这在你开发Applet应用时会有帮助(注:在本书后续的章节中,将会对如何减小Java类尺寸的技术话题做更为深入的探讨)。因为一般来说,Applet应用都是靠网络分布式传输由客户端浏览器装载运行的,如果类文件较大,无疑将会增大网络开销,降低传输速度无法满足用户的需求,并且如果类文件较大,无疑也会消耗客户端内存资源。我们可以通过在Java编译器javac中添加相应的参数,来缩小类文件的大小,解决上面的问题。通常有三种编译方式会影响类文件的大小。(1)默认编译方式:javac A.java。(2)调试编译方式:javacg A.java。(3)代码编译方式:javacg:
8、none A.java。例如如下所示的简单的类A:public class A public static void main(String args for (int i =0 ;i 100000;+i A a = new A(; 通过上面这三种方式编译后的类文件的大小分别为:默认编译方式:291字节。调试编译方式:422字节。代码编译方式:207字节。采用三种不同的方式,编译产生的类文件的大小差异非常大,这是什么原因导致的呢?原来在于.class文件中包含多个不同的部分或属性。代码(Code)属性包含实际的方法字节码。源文件信息(SourceFile Information)包含用于生成.
9、class的源文件名称。代码行序号表(LineNumberTable)用来映射源文件中的代码行序号与字节码文件中的序号偏移。本地变量表(LocalVariableTable)用来映射本地变量与栈桢的偏移。&注意如果你想了解字节码文件.class的文件结构详细信息,请参考相关的技术资料,这里就不详细讲解了。正是由于上面这三种编译方式生成的类文件所包含的信息不同,才导致了类文件的大小差异较大,其包含的信息分别如下所示。默认编译方式:代码(Code)、源文件信息(SourceFile Information)、代码行序号表(LineNumberTable)。调试编译方式:代码(Code)、源文件信息(SourceFile Information)、代码行序号表(LineNumberTable)、本地变量表(LocalVaria
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030复合肥料产业市场深度调研及发展趋势与投资前景研究报告
- 分红出资合同样本
- 2025-2030国内食品行业市场发展分析及竞争格局与投资机会研究报告
- 2025-2030国内旅行行业市场深度分析及竞争格局与投资价值研究报告
- 2025-2030呼吸吸入器行业市场现状供需分析及重点企业投资评估规划分析研究报告
- 2025-2030动漫行业发展分析及投资战略研究报告
- 2025-2030农用旋涡泵行业市场现状供需分析及重点企业投资评估规划分析研究报告
- 2025-2030全球及中国业务规则管理系统(BRMS)行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030儿童运动鞋行业市场发展现状及竞争格局与投资战略研究报告
- 2025-2030健康服务产业政府战略管理与区域发展战略研究咨询报告
- DB32T4220-2022消防设施物联网系统技术规范-(高清版)
- 语音信号处理第4讲剖析
- 锤击钢筋混凝土预制桩综合施工记录
- 初中化学人教九年级下册(2023年新编) 酸和碱黄琳娜微项目皮蛋制作中的化学教学设计
- Q∕SY 02098-2018 施工作业用野营房
- DB62∕T 3176-2019 建筑节能与结构一体化墙体保温系统应用技术规程
- 《博物馆馆藏文物管理库房工作日志》示例
- 施工现场防洪防汛应急预案45173
- 大猫英语分级阅读 八级1 Unusual Traditions课件
- 提高初中数学课堂教学有效性--教学论文
- 固定资产及累计折旧审计程序表
评论
0/150
提交评论