转自: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)
相关推荐
JVM内存管理的介绍,编写GC友好的代码。 本材料主要关心 Sun Hotspot JVM 6的内存管理 Sun Hotspot JVM 6的GC模型 主要针对JVM6的GC模型,但也会简单介绍Java 7的G1 编写GC友好代码的一些技巧
OpenJDK
jvm 结构介绍、GC相关知识总结
JVM 内存管理功能(即垃圾回收)为提高 JVM 性能提供了其中一种最大的可能性。 类装入调整。 过程 优化启动性能和运行时性能 在某些环境中,优化 WebSphere Application Server 的启动性能比优化运行时性能更...
gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存。java语言并不要求jvm有gc,也没有规定gc如何工作。不过常用的jvm都有gc,而且大多数gc都使用类似的算法管理内存和执行收集操作。 在充分理解了...
It will be set after the class is loaded.VM Started: Set deferred breakpoint Tes
当然,严格来说JVM也是虚拟机规范,有很多不同的实现,Sun/OracleJDK和OpenJDK中的默认Java虚拟机是HotSpot虚拟机,是目前使用范围最广的Java虚拟机,一般讲到的JVM默认指的就是HotSpot虚拟机。 1.2、Java程序运行...
第五部分探讨了Java实现高效并发的原理,包括JVM内存模型的结构和操作;原子性、可见性和有序性在Java内存模型中的体现;先行发生原则的规则和使用;线程在Java语言中的实现原理;虚拟机实现高效并发所做的一系列锁...
介绍Sun HotSpot和JRockit JVM堆内存输出和分析工具,经典GC策略原理等。
朱光宇(效山)阿里巴巴系统软件部技术专家,长期致力于JVM、操作系统等基础软件的研发...曾经参与过Sun Hotspot JVM(micro edition) 、Android on x86、YunOS的研发和优化,目前从事Cloud环境下AJDK性能分析工具的研发。
jstat(类加载、垃圾收集、JIT 编译):alien: jmap+MAT(内存溢出):alien: jstack(线程、死循环、死锁):alien: JVisualVM(本地和远程可视化监控:alien: 使用 BTrace进行拦截调试:alien: Tomcat 性能监控与调优:alien: ...
本文描述的是Sun的HotSpot JVM实现未来版本的特性。每当易变的变量在线程间共享时,都必须使用同步来确保一个线程所做的更新,能够及时地被其他线程看到。同步的主要方式就是使用synchronized块,它既提供了互斥又...
本文是基于最新的SUN官方文档JavaSE6HotspotVMOptions 编写的译文。 主要介绍JVM 中的非稳态选项及其使用说明。 为了让读者明白每个选项的含义,作者在原文基础上补充了大量的资料。希望这份文档,对正在 研究...
Sun是一家伟大的公司,在C ++时代,他们创建了JVM&HotSpot。 现在,我们有了Rust,一个更好的工具,让我们重新制作JVM! 向前面的医务人员致敬! 感谢您为抗击流行病做出的贡献。 路线图 通过JDK中的测试用例 ...
该设置消除了许多系统启动过程中的主要垃圾收集事件。SunONE Studio 或其它包含更多模块的 IDE 的用户可能希望将该数值设置得更高。 下面列出了其它一些可能对 ECLIPSE 在某些系统(不是所有系统)上的性能产生...
VM既继承了Sun之前两款商用虚拟机的优点(如前面提到的准确式内存管理),也有许多自己新的技术优势, 如它名称中的HotSpot指的就是它的热点代码探测技术(其实两个VM基本上是同时期的独立产品,HotSp
Bea JRockit JVM支持4种垃圾收集器: 46 63.5. 如何从JVM中获取信息来进行调整 46 63.6. Pdm系统JVM调整 47 63.6.1. 服务器:前提内存1G 单CPU 47 63.6.2. 客户机:通过在JNLP文件中设置参数来调整客户端JVM 47 64....
dumpclass源码,对于多个ClassLoader的情况,可以使用--classLoaderPrefix,这样子在输出.class文件时,会为每一个ClasssLoader创建一个目录,比如:sun.jvm.hotspot.oops.Instance@955d26b8。并且会在目录下放一个...
* 2 /usr/lib/jvm/java-6-sun/bin/java 300 手动模式 要维持当前值[*]请按回车键,或者键入选择的编号: 我们输入值:2 回车 4.测试java -version 显示:java version "1.6.0_30" Java(TM) SE Runtime ...