diff --git a/notes/JVM.md b/notes/JVM.md index 3962e53f..d438acb3 100644 --- a/notes/JVM.md +++ b/notes/JVM.md @@ -53,11 +53,11 @@

-注:白色区域为线程私有的,蓝色区域为线程共享的。 +注:白色区域为线程私有,蓝色区域为线程共享。 ## 程序计数器 -记录正在执行的虚拟机字节码指令的地址(如果正在执行的是 Native 方法则为空)。 +记录正在执行的虚拟机字节码指令的地址(如果正在执行的是本地方法则为空)。 ## Java 虚拟机栈 @@ -76,13 +76,13 @@ 所有对象实例都在这里分配内存。 -这块区域是垃圾收集器管理的主要区域("GC 堆 ")。现在收集器基本都是采用分代收集算法,Java 堆还可以分成:新生代和老年代(新生代还可以分成 Eden 空间、From Survivor 空间、To Survivor 空间等)。 +这块区域是垃圾收集器管理的主要区域("GC 堆 ")。现在收集器基本都是采用分代收集算法,因此 Java 堆还可以分成:新生代和老年代,新生代还可以分成 Eden 空间、From Survivor 空间、To Survivor 空间等。 -不需要连续内存,可以通过 -Xmx 和 -Xms 来控制动态扩展内存大小,如果动态扩展失败会抛出 OutOfMemoryError 异常。 +不需要连续内存,并且可以通过 -Xmx 和 -Xms 来控制动态扩展内存大小,如果动态扩展失败会抛出 OutOfMemoryError 异常。 ## 方法区 -用于存放已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。 +用于存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。 和 Java 堆一样不需要连续的内存,并且可以动态扩展,动态扩展失败一样会抛出 OutOfMemoryError 异常。 @@ -92,9 +92,9 @@ 运行时常量池是方法区的一部分。 -类加载后,Class 文件中的常量池(用于存放编译期生成的各种字面量和符号引用)就会被放到这个区域。 +Class 文件中的常量池(编译器生成的各种字面量和符号引用)会在类加载后被放入这个区域。 -在运行期间也可以用过 String 类的 intern() 方法将新的常量放入该区域。 +除了在编译期生成的常量,还允许动态生成,例如 String 类的 intern()。这部分常量也会被放入运行时常量池。 ## 直接内存