专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

《深入理解java虚拟机》 - 需要一本书来融汇贯通你的经验(下)

  上一章讲到了类的加载机制,主要有传统派的 双亲委派模型 和 现代主义激进派的 osgi 类加载器。接下来继续。

第8章  虚拟机字节码执行引擎

  局部变量表,用于存储方法参数和方法内部定义的局部变量。

  操作数栈,其实书上解释的糊里糊涂的,个人理解一下,主要是因为cpu寄存器太少,而又要进行各种子方法的调用,那么为了保存外部的一些寄存器值,所以使用了操作数栈。进入子方法的时候,先入栈保存起来,退出时再一个个弹出栈回原来的寄存器。

  动态连接,在每一次运行期间转化为直接引用的操作。

  基于栈的字节码解释执行。

  java中提供了5个方法调用字节码指令,invokestatic 调用静态方法。invokespecial 调用实例构造器方法、私有方法和父类方法 ,invokevirtual 调用所有的虚方法,invokeinterface 调用接口方法,在运行时再确定一个实现此接口的对象,这给我们面向接口编程提供了能力。invokedynamic 先在运行时动态解析出调用点限定符所引用的方法,再执行该方法。javap -c a 可查看字节码。

  虚拟机动态分派的实现为,在类的方法区中建立一个虚方法表vtable,使用虚方法表索引来代替元数据查找从而提高性能。

  tomcat 类加载器

101_1.png

    osgi 类加载器

101_2.png

  字节码生成技术和动态代理的实现。

  可以使用 retrotranslator 将高版本里写的代码,编译回低版本的运行环境中,原理就是写一些高版本里自代的方法替换到低版本中。

第10章  编译期优化

  javac 源码与调试,javac编译器是用java语言实现的,可以直接阅读其源码。

  java 语法糖,语法糖就是,表面看起来牛b,实际并没什么卵用的东西。其实主要是为了提高开发效率,以及减少犯错的机会的辅助性语法。如 泛型、自动拆装箱。。。

第11章  运行期优化

  运行期的热点代码,将会被编译成平台相关的机器码,从而提高性能。

  热点代码分,被多次调用的方法、被多次执行的循环体。

  方法计数器触发即时编译;

101_3.png

  回边计数器触发即时编译

101_4.png

  client compiler 架构

101_5.png

  使用 +XX printcompilation可以将编译的方法打印出来。printinlining。-XX : +printcompilation 。

第12章  java内存模型与线程

  处理器、高速缓存、主内存间的交互关系

101_6.png

  处理器可能会对输入代码进行乱序执行优化。而java虚拟机的即时编译也可能进行指令重排序优化。

  java主内存与工作内存的交互关系

101_7.png

  java主内存与工作内存的交互协议,定义了8个操作,每一个都是原子性的。

  lock 锁定

  unlock 解锁

  read 读取,和load 连贯操作

  load 载入

  use 使用

  assign 赋值

  store 存储,和write 连贯操作

  线程的实现,使用内核线程实现,使用用户线程实现,混合实现

  101_8.png

  使用内核线程

101_9.png

  使用用户线程

101_10.png

  混合实现

  java线程有10优先级, Thread.MIN_PRIORITY, Thread.MAX_PRIORITY,针对windows的7个优先级,做重叠处理。

101_11.png

  java线程状态转换

第13章  线程安全与锁优化

  不可变的对象一定是线程安全的。

  synchronized ,reentrantlock,threadlocalmap。

  锁优化,适应性自旋锁 adaptive spinning,锁消除 lock elimination,锁粗化 lock coarsening,轻量级锁 lightweight locking,偏向锁 biased locking。

  额。。。

文章永久链接:https://tech.souyunku.com/32464

未经允许不得转载:搜云库技术团队 » 《深入理解java虚拟机》 - 需要一本书来融汇贯通你的经验(下)

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们