JAVA官网关于JDK、JRE、JVM的描述
class文件格式
ClassFile {
u4 magic;
u2 minor_version;
u2 major_version;
u2 constant_pool_count;
cp_info constant_pool[constant_pool_count-1];
u2 access_flags;
u2 this_class;
u2 super_class;
u2 interfaces_count;
u2 interfaces[interfaces_count];
u2 fields_count;
field_info fields[fields_count];
u2 methods_count;
method_info methods[methods_count];
u2 attributes_count;
attribute_info attributes[attributes_count];
}
class文件是16进制文件,u4代表8个数字。
类加载机制
Person.class–类加载机制–JVM
(1)装载
a-先找到类文件所在的位置:磁盘、网络 全路径 —> 类装载器Classloader.find(String name) --> 寻找
双亲委派
b-类文件的信息交给JVM --> 类文件字节码流静态存储 -->JVM中Method Area(方法区)
c-类文件锁对应的对象Class–>JVM中的Heap(堆)
(2)链接
a-验证
保证被加载类的正确性
b-准备
要为类的静态变量分配内存空间,并将其值初始化默认值。
static int a=10;–>初始化成0
c-解析
将类中的符号引用转换为直接引用。
符号引用:class文件格式规范,比如u4多少位,表示某个意思,如String str[aec0 flag]
直接引用:改成内存中实际的地址
(3)初始化
为静态变量赋予真正的值 a=10
JVM运行时数据区
2.5.3. Heap【堆】
2.5.4. Method Area【方法区】
2.5.5. Run-Time Constant Pool【运行时常量池,在方法区中】
【方法区+堆】
2.5.1. The pc
Register【程序计数器】
2.5.2. Java Virtual Machine Stacks【线程执行方法的表示】【Java虚拟机栈】
2.5.6. Native Method Stacks【本地方法栈】
【栈】