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就不能被重写,就确定了
- 非虚方法和虚函数
![]()



















































































浙公网安备 33010602011771号