资源描述:
《JVM规范--高手总结》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、JVM详解本文详细讲解了JVM(JavaVirtualMachine)的方方面面,首先由java的特性来描绘JVM的大致应用,再细细阐述了JVM的原理及内存管理机制和调优.最后讲述了与JVM密切相关的JavaGC机制.本文内容大多来自网络,但内容十分丰富,是学习JVM的好资料.后面会再针对JVM的两大职责classloader和executionengine进行讲解若有疑问目录Java相关11.1Java定义11.2Java的开发流程11.3Java运行的原理21.4半编译半解释31.5平台
2、无关性4JVM内存模型42.1JVM规范52.2SunJVM82.3SUNJVM内存管理(优化)102.4SUNJVM调优132.5.JVM简单理解162.5.1 Java栈162.5.2 堆162.5.3 堆栈分离的好处202.5.4堆(heap)和栈(stack)20JAVA垃圾收集器213.1 垃圾收集简史213.2 常见的垃圾收集策略213.2.1 Reference Counting(引用计数)223.2.2 跟踪收集器223.3 JVM的垃圾收集策略273.3.1 Serial Collector283.3.2 Para
3、llel Collector293.3.3 Concurrent Collector30Java虚拟机(JVM)参数配置说明3038
4、PageJava相关1.1Java定义1.2Java的开发流程38
5、Page1.3Java运行的原理38
6、Page1.4半编译半解释38
7、Page1.5平台无关性JVM内存模型38
8、Page2.1JVM规范JVMspecification对JVM内存的描述首先我们来了解JVMspecification中的JVM整体架构。如下图: 主要包括两个子系统和两个组件:Classloader(类装载器)
9、子系统,Executionengine(执行引擎)子系统;Runtimedataarea(运行时数据区域)组件,Nativeinterface(本地接口)组件。 Classloader子系统的作用:根据给定的全限定名类名(如java.lang.Object)来装载class文件的内容到Runtimedataarea中的methodarea(方法区域)。Javsa程序员可以extendsjava.lang.ClassLoader类来写自己的Classloader。 Executionengine子系统的作用:执行clas
10、ses中的指令。任何JVMspecification实现(JDK)的核心是Executionengine,换句话说:Sun的JDK和IBM的JDK好坏主要取决于他们各自实现的Execution engine的好坏。每个运行中的线程都有一个Executionengine的实例。 Nativeinterface组件:与nativelibraries交互,是其它编程语言交互的接口。 Runtimedataarea组件:这个组件就是JVM中的内存。下面对这个部分进行详细介绍。38
11、PageRuntimedataarea的整体架
12、构图Runtimedataarea主要包括五个部分:Heap(堆),MethodArea(方法区域),JavaStack(java的栈),ProgramCounter(程序计数器),Nativemethodstack(本地方法栈)。Heap和MethodArea是被所有线程的共享使用的;而Javastack,Programcounter和Nativemethod38
13、Pagestack是以线程为粒度的,每个线程独自拥有。HeapJava程序在运行时创建的所有类实或数组都放在同一个堆中。而一个Java虚拟实例中只存在一个堆空间,因此所
14、有线程都将共享这个堆。每一个java程序独占一个JVM实例,因而每个java程序都有它自己的堆空间,它们不会彼此干扰。但是同一java程序的多个线程都共享着同一个堆空间,就得考虑多线程访问对象(堆数据)的同步问题。(这里可能出现的异常java.lang.OutOfMemoryError:Javaheapspace)Methodarea在Java虚拟机中,被装载的class的信息存储在Methodarea的内存中。当虚拟机装载某个类型时,它使用类装载器定位相应的class文件,然后读入这个class文件内容并把它传输到虚拟机中。紧接着
15、虚拟机提取其中的类型信息,并将这些信息存储到方法区。该类型中的类(静态)变量同样也存储在方法区中。与Heap一样,methodarea是多线程共享的,因此要考虑多线程访问的同步问题。比如,假设同时两个线程都企图访问一个名为Lava的类