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

时间:2021-09-15 14:22:38

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

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

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

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

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

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

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

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

  tomcat 类加载器

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

    osgi 类加载器

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

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

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

第10章  编译期优化

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

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

第11章  运行期优化

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

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

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

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

  回边计数器触发即时编译

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

  client compiler 架构

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

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

第12章  java内存模型与线程

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

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

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

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

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

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

  lock 锁定

  unlock 解锁

  read 读取,和load 连贯操作

  load 载入

  use 使用

  assign 赋值

  store 存储,和write 连贯操作

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

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

  使用内核线程

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

  使用用户线程

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

  混合实现

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

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

  java线程状态转换

第13章  线程安全与锁优化

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

  synchronized ,reentrantlock,threadlocalmap。

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

  额。。。

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

  1. 深入理解java虚拟机-----&gt&semi;垃圾收集器与内存分配策略(下)

    1.  前言 内存分配与回收策略 JVM堆的结构分析(新生代.老年代.永久代) 对象优先在Eden分配 大对象直接进入老年代 长期存活的对象将进入老年代 动态对象年龄判定 空间分配担保  2.  垃圾 ...

  2. 深入理解java虚拟机(7)---线程安全 &amp&semi; 锁优化

    关于线程安全的话题,足可以使用一本书来讲解这些东西.<Java Concurrency in Practice> 就是讲解这些的,在这里 主要还是分析JVM中关于线程安全这块的内容. 1. ...

  3. 深入理解java虚拟机(1)------内存区域与内存溢出

    在C++领域,关于C++的内存存储,结构等等,有一本书:深度探索C++对象模型,讲解的非常透彻. 而Java确把这一工作交给了虚拟机来处理. 我们首先来看看关于内存的问题. 1.问题: 1)java ...

  4. 《深入理解Java虚拟机》虚拟机性能监控与故障处理工具

    上节学习回顾 从课本章节划分,<垃圾收集器>和<内存分配策略>这两篇随笔同属一章节,主要是从理论+实验的手段来讲解JVM的内存处理机制.好让我们对JVM运行机制有一个良好的概念 ...

  5. 《深入理解 java虚拟机》学习笔记

    java内存区域详解 以下内容参考自<深入理解 java虚拟机 JVM高级特性与最佳实践>,其中图片大多取自网络与本书,以供学习和参考.

  6. &lpar;1&rpar; 深入理解Java虚拟机到底是什么&quest;

    好文转载:http://blog.csdn.net/zhangjg_blog/article/details/20380971 什么是Java虚拟机   作为一个Java程序员,我们每天都在写Java ...

  7. 深入理解java虚拟机(6)---内存模型与线程 &amp&semi; Volatile

    其实关于线程的使用,之前已经写过博客讲解过这部分的内容: http://www.cnblogs.com/deman/category/621531.html JVM里面关于多线程的部分,主要是多线程是 ...

  8. 深入理解java虚拟机(5)---字节码执行引擎

    字节码是什么东西? 以下是百度的解释: 字节码(Byte-code)是一种包含执行程序.由一序列 op 代码/数据对组成的二进制文件.字节码是一种中间码,它比机器码更抽象. 它经常被看作是包含一个执行 ...

  9. 深入理解java虚拟机(4)---类加载机制

    类加载的过程包括: 加载class到内存,数据校验,转换和解析,初始化,使用using和卸载unloading过程. 除了解析阶段,其他过程的顺序是固定的.解析可以放在初始化之后,目的就是为了支持动态 ...

  10. 什么是HotSpot VM &amp&semi; 深入理解Java虚拟机

    参考 http://book.2cto.com/201306/25434.html 另外,这篇文章也是从一个系列中得出的: <深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)> ...

随机推荐

  1. ACM-南京理工大学第八届程序设计竞赛-网络赛(2016&period;04&period;17)

    A.偷吃糖果Time Limit: 1000Ms Memory Limit: 65536KB Description小鱼喜欢吃糖果.他有两盒糖果,两盒糖果分别仅由小写字母组成的字符串s和字符串t构成. ...

  2. Scala:使用Sublime开发Scala

    Scala:使用Sublime开发Scala 第一步:[Tools][Build System][New Build System] 第二步:在打开的新文件中输入: { //"cmd&quo ...

  3. 2&period;精通前端系列技术之seajs和gruntJs结合开发(三)

    1.我们先来了解下模块化历史 模块化历史 nodeJS的出现(http://nodejs.org/) commonJS规范(http://www.commonjs.org/) 浏览器JS的模块化? A ...

  4. ClassLoader&comma; JavaAgent&comma; Aspectj Weaving一站式扫盲帖

    最近工作里复习的Class Loader基础知识集锦,写下来希望对别人有帮助,而且不止是为了撂倒面试官. 为了尽量简单明了容易背,有些部分写得比较干. 0. 参考资料: 书:<深入了解Java虚 ...

  5. go官网教程A Tour of Go

    http://tour.golang.org/#1 中文版:http://go-tour-cn.appsp0t.com/#4 package main import ( "fmt" ...

  6. Hibernate学习&lpar;三&rpar;自动建表

    一般情况下有如下两种方法: 1.在配置文件中添加如下配置 <property name="hibernate.hbm2ddl.auto">create</prop ...

  7. Swift基础之侧滑Cell显示操作按钮

    好久没写过博客了,今天展示一个UITableView基础的内容侧滑Cell的方法使用,之前写过OC语言的http://blog.csdn.net/hbblzjy/article/details/517 ...

  8. 明天开始学习 Hibernate

    明天开始学 Hibernate ,想简单的了解一下 Hibernate,也借此机会了解一下 ORM 计划用 5 天的时间看完,包括整理笔记 加油吧,少年~~

  9. React(一)使用脚手架创建React项目

    1.安装脚手架 现在使用较多的就是这三种脚手架工具: react-boilerplate react-redux-starter-kit create-react-app 我使用的是第三种,faceb ...

  10. css冻结列的效果

    <!DOCTYPE html><html lang="zh-cn"><head><meta charset="utf-8&quo ...