以下内容全部转载但经过了我的分类整理
首先,因为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原理、JVM调优、JVM内存模型和JAVA并发,这些都是Java虚拟机(JVM)相关的核心概念。JVM是运行Java字节码的虚拟计算机,为Java提供了一个跨平台的环境,确保Java程序可以在不同的操作系统上运行而...
### JVM调优详解 #### 一、JVM调优概述 在现代软件开发中,Java虚拟机(JVM)作为Java应用程序的运行环境,...通过本篇文章的学习,希望读者能够掌握JVM调优的基本原理和技术手段,为日常开发工作提供有力的支持。
在现代的软件开发与运行环境中,Java虚拟机(JVM)的性能调优是非常重要的一环,特别是在处理大型应用程序或者服务时,合适的JVM调优能够显著提升系统性能和稳定性。本篇文档详细介绍了JVM调优工具的命令使用及其...
### 马士兵JVM调优笔记知识点梳理 #### 一、Java内存结构 Java程序运行时,其内存被划分为几个不同的区域,包括堆内存(Heap)、方法区(Method Area)、栈(Stack)、程序计数器(Program Counter Register)以及...
Java虚拟机(JVM)是Java程序运行的基础,它的调优是提高应用程序性能的关键环节。在JVM调优实践中,了解各个运行时数据区的工作原理至关重要。以下是对这些区域的详细解析: 1. **虚拟机栈**:每个线程都有一个...
《Monkey老师的JVM调优深度解析》 在Java开发领域,JVM(Java Virtual Machine)是每一个程序员都需要深入了解的关键组成部分。Monkey老师的JVM调优课程,无疑为我们提供了一个宝贵的平台,来深入探究JVM的工作原理...
《JVM调优实战解析》 在Java开发领域,JVM(Java Virtual Machine)是运行所有Java应用程序的基础,它的性能直接影响着程序的运行效率。因此,掌握JVM调优技术对于提升系统的稳定性和性能至关重要。本文将围绕"JVM...
分析常见的JVM调优技术及其相关条件,以及在实战中怎么使用到相关的技术进行调优,比较适合中高级开发进行学习,适合对JVM理解较深的开发学习
马老师 JVM 调优实战笔记 JVM 调优是 Java 开发者们不可或缺的技能,它直接影响着 Java 应用程序的性能和稳定性。本笔记是马老师的 JVM 调优实战笔记,涵盖了 JVM 的概述、内存结构、堆内存、垃圾回收算法、JVM ...
JVM面试资料。 JVM结构:类加载器,执行引擎,本地方法接口,本地内存结构; 四大垃圾回收算法:复制算法、标记-清除算法、标记-整理算法、分代收集算法 ...JVM调优:命令行指令,设置堆内存大小的参数
### JVM调优与垃圾回收机制详解 #### 一、引言 随着软件系统的复杂度不断提高,性能优化成为了软件开发中的一个重要环节。对于Java应用程序来说,Java虚拟机(JVM)的性能直接影响着应用的整体表现。垃圾回收(GC)...
JVM调优总结 -Xms -Xmx -Xmn -Xss JVM 调优是 Java virtual machine 的性能优化,通过调整 JVM 的参数来提高 Java 应用程序的性能。其中,-Xms、-Xmx、-Xmn、-Xss 是四个重要的参数,分别控制 JVM 的初始堆大小、...
JVM调优实战 本文档旨在介绍JVM调优实战的各个方面,包括JVM内存、垃圾回收、性能优化等。通过对JVM内存结构、垃圾回收机制和性能优化策略的详细讲解,帮助读者深入理解JVM的工作原理和优化方法。 1. JVM内存结构 ...
JVM调优是一个复杂的过程,它涉及到对Java虚拟机内部工作原理的深刻理解。本文档总结了JVM调优的基础知识和一些核心概念,旨在帮助开发者更好地掌握Java程序的性能优化。 首先,文档提到了Java中的数据类型分为基本...
在深入讨论JVM(Java虚拟机)调优之前,我们有必要先了解一下虚拟机的基本概念和堆栈的区分。Java程序在运行时,所有的数据都存储在JVM的内存模型中。在内存模型中,有两大重要区域,即堆(Heap)和栈(Stack)。堆主要...
### JVM调优总结 #### 一、概述 Java虚拟机(JVM)是Java程序的核心运行环境,对于提高Java应用程序性能至关重要。JVM调优是指通过调整JVM的配置参数来优化程序性能的过程。本文将围绕JVM调优展开讨论,重点分析数据...
【JVM调优实战经验】 在Java开发中,JVM(Java Virtual Machine)的调优是提高应用程序性能的关键环节。JVM调优涉及到对内存管理、垃圾回收机制以及相关参数的调整,以优化应用程序的运行效率和稳定性。本文将深入...
JVM类加载机制详解 JVM类加载机制是Java虚拟机中的一种机制,它负责加载Java类文件到内存中,以便执行Java程序。类加载机制分为五个阶段:加载、验证、准备、解析和初始化。 加载 加载是类加载过程中的一个阶段,...