以下内容全部转载但经过了我的分类整理
首先,因为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 [...]
分享到:
相关推荐
### JVM调优文档:垃圾收集(GC)与性能优化 #### 概述 Java虚拟机(JVM)作为运行Java程序的核心组件,其性能直接影响着应用程序的运行效率和稳定性。在JVM中,垃圾收集(GC)是自动管理内存的重要机制之一。本文...
GC的性能优化是JVM调优的重要部分。"JVM 垃圾回收机制及性能调优案例"文档可能包含了如何调整JVM参数以改善系统性能的内容,比如设置新生代和老年代的大小、选择合适的GC策略、控制GC频率等。理解这些参数的意义和...
JVM原理是Java面试中不可或缺的一部分,求职者需要掌握JVM的内存模型、垃圾回收机制、JVM调优方法等。例如,面试官可能会问到JVM内存区域的划分、垃圾回收算法、垃圾回收器的选择和配置等。 框架使用及原理方面,...
本篇文章汇总了200道Java面试题,涵盖了从基础到高级的各个层面,包括Java基础、容器、多线程、反射、对象拷贝、Java Web、异常处理、网络编程、设计模式、SSM框架(Spring、Spring MVC)、Spring Boot/Spring Cloud...
5. **JVM**:Java虚拟机是Java运行的基础,面试中会涉及类加载机制、内存模型(堆、栈、方法区、本地方法栈、元空间)、垃圾收集算法与调优等。深入理解JVM有助于优化程序性能。 6. **网络编程**:Java的Socket编程...
了解JVM内存模型和调优参数也是必要的。 11. **代码规范与注释**:遵循一定的代码风格指南,如Google Java Style Guide,保持代码整洁,添加必要的注释,可以提高代码的可读性和团队协作效率。 12. **异常分类**:...
同时,文章也包含了Java在企业应用中的高级特性,如Java虚拟机(JVM)的工作原理、Spring框架家族(包括Spring、Spring MVC、Spring Boot、Spring Cloud)的问题、以及分布式系统中常用的中间件(如Redis、MyBatis、...
这篇博客文章旨在收集和解决Tomcat在实际运行中遇到的各种问题,为开发者提供一个宝贵的参考资源。以下是关于Tomcat的一些关键知识点: 1. **Tomcat概述**: Tomcat是Apache软件基金会的Jakarta项目中的一个核心...
1. "java性能优化笔记" - 这部分笔记可能深入探讨了Java编程语言的性能调优技术,包括但不限于JVM参数调整、垃圾回收机制、并发优化、代码优化等。读者可以从中学习如何提升Java应用的运行速度和资源利用率。 2. ...
- **性能优化技巧**:介绍了如何利用Java虚拟机(JVM)的特点进行性能调优,包括垃圾回收机制的理解与应用、多线程编程的最佳实践等。 - **实战案例**:通过实际的Android应用开发案例,演示了高效编码的全过程,帮助...