1、JVM类加载
Java官网:https://docs.oracle.com/javase/8/
Reference -> Developer Guides -> 定位到:https://docs.oracle.com/javase/8/docs/index.html
JDK 8 is a superset of JRE 8, and contains everything that is in JRE 8, plus tools such as the compilers and det
(1)源码到类文件
(2)类文件到JVM
(3)JVM各种折腾[内部结构、执行方式、垃圾回收、本地调用等]
1.1 源码到类文件
1.1.1 源码demo
package com.example.jvmcase.basic;
class Person {
private String name = "yzt";
private int age;
private final double salary = 100;
private static String address;
private final static String hobby = "Programming";
private static Object obj = new Object();
public void say() {
System.out.println("person say...");
}
public static int calc(int op1, int op2) {
op1 = 3;
int result = op1 + op2;
Object obj = new Object();
return result;
}
public static void main(String[] args) {
calc(1, 2);
}
}
编译: javac -g:vars Person.java —> Person.class
1.1.2 前期编译
**Person.java -> 词法分析器 -> tokens流 -> 语法分析器 -> 语法树/抽象语法树 **
-> 语义分析器 -> 注解抽象语法树 -> 字节码生成器 -> Person.class文件
1.1.3 类文件(Class文件)
1.1.3.1 16进制
常量池
字段表集合
方法表集合
1.3.1.2:
The ClassFile Structure
官网: https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html
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];
}
1.3.1.3:
JDK自带的命令
javap -h
可以验证一下上述Classfile Structure前面几块内容的正确性
javap -v -p Person.class 进行反编译,查看字节码信息和指令等信息