转自:http://blog.csdn.net/watchnight/archive/2009/12/11/4987065.aspx
内存模型(内存池)
从上图可以看出,一个java进程主要分为“Java Heap”和“C Heap”两个部分。只有“Java Heap”是JVM的GC对象。
从J2SE 5.0开始,JVM启动时会默认选择按“server VM ”启动还是按“client VM ”,具体选择策略参照下面的连接。
Server-Class Machine Detection
启动方式选择好以后,开始选择GC方法,根据GC方法的不同,为每块内存池设置不同的默认值。关于GC方法的选择,参照下面的连接。
Garbage Collector Ergonomics
另外,JVM一共提供了4中GC方法,根据业务的不同,可以选择不同的GC方法。GC方法详细介绍,参见下面的连接。
Memory Management Whitepaper [pdf]
根据GC算法的不同,GC的名字,以及内存池的名字都不一样。
J2SDK 5提供了一些MXBean,通过这些MXBean可以取得具体的名字。
如:java.lang.management.GarbageCollectorMXBean和java.lang.management.MemoryMXBean
(1)-XX:+UseConcMarkSweepGC
GC名:
ParNew
ConcurrentMarkSweep
内存池名:
CMS Perm Gen
Par Eden Space
Par Survivor Space
Code Cache
CMS Old Gen
(2)-XX:+UseParallelGC
GC名:
PS Scavenge
PS MarkSweep
内存池名:
PS Survivor Space
PS Perm Gen
PS Old Gen
PS Eden Space
Code Cache
(3)-XX:+UseParallelOldGC
GC名:
PS Scavenge
PS MarkSweep
内存池名:
PS Survivor Space
PS Perm Gen
PS Old Gen
PS Eden Space
Code Cache
(4)-XX:+UseSerialGC
GC名:
Copy
MarkSweepCompact
内存池名:
Survivor Space
Perm Gen
Tenured Gen
Eden Space
Code Cache
关于"Code Cache"的说明,资料比较少,下面的连接中,只有一句介绍,对普通程序员来说也够用了。
http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html
我们可以看到,每种算法,GC都是有两个,一个是minor collection,一个是major collection(也叫FullGC)。
JVM还提供了一个System.gc(),让程序员主动GC,System.gc()是minor还是major?答案是major。参见下面的连接。
http://java.sun.com/docs/hotspot/gc1.4.2/faq.html
从 Java SE 6 Update 14开始,又增加了一个名叫G1的垃圾收集算法。跟前面的4种内存管理模式完全不一样。
具体没有研究过,算法详细参见下面的连接。
http://java.sun.com/javase/technologies/hotspot/gc/g1_intro.jsp
JVM中的Object是如何分配,如何收集的?什么时候使用minor什么时候使用major?什么时候发生OutOfMemoryException?
关于这个问题,HP网站上有一篇详细介绍GC的PPT,值得一看。
Memory Management and Garbage Collection (PDF, 1.4MB)
相关推荐
在这份由Sun Microsystems公司出版的《JVM内存管理白皮书》中,我们可以找到关于Java虚拟机(JVM)内存管理的详细介绍和深入分析。这份文档对于想要深入了解JVM工作原理的读者来说是一份宝贵的学习资料。在这份...
Sun JDK 1.6 的垃圾收集器(GC)是其内存管理的关键组成部分,它负责自动地回收不再使用的对象所占用的内存。本文将详细介绍Sun JDK 1.6 GC的工作原理、内存管理机制以及调优技巧。 #### 二、为什么学习GC? - **...
深入理解Hotspot源码,有助于开发者优化Java应用,理解内存管理、垃圾收集的工作原理,以及如何利用JVM工具进行性能调优。对于Java程序员来说,这是一门必不可少的进阶课程,能提升代码编写和问题排查的效率,使应用...
Sun HotSpot JVM在实践中采用分代垃圾回收,堆分为年轻代、年老代和持久代。年轻代进一步细分为Eden和两个Survivor区,通过复制策略减少碎片。当对象在年轻代经历多次垃圾回收后仍存活,就会被晋升到老年代。持久代...
Java虚拟机(JVM)内存管理和垃圾回收是Java编程中至关重要的概念,它涉及到...总之,JVM内存管理和垃圾回收是优化Java应用性能的关键。了解这些概念并正确配置JVM参数,可以帮助开发者创建更高效、更稳定的软件系统。
Java虚拟机(JVM)内存管理和...总结来说,JVM内存管理和垃圾回收是一个复杂而精细的过程,涉及多种策略和算法,旨在高效利用内存,减少应用暂停时间,并防止内存泄漏。理解和掌握这些原理对优化Java应用性能至关重要。
JVM内存管理的介绍,编写GC友好的代码。 本材料主要关心 Sun Hotspot JVM 6的内存管理 Sun Hotspot JVM 6的GC模型 主要针对JVM6的GC模型,但也会简单介绍Java 7的G1 编写GC友好代码的一些技巧
本文档为读者提供了广泛的Java HotSpot虚拟机(JVM)中内存管理的概览,特别是在Sun的J2SE 5.0版本中。文档描述了可用的垃圾收集器以执行内存管理,并提供关于如何选择和配置垃圾收集器以及如何设置垃圾收集器操作的...
##### 2.3 SUN/Oracle JVM内存管理及优化 Sun/Oracle JVM的内存管理机制包括垃圾收集、内存分配与回收策略等。优化方面,SUN/Oracle提供了多种优化技术,包括对JVM内存的优化,例如调整新生代和老年代的比例,选择...
### Sun Hotspot V1.6.0 JVM GC详解 #### 一、JVM结构与GC基础知识 ##### 1.1 JVM内存结构概述 Java虚拟机(JVM)内存主要分为以下几个部分: - **程序计数器(PC Register)**:记录当前线程所执行的字节码指令...
Java虚拟机(JVM)的内存回收,也称为垃圾收集(GC),是Java语言特性的重要组成部分,用于自动管理内存,释放不再使用的对象所占用的空间。虽然Java语言本身并不强制要求JVM实现GC,但现代JVM如Oracle的HotSpot JVM...
JVM 内存管理面试常见问题全解 JVM 内存管理是 Java 程序员必须掌握的重要知识点,本文将对 JVM 内存管理的面试常见问题进行全解。 一、什么是 JVM Java Virtual Machine(Java 虚拟机)是 Java 程序实现跨平台的...
### JVM内存管理与GC模型详解 #### 一、引言 在现代软件开发中,Java虚拟机(JVM)作为一种广泛使用的平台,其内部机制尤其是内存管理和垃圾收集(GC)模型,对提升程序性能和稳定性至关重要。本文将深入探讨Sun ...
总的来说,HSDB是HotSpot VM的一个强大工具,它提供了丰富的功能来探索和理解JVM的运行时数据,包括内存布局、对象状态以及垃圾收集行为等。熟练掌握HSDB的使用,将极大地提升开发者对Java应用性能调优的能力。
综上所述,《Java内存管理白皮书》为Java开发者提供了全面而深入的内存管理指南,不仅介绍了垃圾回收的基本原理,还详细阐述了HotSpot JVM中各种垃圾收集器的特点及适用场景,旨在帮助开发者有效管理和优化Java应用...
二、JVM内存回收机制 1. **堆内存**:所有对象都在堆内存中分配,包括实例变量和数组。Java的垃圾回收主要关注堆内存的管理。 2. **垃圾回收算法**: - **标记-清除(Mark-Sweep)**:首先标记出所有活动对象,...
4. **堆**:所有对象实例和数组都在堆中分配内存,是所有线程共享的一块区域,通过垃圾收集器进行内存管理。 5. **方法区**:存储类和接口的信息,如常量池、字段和方法数据。在Java 8后被元空间(Metaspace)所取代...