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

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

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

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

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

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

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

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

  tomcat 类加载器

    osgi 类加载器

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

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

第10章  编译期优化

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

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

第11章  运行期优化

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

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

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

  回边计数器触发即时编译

  client compiler 架构

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

第12章  java内存模型与线程

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

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

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

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

  lock 锁定

  unlock 解锁

  read 读取,和load 连贯操作

  load 载入

  use 使用

  assign 赋值

  store 存储,和write 连贯操作

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

  

  使用内核线程

  使用用户线程

  混合实现

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

  java线程状态转换

第13章  线程安全与锁优化

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

  synchronized ,reentrantlock,threadlocalmap。

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

  额。。。

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

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

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

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

    关于线程安全的话题,足可以使用一本书来讲解这些东西.<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. (1) 深入理解Java虚拟机到底是什么?

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

  7. 深入理解java虚拟机(6)---内存模型与线程 & 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 & 深入理解Java虚拟机

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

随机推荐

  1. VisualStudio程序运行后控制台窗口一闪就没了

    这个虽然是千查万查出来的,但也不是原创的.希望对大家有所帮助. 方案一:网上最常见的解决方案是,在程序结尾的 return 0; 之前加 system("pause") 或 get ...

  2. POJ-1250

    #include<iostream> #include<string> #include<list> #include<algorithm> using ...

  3. 10_Eclipse中演示Git冲突的解决

     1 在user1中的readme.txt文件里先改动,而且commitand push 选中user1,右击team->Commit-à watermark/2/text/aHR0cDov ...

  4. java.sql.SQLException: Can not issue data manipulation statements with executeQuery().

    1.错误描写叙述 java.sql.SQLException: Can not issue data manipulation statements with executeQuery(). at c ...

  5. iOS开发证书都显示“此证书的签发者无效”,更新WWDR Certificate证书后还是显示无效

    1.首先iOS开发证书显示"此证书的签发者无效".是因为WWDR Certificate证书过期导致的,须要更新WWDR Certificate证书! 1)下载最新WWDR Cer ...

  6. LintCode-丑数

    设计一个算法.找出仅仅含素因子3,5,7 的第 k 大的数. 符合条件的数如:3.5.7,9,15...... 您在真实的面试中是否遇到过这个题? Yes 例子 假设k=4, 返回 9 挑战 要求时间 ...

  7. html5视频标签

    <video width="200" height="200" poster="img/shamo.jpg" src="vi ...

  8. eclipse中JDK、struts2、Spring、Hibernate源码查看

    一般,我们导入的只有jar文件,所以看不到对于的java文件,如果需要看源码,必须下载对应开源包的源码,一般都是zip文件,比如Spring,下载spring-framework-2.0.8-with ...

  9. ASP.NET Core 异常重试组件 Polly

    Polly 是一种 .NET 弹性和瞬态故障处理库,允许开发人员以流畅和线程安全的方式表达策略,如重试,断路器,超时,隔离隔离和备用,Polly 适用于 .NET 4.0,.NET 4.5 和 .NE ...

  10. C# 杂活

    1 下拉框 List<Model.Sys.AccountModel> AcModel = BLL.Sys.AccountBLL.Instance.GetModelList("Ro ...