java程序运行流程草图
说明:.java编译成面向jvm的class文件,供jvm解释执行
JVM结构
JVM的结构主要分为三部分(http://www.androidchina.net/5774.html)
- 类加载器,用于加载.class
- 执行引擎,用于执行字节码或者本地方法
- 运行时数据区,方法区、java堆、java虚拟机栈、PC寄存器、本地方法区
类加载器
把一个类(.class)文件从磁盘加载到内存
包含:AppClassLoader,ExtClassLoader,BootStrapClassLoader
采用双亲委派机制进行加载,如需加载自定义class,则需要自定义ClassLoader,默认父ClassLoader指向AppClassLoader
[图片上传失败...(image-ec704-1512463265949)]
运行时数据区
PC寄存器:也叫程序计数器,当前线程执行的字节码信号指示器。线程私有
java虚拟机栈:每个方法被执行的时候都会创建一个栈帧,用于存储局部变量表,操作数栈,动态链接,方法出口等信息。线程私有
java堆:供所有类实例和对象分配内存等区域。在虚拟机启动的时候创建,被垃圾回收器管理。线程共享
方法区:存储了每一个被加载的类的结构信息和一些类,实例,接口被初始化的方法。线程共享
本地方法区:存放native方法数据信息。线程私有