以下内容全部转载但经过了我的分类整理
首先,因为JVM设置不当引起的几个典型问题:
原文:http://william750214.iteye.com/blog/513899
调优JVM内存解决OutOfMemoryError
从VM规范中我们可以得到,一下几种异常。
java.lang.StackOverflowError:(很少)
java.lang.OutOfMemoryError:heap space(比较常见)
java.lang.OutOfMemoryError: PermGen space (经常出现)
以下分别解释一下,从最常见的开始:
java.lang.OutOfMemoryError
PermGen space 这个异常比较常见,是说JVM里的Perm内存区的异常溢出,由于JVM在默认的情况下,Perm默认为64M,而很多程序需要大量的Perm区内存,尤 其使用到像Spring等框架的时候,由于需要使用到动态生成类,而这些类不能被GC自动释放,所以导致OutOfMemoryError: PermGen space异常。解决方法很简单,增大JVM的 -XX:MaxPermSize 启动参数,就可以解决这个问题。
java.lang.OutOfMemoryError
heap space或 其它OutOfMemoryError,这个异常实际上跟上面的异常是一个异常,但解决方法不同,所以分开来写。上面那个异常是因为JVM的perm区内 存区分少了引起的(JVM的内存区分为 young,old,perm三种)。而这个异常是因为JVM堆内存或者说总体分少了。解决方法是更改 -Xms -Xmx 启动参数,通常是扩大1倍。xms是管理启动时最小内存量的,xmx是管里JVM最大的内存量的。
java.lang.StackOverflowError
老实说这个异常我也没碰见过,但JVM Specification就提一下,规范上说有一下几种境况可能抛出这个异常,一个是Stacks里的线程超过允许的时候,另一个是当native method要求更大的内存,而超过native method允许的内存的时候。根据SUN的文档,提高-XX:ThreadStackSize=512的值。
(这里我要说一下,java6 默认的ThreadStackSize是1M,512似乎还是小了点)
其次,是
JVM 调优 技巧 总结
原文:http://blog.csdn.net/roland101/archive/2008/03/26/2221463.aspx
我进行了节选,去掉了原作者的一些感慨。
1.升级 JVM 版本。如果能使用64-bit,使用64-bit JVM。
2.选择一个正确的GC(Gargage Collection)。
由于当JAVA程序GC的时候,会停下当前程序。尤其Full GC的时候,会停留很长时间。JAVA5 以后,有Serial(窜行) Collector,Parallel(并行) collector,Concurrent(并发) Collector
3.正确设置内存大小。对JVM堆内的各个区域(young,old,perm)正确设置大小。
这个是最困难的调整,因为这个调整会直接影响GC的效率。而且由于各个程序的类型不用,所以没有一个通用的数据。除了几个常用规则以外,需要使用工具 (jstat,jvmstat,jconsole等等)仔细调整。下面会提到几个常用的准则。通常使用一下几个参数调整-Xms -Xmx-XX:MaxPermSize。
3.1 调高-XX:NewRatio(NewSize/MaxNewSize)的值,会减少young gc的次数,但会增加old gc的时间。
3.2 增加普通GC的方法(减小Full GC)。扩大young区域的大小(最大40%),并过大Survivor的区域。使得更多的object留在young gen。
4.减小类的使用量,注意类的load和unload,减少JSP页数。
类实际上也是对象,会直接分配perm区域里,即使Full GC也会很少收集。JSP也会分配到perm区域里,效果同理。如果perm过大,超过XX:MaxPermSize值,会发生 OutOfMemoryError: PermGen space异常。解决方法是提高-XX:MaxPermSize值。(作者这句话对我非常管用)
5.避免使用-Xnoclassgc
6.如果是RMI程序,要注意调整RMI DGC的时间。
以下是几个写程序时,应该注意的地方。也可减小GC,提高JVM性能。
1.不要使用System.gc()方法。
因为它会产生Full GC。
2.尽可能少分配大的临时对象(生命周期短的)
可能会直接分配到old区域里,old区域只有Full GC的时候会收集。
3.避免使用finalize()方法。
finalize()会增加GC的负担,使用java.lang.ref代替。
第三篇http://unixboy.iteye.com/blog/174173
堆大小设置
JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统 下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 [...]
分享到:
相关推荐
1.1 JVM调优总结-序3 1.2 JVM调优总结(一)-- 一些概念 4 1.3 JVM调优总结(二)-一些概念 7 1.4 JVM调优总结(三)-基本垃圾回收算法 9 1.5 JVM调优总结(四)-垃圾回收面临的问题 12 1.6 JVM调优总结(五)-分代...
JVM调优实践 ⼀、JVM调优准备⼯作 1. 机器环境: 机器 CPU 内存 单机 4C 16G 2. 默认启动参数 JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256 -XX:MetaspaceSiz e=128m -XX:MaxMetaspaceSize=320m" JAVA_...
JVM调优篇
JVM调优总结 JVM调优总结 JVM调优总结
JVM调优工具命令详解
JVM调优总结PDF,带原理图,延时如何进行分代垃圾回收
JVM调优 调优参数 调优方法 , 调优手段 等.
分析常见的JVM调优技术及其相关条件,以及在实战中怎么使用到相关的技术进行调优,比较适合中高级开发进行学习,适合对JVM理解较深的开发学习
NULL 博文链接:https://lihongchao87.iteye.com/blog/1688576
JVM面试资料。 JVM结构:类加载器,执行引擎,本地方法接口,本地内存结构; 四大垃圾回收算法:复制算法、标记-清除算法、标记-整理算法、分代收集算法 ...JVM调优:命令行指令,设置堆内存大小的参数
JVM调优,GC算法汇总,面试必问,早点准备,很好的资料!
JVM调优攻略.pdf!
网上下载的JVM调优实战, 值得一下
JVM调优实战
java6 JVM 调优参数大全 -XX
JVM调优总结 -Xms -Xmx -Xmn -Xss JVM调优总结 -Xms -Xmx -Xmn -Xss
深入虚拟机---JVM调优总结(摘自网上网上大牛分享),主要是详细介绍了gc的收集,觉得不错。
一.java内存结构 2 二 垃圾收集算法: 3 三 JVM参数 4 四 JVM的垃圾回收集器 7 五 常用参数设置 7
好东西,jvm 调优的详细介绍,让你瞬间明白,打车大图