- loading加载
JAVA。lang包底下的reflect。反编译从应用破解源码,盗版!
- 加载已经在内存中有大的class文件
验证
准备阶段静态变量都初始化为0,常量都已经初始化好
- 符号引用 一个字节码文件不可能全装下各种需要用到的类,而是用一个符号代指,解析就是把符号引用变成指针或偏移量
- 初始化
方法中自动有
按先后顺序初始化,有一个常量
- 一个特殊,可以先定义声明后改变值
初始化之前已经有准备阶段
- 这是类的构造器方法 如果没有类变量,就不会自动生成
类变量的加载只加载一次
- 类加载器的分类
- 核心类库 由引导类加载
- 自定义类加载器 隔离各个容器
- 双亲委派机制
引导类 Java底下的包都归它管,比如Java.lang
为了保护
知道报错原因,因为核心String类库没有main方法
-
双亲委派机制的优势
-
沙箱安全机制
放在你用引导类加载器加载自己的恶意攻击
动态链接需要这个信息
-
类的被动使用
主动?被动使用的区别就在于clinit()方法会不会使用
-
运行时数据区
-
原来Java线程和本地线程是一一印射的
守护线程
- 程序计数器 北京烤鸭的钩子,勾住代码 软件层面是一种模拟
既没有GC也没有OOM
-
虚拟机栈
- 为什么不需要GC,只能进站出站,没有复杂的算法
- 局部变量表
字节码行长度
15是idea中的行号,一一对应,8是字节码文件的行号
start PC+length是作用域范围,16就是代码范围长度
- 槽slot
引用类型占据一个slot,普通方法第一个就是this
- 操作数栈 结合执行引擎
- 栈顶缓存
- 动态链接
常量池里啥都有 将符号引用转换为直接地址引用
为什么不直接放
因为Java全是引用
标志位Final就不能被重写,就确定了
- 非虚方法和虚函数