1、JVM将内存分为方法区、堆、程序计数器、虚拟机栈、本地方法栈,其中方法区和堆是线程共享的,而程序计数器、虚拟机栈、本地方法栈是非线程共享的。
在方法区中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。另外,运行时常量池也在方法区中。
在JVM初始运行时,JVM已经分配好方法区和堆,而JVM每遇到一个线程,就为其分配一个程序计数器、虚拟机栈和本地方法栈,当线程终止时,三者(虚拟机栈、本地方法栈、程序计数器)所占用的内存空间也会被释放掉。非线程共享的那三个区域的生命周期与所属线程相同,而线程共享的区域与JAVA程序运行的生命周期相同,所以这也是系统垃圾回收的场所只发生在线程共享的区域(实际上对大部分虚拟机来说只发生在Heap(堆)上)的原因。
2、
-Xmx:最大堆大小
-Xms:初始堆大小
-Xmm:年轻代大小
-XXSurvivorRatio:年轻代中Eden区与Survivor区的大小比值