diff --git a/notes/JVM.md b/notes/JVM.md index e4b18a06..4d3d31a4 100644 --- a/notes/JVM.md +++ b/notes/JVM.md @@ -64,6 +64,12 @@ 每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。 +可以通过 -Xss 这个虚拟机参数来指定一个程序的 Java 虚拟机栈内存大小: + +```java +java -Xss=512M HackTheJava +``` + 该区域可能抛出以下异常: 1. 当线程请求的栈深度超过最大值,会抛出 StackOverflowError 异常; @@ -71,13 +77,15 @@ ## 本地方法栈 +本地方法不是用 Java 实现,对待这些方法需要特别处理。 + 与 Java 虚拟机栈类似,它们之间的区别只不过是本地方法栈为本地方法服务。 ## Java 堆 所有对象实例都在这里分配内存。 -这块区域是垃圾收集器管理的主要区域("GC 堆 ")。现在收集器基本都是采用分代收集算法,该算法的思想是针对不同的对象采取不同的回收算法,因此虚拟机把 Java 堆分成以下三块: +是垃圾收集的主要区域("GC 堆 "),现代的垃圾收集器基本都是采用分代收集算法,该算法的思想是针对不同的对象采取不同的垃圾回收算法,因此虚拟机把 Java 堆分成以下三块: - 新生代(Young Generation) - 老年代(Old Generation) @@ -91,9 +99,9 @@

-Java 堆不需要连续内存,并且可以通过动态增加其内存,增加失败会会抛出 OutOfMemoryError 异常。 +Java 堆不需要连续内存,并且可以通过动态增加其内存,增加失败会抛出 OutOfMemoryError 异常。 -可以通过 -Xms 和 -Xmx 两个虚拟机参数来指定一个程序的 Java 堆内容大小,第一个参数设置最小值,第二个参数设置最大值。 +可以通过 -Xms 和 -Xmx 两个虚拟机参数来指定一个程序的 Java 堆内存大小,第一个参数设置最小值,第二个参数设置最大值。 ```java java -Xms=1M -XmX=2M HackTheJava @@ -698,3 +706,4 @@ java -Xmx12m -Xms3m -Xmn1m -XX:PermSize=20m -XX:MaxPermSize=20m -XX:+UseSerialGC - 深入理解 Java 虚拟机 - [Jvm memory](https://www.slideshare.net/benewu/jvm-memory) +- [Memory Architecture Of JVM(Runtime Data Areas)](https://hackthejava.wordpress.com/2015/01/09/memory-architecture-by-jvmruntime-data-areas/)