From 4e597e3f1089c678fbb16c96a63fc360ee115192 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Mon, 2 Apr 2018 20:42:30 +0800 Subject: [PATCH] auto commit --- notes/Java 虚拟机.md | 49 +++++++++--------- pics/540631a4-6018-40a5-aed7-081e2eeeaeea.png | Bin 0 -> 23552 bytes pics/f5757d09-88e7-4bbd-8cfb-cecf55604854.png | Bin 0 -> 13312 bytes 3 files changed, 24 insertions(+), 25 deletions(-) create mode 100644 pics/540631a4-6018-40a5-aed7-081e2eeeaeea.png create mode 100644 pics/f5757d09-88e7-4bbd-8cfb-cecf55604854.png diff --git a/notes/Java 虚拟机.md b/notes/Java 虚拟机.md index 81c5dff0..2cf8718b 100644 --- a/notes/Java 虚拟机.md +++ b/notes/Java 虚拟机.md @@ -1,9 +1,9 @@ * [一、运行时数据区域](#一运行时数据区域) * [程序计数器](#程序计数器) - * [Java 虚拟机栈](#java-虚拟机栈) + * [虚拟机栈](#虚拟机栈) * [本地方法栈](#本地方法栈) - * [Java 堆](#java-堆) + * [堆](#堆) * [方法区](#方法区) * [运行时常量池](#运行时常量池) * [直接内存](#直接内存) @@ -27,17 +27,17 @@ # 一、运行时数据区域 -

+

## 程序计数器 记录正在执行的虚拟机字节码指令的地址(如果正在执行的是本地方法则为空)。 -## Java 虚拟机栈 +## 虚拟机栈 -每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。 +每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。 -

+

可以通过 -Xss 这个虚拟机参数来指定一个程序的 Java 虚拟机栈内存大小: @@ -56,13 +56,13 @@ java -Xss=512M HackTheJava 与 Java 虚拟机栈类似,它们之间的区别只不过是本地方法栈为本地方法服务。 -

+

-## Java 堆 +## 堆 所有对象实例都在这里分配内存。 -是垃圾收集的主要区域("GC 堆 "),现代的垃圾收集器基本都是采用分代收集算法,该算法的思想是针对不同的对象采取不同的垃圾回收算法,因此虚拟机把 Java 堆分成以下三块: +是垃圾收集的主要区域("GC 堆"),现代的垃圾收集器基本都是采用分代收集算法,该算法的思想是针对不同的对象采取不同的垃圾回收算法,因此虚拟机把 Java 堆分成以下三块: - 新生代(Young Generation) - 老年代(Old Generation) @@ -102,7 +102,7 @@ Class 文件中的常量池(编译器生成的各种字面量和符号引用 ## 直接内存 -在 JDK 1.4 中新加入了 NIO 类,引入了一种基于通道(Channel)与缓冲区(Buffer)的 I/O 方式,它可以使用 Native 函数库直接分配堆外内存,然后通过一个存储在 Java 堆里的 DirectByteBuffer 对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能,因为避免了在 Java 堆和 Native 堆中来回复制数据。 +在 JDK 1.4 中新加入了 NIO 类,它可以使用 Native 函数库直接分配堆外内存,然后通过一个存储在 Java 堆里的 DirectByteBuffer 对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能,因为避免了在 Java 堆和 Native 堆中来回复制数据。 # 二、垃圾收集 @@ -221,11 +221,9 @@ finalize() 类似 C++ 的析构函数,用来做关闭外部资源等工作。 不足: -1. 标记和清除过程效率都不高 +1. 标记和清除过程效率都不高; 2. 会产生大量碎片,内存碎片过多可能导致无法给大对象分配内存。 -之后的算法都是基于该算法进行改进。 - ### 2. 复制

@@ -394,7 +392,7 @@ JVM 为对象定义年龄计数器,经过 Minor GC 依然存活,并且能被 ### 4. 动态对象年龄判定 -JVM 并不是永远地要求对象的年龄必须达到 MaxTenuringThreshold 才能晋升老年代,如果在 Survivor 区中相同年龄所有对象大小的总和大于 Survivor 空间的一半,则年龄大于或等于该年龄的对象可以直接进入老年代,无序等待 MaxTenuringThreshold 中要求的年龄。 +JVM 并不是永远地要求对象的年龄必须达到 MaxTenuringThreshold 才能晋升老年代,如果在 Survivor 区中相同年龄所有对象大小的总和大于 Survivor 空间的一半,则年龄大于或等于该年龄的对象可以直接进入老年代,无需等待 MaxTenuringThreshold 中要求的年龄。 ### 5. 空间分配担保 @@ -418,7 +416,7 @@ JVM 并不是永远地要求对象的年龄必须达到 MaxTenuringThreshold 才 ### 4. JDK 1.7 及以前的永久代空间不足 -在 JDK 1.7 及以前,HotSpot 虚拟机中的方法区是用永久代实现的,永久代中存放的为一些 class 的信息、常量、静态变量等数据,当系统中要加载的类、反射的类和调用的方法较多时,永久代可能会被占满,在未配置为采用 CMS GC 的情况下也会执行 Full GC。如果经过 Full GC 仍然回收不了,那么 JVM 会抛出 java.lang.OutOfMemoryError,为避免以上原因引起的 Full GC,可采用的方法为增大永久代空间或转为使用 CMS GC。 +在 JDK 1.7 及以前,HotSpot 虚拟机中的方法区是用永久代实现的,永久代中存放的为一些 Class 的信息、常量、静态变量等数据,当系统中要加载的类、反射的类和调用的方法较多时,永久代可能会被占满,在未配置为采用 CMS GC 的情况下也会执行 Full GC。如果经过 Full GC 仍然回收不了,那么 JVM 会抛出 java.lang.OutOfMemoryError,为避免以上原因引起的 Full GC,可采用的方法为增大永久代空间或转为使用 CMS GC。 ### 5. Concurrent Mode Failure @@ -448,7 +446,7 @@ JVM 并不是永远地要求对象的年龄必须达到 MaxTenuringThreshold 才 虚拟机规范中并没有强制约束何时进行加载,但是规范严格规定了有且只有下列五种情况必须对类进行初始化(加载、验证、准备都会随着发生): -1. 遇到 new、getstatic、putstatic、invokestatic 这四条字节码指令时,如果类没有进行过初始化,则必须先触发其初始化。最常见的生成这 4 条指令的场景是:使用 new 关键字实例化对象的时候;读取或设置一个类的静态字段(被 final 修饰、已在编译器把结果放入常量池的静态字段除外)的时候;以及调用一个类的静态方法的时候。 +1. 遇到 new、getstatic、putstatic、invokestatic 这四条字节码指令时,如果类没有进行过初始化,则必须先触发其初始化。最常见的生成这 4 条指令的场景是:使用 new 关键字实例化对象的时候;读取或设置一个类的静态字段(被 final 修饰、已在编译期把结果放入常量池的静态字段除外)的时候;以及调用一个类的静态方法的时候。 2. 使用 java.lang.reflect 包的方法对类进行反射调用的时候,如果类没有进行初始化,则需要先触发其初始化。 @@ -507,19 +505,19 @@ System.out.println(ConstClass.HELLOWORLD); 主要有以下 4 个阶段: -**(一)文件格式验证** +(一)文件格式验证 验证字节流是否符合 Class 文件格式的规范,并且能被当前版本的虚拟机处理。 -**(二)元数据验证** +(二)元数据验证 对字节码描述的信息进行语义分析,以保证其描述的信息符合 Java 语言规范的要求。 -**(三)字节码验证** +(三)字节码验证 通过数据流和控制流分析,确保程序语义是合法、符合逻辑的。 -**(四)符号引用验证** +(四)符号引用验证 发生在虚拟机将符号引用转换为直接引用的时候,对类自身以外(常量池中的各种符号引用)的信息进行匹配性校验。 @@ -610,11 +608,11 @@ public static void main(String[] args) { 从 Java 开发人员的角度看,类加载器可以划分得更细致一些: -- 启动类加载器(Bootstrap ClassLoader) 此类加载器负责将存放在 <JAVA_HOME>\lib 目录中的,或者被 -Xbootclasspath 参数所指定的路径中的,并且是虚拟机识别的(仅按照文件名识别,如 rt.jar,名字不符合的类库即使放在 lib 目录中也不会被加载)类库加载到虚拟机内存中。 启动类加载器无法被 Java 程序直接引用,用户在编写自定义类加载器时,如果需要把加载请求委派给启动类加载器,直接使用 null 代替即可。 +- 启动类加载器(Bootstrap ClassLoader)此类加载器负责将存放在 <JAVA_HOME>\lib 目录中的,或者被 -Xbootclasspath 参数所指定的路径中的,并且是虚拟机识别的(仅按照文件名识别,如 rt.jar,名字不符合的类库即使放在 lib 目录中也不会被加载)类库加载到虚拟机内存中。 启动类加载器无法被 Java 程序直接引用,用户在编写自定义类加载器时,如果需要把加载请求委派给启动类加载器,直接使用 null 代替即可。 -- 扩展类加载器(Extension ClassLoader) 这个类加载器是由 ExtClassLoader(sun.misc.Launcher$ExtClassLoader)实现的。它负责将 <JAVA_HOME>/lib/ext 或者被 java.ext.dir 系统变量所指定路径中的所有类库加载到内存中,开发者可以直接使用扩展类加载器。 +- 扩展类加载器(Extension ClassLoader)这个类加载器是由 ExtClassLoader(sun.misc.Launcher$ExtClassLoader)实现的。它负责将 <JAVA_HOME>/lib/ext 或者被 java.ext.dir 系统变量所指定路径中的所有类库加载到内存中,开发者可以直接使用扩展类加载器。 -- 应用程序类加载器(Application ClassLoader) 这个类加载器是由 AppClassLoader(sun.misc.Launcher$AppClassLoader)实现的。由于这个类加载器是 ClassLoader 中的 getSystemClassLoader() 方法的返回值,因此一般称为系统类加载器。它负责加载用户类路径(ClassPath)上所指定的类库,开发者可以直接使用这个类加载器,如果应用程序中没有自定义过自己的类加载器,一般情况下这个就是程序中默认的类加载器。 +- 应用程序类加载器(Application ClassLoader)这个类加载器是由 AppClassLoader(sun.misc.Launcher$AppClassLoader)实现的。由于这个类加载器是 ClassLoader 中的 getSystemClassLoader() 方法的返回值,因此一般称为系统类加载器。它负责加载用户类路径(ClassPath)上所指定的类库,开发者可以直接使用这个类加载器,如果应用程序中没有自定义过自己的类加载器,一般情况下这个就是程序中默认的类加载器。 ### 3. 双亲委派模型 @@ -634,7 +632,7 @@ public static void main(String[] args) { ```java protected synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException{ - //check the class has been loaded or not + // 先检查请求的类是否已经被加载过了 Class c = findLoadedClass(name); if(c == null) { try{ @@ -644,9 +642,10 @@ protected synchronized Class loadClass(String name, boolean resolve) throws C c = findBootstrapClassOrNull(name); } } catch(ClassNotFoundException e) { - //if throws the exception , the father can not complete the load + // 如果父类加载器抛出 ClassNotFoundException,说明父类加载器无法完成加载请求 } if(c == null) { + // 如果父类加载器无法完成加载请求,再调用自身的 findClass() 来进行加载 c = findClass(name); } } diff --git a/pics/540631a4-6018-40a5-aed7-081e2eeeaeea.png b/pics/540631a4-6018-40a5-aed7-081e2eeeaeea.png new file mode 100644 index 0000000000000000000000000000000000000000..e22b2c8399fed0cf439bfc01092f6d0845829253 GIT binary patch literal 23552 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 LzyJR~=Kuc-%dVNi literal 0 HcmV?d00001