1/31JVM虚拟机 类加载
- 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就不能被重写,就确定了
- 非虚方法和虚函数
