一、java文件的执行过程
大部分程序执行过程分为三步:编码---编译---执行
(1)编码:得到.java文件
(2)编译:得到字节码(class文件)
(3)执行:jvm进行类装载,由执行引擎转换成机器码运行
二、运行数据区域
类装载和执行引擎这里不说明,只是说明jvm的运行数据区域:寄存器、本地方法栈、java栈、堆、方法区、运行常量池。下面我们来说说各个区域的功能
(1)寄存器:每一个线程独有,主要是pc寄存器等
(2)java栈:每一个线程独有,每当执行一个方法时,java栈就会压入一个栈帧,该栈帧存储局部变量表、操作栈等等
(3)本地方法栈:每个线程独有,保存本地方法
(4)堆:全部线程共享,java堆是我们最熟悉的,其中分为年轻代、年老代和永久代
(5)方法区:方法区保存了类信息、常量、静态变量、及时编译器编译后的代码等数据
(6)运行常量池:运行常量池属于方法区,存放类和借口的常量,存放方法和域的所有引用
对于java堆的永久代,在hotspot虚拟机中,其实就是方法区,它在jvm运行期间几乎不太可能会被回收,所以有此名称。
三、深入探讨
方法区:事实上方法区保存了运行常量池、全局变量、静态变量以及类信息等等。也就是说静态变量static ,全局变量public static
java栈:保存了局部基本变量(比如int类型等等)、局部变量的引用、中间操作数等等
四、jvm一些简单参数设置
-xms 初始heap大小
-xmx 最大heap大小