jvm_note_01

java编码至执行
javac 编译
java 运行
XX.java 代码
XX.class 字节码
ClassLoader 加载进内存
java类库
字节码解释器
JIT即时编译器
JIT即时编译器
OS 硬件
JDK JRE JVM

JDK = JRE + development kit
JRE = JVM + core lib
JVM

ClassLoader 加载进内存过程
  1. 周期: loading -> linking -> initializing -> GC
  2. XX.class 通过"loading"进JVM的ClassLoader
  3. linking包括verification, preparation 和 resolution, verification校验16进制的class文件开头cafebaby和0034(版本号)等信息
  4. preparation 将静态变量赋值默认值(如: 0 , 空串("")等)
  5. resolution将符号引用先转换成具体内存地址值
  6. initializing 将静态变量值进行赋值为定义值
  7. GC回收
ClassLoader 加载器

Bootstrap(加载lib/rt.jar charset.jar等核心类, C++实现)
Extension(加载扩展jar包jre/lib/ext/*.jar 或由-Djava.ext.dirs指定)
App(加载classpath指定内容)
Custom(自定义ClassLoader)

  1. JVM是按需动态加载, 采用双亲委派机制
  2. 自底向上检查该类是否已经加载(parent方向), 找到则返回"已加载"(到Bootstrap还未找到则走3.的步骤)
  3. 自顶向下进行实际查找和加载(child方向), 查找到当前加载器中可加载该class则返回"已加载(且缓存)", 若至Custom还未找到则报Class Not Found异常

为了安全, 避免自定义的class替换掉了java的核心类库, 比如使用三方自定义String类(加入发送用户名密码功能), 替换了项目本身的String就会泄露信息了
code可以通过(XXX.class.getClassLoader 获取, 例: String.class.getClassLoader(), 返回null, 因为Bootstrap由C++实现, java中无该类)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值