1. JVM原理
JVM简介:JVM, 中文名是Java虚拟机, 是一个虚拟的机器,用来模拟通用的物理机。 JVM是一个标准,一套规范, 规定了.class文件在其内部运行的相关标准和规范。
类加载器:从JVM外部以二进制字节流的方式加载到JVM中。
JVM本身有至少三种类加载器:BootStrapClassLoader(根类加载器,C++实现, 加载位于jre/lib/rt.jar)、ExtensionClassLoader(扩展类加载器, 主要用于加载jre/lib/ext/下的jar)、AppClassLoader(加载classpath环境变量所指定的class)
JVM类加载机制:自下而上检测,自上而下加载
注意:BootStrapClassLoader加载的类,getClassLoader()返回null
类加载过程:加载、连接(验证、准备、解析)、初始化
JVM运行时数据区:
程序计数器:当前线程执行字节码指令的指示器
虚拟机栈:和计数器一样,也是线程私有的,生命周期同线程一致。每个方法在执行时,都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。
本地第方法栈:此栈和JVM栈作用非常类似, 不同在于本地方法栈为虚拟机使用到的Native方法服务
Java堆:是JVM管理内存中最大的一块。被所有线程共享一块区域。堆是GC垃圾收集器管理的主要区域。
方法区:用来存储已被虚拟机加载的类信息, 常量、静态变量、即时编译器编译后的代码等数据。