Sun Java HotSpot? Virtual Machine内存模型与垃圾回收
www.firnow.com 时间 : 2010-07-19 作者:网络 编辑:huyang629 点击: 70 [ 评论 ]
-
-
先前公司的一个J2EE应用因为访问量上升导致经常当机,追查后发现是内存与GC的原因,然后根据网上的一些资料将GC调优了一把,其实也就是调了调某些参数,然后经过一段时间的运行看它稳定了也就没继续深入研究了,这次把这些资料的汇总一下,时不时来看看,现在接触的东西多了时间长了老会忘记。
分代收集(Generational Collecting)
基于对对象生命周期分析后得出的垃圾回收算法,把对象分为年轻代、年老代、持久代,对不同生命周期的对象使用不同的算法进行回收。现在的垃圾回收器(从J2SE1.2开始)都是使用此算法。
Sun JVM内存区域分布图
1)Young(年轻代)
Young被划分为三个区间,Eden区和两个大小严格相同的Survivor区,其中Survivor区,在某一时刻只有其中一个是被使用的,另外一个留做垃圾收集时复制对象用。在Young区间变满的时候,Minor GC就会将存活的对象移到空闲的Survivor区中,根据JVM的策略,在经过几次Minor GC后,任然存活于Survivor区的对象将被移动到Tenured中。
2)Tenured(年老代)
Tenured主要保存生命周期长的对象,一般是一些老的对象,当一些对象在Young复制转移一定的次数以后,对象就会被转移到Tenured。一般如果系统中用了application级别的缓存,缓存中的对象往往会被转移到这一区间。
3)Perm(持久代)
Perm主要保存class、method、filed等对象,这部分的空间一般不会溢出,除非一次性加载了很多的类,不过在涉及到应用服务器的热部署时,有时候会遇到java.lang.OutOfMemoryError: PermGen space 的错误,造成这个错误的很大原因就有可能是每次热部署后,旧的class没有被卸载掉,这样就造成了大量的class对象保存在了Perm中,这种情况下一般重新启动应用服务器可以解决问题,或者通过-XX:MaxPermSize=<N> 将持久代大小设大点。
GC类型
大略上分以下2种
1)Minor GC
一般情况下,当新对象生成,并且在Eden申请空间失败时,就好触发Minor GC在Eden区清除非存活对象,并且把尚且存活的对象移动到Survivor区。然后再整理Survivor的两个区。
2)Full GC
对整个堆进行整理,包括Young、Tenured以及Perm。Full GC比Minor GC要慢,因此应该尽可能减少Full GC。以下几种原因可能导致Full GC:
Tenured或Perm被写满
System.gc被显示调用
上一次GC后堆空间分配策略动态调整
JVM调优参数
JVM提供了相应的参数来对内存大小、垃圾回收算法进行配置。
Non-standard Java HotSpot VM Options
我在32位Windows Server 2003系统8GB物理内存,JDK1.6下测试,最大可设置为1536M,再多JVM就跑不起来了。
-Xms1536M 设置JVM启动后堆的初始内存(这里配置的JVM堆空间只是Young与Tenured)
-Xmx1536M 设置JVM启动后堆的最大内存,一般在生产环境中把这两个参数设为相同值,避免在“上一次GC后堆空间分配策略动态调整”而引起Full GC
-Xss1M 设置每个线程的Java栈大小
-XX:NewRatio=2 设置Tenured和Young的比值为2:1,这样Eden+2*Survivor=1/3堆内存
-XX:SurvivorRatio=8 设置Eden和一个Survivor的比值为8:1,这样一个Survivor就占Young区的1/10.
-XX:PermSize=64M 设置持久代初始内存
-XX:MaxPermSize=128M 设置持久代最大内存
详细配置选项见:http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp#PerformanceTuning
垃圾收集器
JVM给了三种选择:串行收集器、并行收集器、并发收集器。串行收集器对于处理大数据量的情况时性能太低,所以一般选择使用并行收集器和并发收集器。J2SE5.0以后JVM会根据当前系统配置进行判断(机器配置只要有2个CPU和至少2GB的物理内存JVM将自动以-server模式运行)
1)吞吐量优先的并行收集器,通过 -XX:+UseParallelGC 指定
2)响应时间优先的并发收集器,主要是保证系统的响应时间,减少垃圾收集时的停顿时间。通过 -XX:+UseConcMarkSweepGC 指定。由于CMS GC是和应用并发执行的,因此需要耗费更多的CPU资源。
详细配置选项见:http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp#BehavioralOptions
Sun JDK自带的图形监控和管理工具jconsole
通过Sun JDK自带的一个图形监控和管理工具jconsole能很容易的看到当前虚拟机中的内存状态,我使用的JDK版本是jdk1.6.0_18,这个工具从jdk1.5就有了
大小: 27.9 KB
大小: 34.9 KB
查看图片附件
文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/3_program/java/javajs/20100719/458815.html
http://dev.firnow.com/course/3_program/java/javajs/20100719/458815.html
分享到:
相关推荐
本文档提供了Java HotSpot虚拟机(JVM)中内存管理的广泛概述,特别是在Sun公司的Java 2平台标准版(J2SE)5.0版本的发布中。文档描述了可供使用的垃圾收集器(Garbage Collectors),给出了关于如何选择和配置收集...
综上所述,Java HotSpot虚拟机是一个高度优化的环境,它不仅负责字节码的解释和编译,还包括内存管理和垃圾收集,以及与平台的深度交互。开发过程严谨,涉及多方面的测试和代码审查,同时鼓励社区参与和创新。
### Java性能优化关键知识点 ...通过对垃圾回收策略、内存管理和JVM参数的深入了解,可以显著提升Java应用的性能和稳定性。此外,合理规划系统内存资源也是保障Java应用在生产环境中顺利运行的重要因素。
Java高级面试中,JVM(Java Virtual Machine)虚拟机是一个重要的知识点,它是Java程序运行的基础。JVM有多种实现,其中OpenJDK和Sun JDK是最常见的。OpenJDK是JDK的开源版本,遵循GPL V2协议,允许商业使用,但不...
Sun JAVA虚拟机,全称Java Virtual Machine,是Java平台的核心组成部分,它负责解析并执行Java程序的字节码,使得Java代码能够在不同的操作系统上运行,实现了“一次编写,到处运行”的跨平台特性。Sun公司(后被...
4. **虚拟机接口模块**:提供与Java语言交互的接口,包括JNI(Java Native Interface)和JVM TI(Java Virtual Machine Tool Interface),它们允许C/C++代码与Java代码交互,以及调试和监控工具接入。 5. **服务...
Java Virtual Machine(Java 虚拟机)是 Java 程序实现跨平台的重要工具(部件)。HotSpot VM 是 Sun JDK 和 OpenJDK 中所带的虚拟机,也是目前使用范围最广的 Java 虚拟机。只要装有 JVM 的平台,都可以运行 Java ...
JVM内存模型是Java虚拟机(Java Virtual Machine,JVM)中的一种内存管理机制。它将内存区域分为五个部分:程序计数器、Java虚拟机栈、本地方法栈、Java堆和方法区。 1. 程序计数器(Program Counter Register) ...
本文将深入探讨Sun Hotspot JVM 6的内存管理与GC模型,并介绍如何编写GC友好的代码。 #### 二、Java平台基本概念 - **JVM**: Java Virtual Machine,负责执行符合Java规范的Class文件。 - **JRE**: Java Runtime ...
垃圾回收是JVM中的一种机制,用于回收垃圾对象,以释放内存空间。常见的垃圾回收算法有: * 标记-清除算法 * 复制算法 * 标记-整理算法 * 分代收集算法 四、对象生命周期 对象的生命周期包括创建、分配、使用、...
2. JDK包含了JRE(Java Runtime Environment),而JRE又包含了JVM(Java Virtual Machine)。JVM是运行Java字节码的平台,它是Java跨平台特性的基础。 3. `javac`是Java源文件的编译器,用于将.java文件转换为....
"sun.jna"和"sun.misc"包中涉及JNI的相关实现,这是Java与本地操作系统交互的桥梁。例如,`sun.misc.Unsafe`类提供了许多非安全但高效的原生操作,如内存分配、原子操作等。尽管不推荐直接使用,但在高性能或低级别...
通过对白鹤翔JVM深入理解的学习,我们不仅了解了Java虚拟机的基本概念和内存模型,还掌握了垃圾回收机制及其优化方法。此外,通过实际案例学习了如何利用性能监控工具来优化Java应用程序的性能。这对于我们日常开发...
- **定义**:Java虚拟机(Java Virtual Machine, JVM)是一种能够执行字节码(Bytecode)的虚拟机,它使得Java程序可以在任何安装了JVM的平台上运行,实现了“一次编写,到处运行”(Write Once, Run Anywhere, WORA...
### Java Virtual Machine (JVM) 详析 #### 一、Java相关 ##### 1.1 Java 定义 Java 是一种广泛使用的面向对象的高级编程语言,它由 Sun Microsystems 在 1995 年发布。Java 设计初衷是为了满足分布式计算环境的...
HotSpot VM以其高性能和先进的垃圾回收技术而闻名,能够显著提高Java应用程序的运行效率。 - **KVM**:专为嵌入式设备设计的轻量级Java虚拟机,支持Java ME平台(CDC/CLDC),适用于资源受限的环境。 - **Squawk VM**...
从内存分配的角度来看,Java堆可以分为新生代和老年代,以适应不同类型的对象生命周期管理和内存回收策略。 - Java堆还可以划分为多个线程私有的分配缓冲区(Thread Local Allocation Buffer, TLAB),以提高内存...
Java HotSpot Virtual Machine Performance Enhancements JDBC 4.1 JDBC 4.1 introduces the following features: The ability to use a try-with-resources statement to automatically close resources of type...