《深入理解java虚拟机》 - 需要一本书来融汇贯通你的经验(下)
上一章讲到了类的加载机制,主要有传统派的 双亲委派模型 和 现代主义激进派的 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。
额。。。
转载于:https://www.cnblogs.com/yougewe/p/7997390.html
《深入理解java虚拟机》 - 需要一本书来融汇贯通你的经验(下)相关推荐
- 深入理解java虚拟机(7)---线程安全 锁优化
关于线程安全的话题,足可以使用一本书来讲解这些东西.<Java Concurrency in Practice> 就是讲解这些的,在这里 主要还是分析JVM中关于线程安全这块的内容. 1. ...
- 无责任书评:每个Java程序员都应该深入理解Java虚拟机!
Java这门语言的发展是很有意思的,它不像Python, Ruby 等完全是开源社区驱动,也不像C#,VB.NET主要由微软操刀.它是一个以Oracle(之前是Sun)为主,各大巨头一起参与,一起制定 ...
- 不会玩游戏的程序员不是好作家,《深入理解Java虚拟机》周志明来了!
嘉宾:周志明.杨福川 采访.撰文:Satoh_AI 这次采访起源来自于我和豆瓣的一位读者有同样的好奇心,为什么网上搜不到周志明老师的更多信息?为什么"80后玩家"可以把本本书都维持 ...
- mysql种编译码写在哪_深入理解Java虚拟机(程序编译与代码优化)
对于性能和效率的追求一直是程序开发中永恒不变的宗旨,除了我们自己在编码过程中要充分考虑代码的性能和效率,虚拟机在编译阶段也会对代码进行优化.本文就从虚拟机层面来看看虚拟机对我们所编写的代码采用了哪些优 ...
- 《深入理解Java虚拟机》(第二版)学习3:垃圾收集器
垃圾收集器 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现. 我们这里讨论的收集器主要是基于JDK 1.7 Update 14之后的 Hotspot VM . Serial 收 ...
- JAVA好书之《深入理解Java虚拟机》
最近打算做好现有工作的前提下,扎实一下自己专业的技术知识,并将相关的经典书也记录一下.今天看了一些JVM相关的知识,这里面的经典是<深入理解Java虚拟机>,适合有点基础又想深入理解其中原 ...
- 深入理解Java虚拟机-如何利用 JDK 自带的命令行工具监控上百万的高并发的虚拟机性能...
虚拟机系列文章 深入理解 Java 虚拟机(第一弹) - Java 内存区域透彻分析 深入理解 Java 虚拟机(第二弹) - 常用 vm 参数分析 深入理解 Java 虚拟机-如何利用 Visual ...
- 深入理解 Java 虚拟机 - 你了解 GC 算法原理吗
来自:好好学Java 虚拟机系列文章 深入理解 Java 虚拟机(第一弹) - Java 内存区域透彻分析 深入理解 Java 虚拟机(第二弹) - 常用 vm 参数分析 深入理解 Java 虚拟机- ...
- 深入理解 Java 虚拟机(第二弹) - 常用 vm 参数分析
来自:好好学java 话不多说,今天就分析一下一些常用的Java虚拟机的参数设置,以及如何更好的使用! 1 JVM参数简介 首先想说的是其实这些参数我们并不是陌生的,在平时的开发和使用中经常都会遇到, ...
- 深入理解 Java 虚拟机(第一弹) - Java 内存区域透彻分析
来自:好好学java 这篇文章主要介绍Java内存区域,也是作为Java虚拟机的一些最基本的知识,理解了这些知识之后,才能更好的进行Jvm调优或者更加深入的学习,本来这些知识是晦涩难懂的,所以希望能够 ...
最新文章
- keepalived+nginx安装
- ios wallet开发_iOS: 使用UICollectionView实现Wallet效果
- 中国工程师最喜欢的10大WiFi物联网芯片
- 有奖调研 | 致云通信短信服务用户的一封信
- jar 命令 打包装class文件的文件夹
- 【Docker】 安装 Docker
- 找出两个字符串中所有共同的字符_面试中的两个字符串问题竟给我整懵了?!| 原力计划...
- 数据库原理mysql_数据库原理:MySql的安装
- python 元组和列表区别_Python基础教程,第三讲,列表和元组
- TCP ACK的pingpong交互模式
- 一、cadence ic 5141 ——软件下载地址以及常见错误
- VMWare 安装XP-SP3虚拟机
- android word文件编辑器,AndroDOC Doc&Word的编辑器
- mac空格键跟删除键失灵
- 思科交换机接口配置trunk_cisco交换机vlan-trunk的配置详解及应用实例
- mybatis like的两种写法
- r语言 柱状图加星号_如何用R画分组柱状图并且添加标准差和显著性标记(星号)?...
- 栈和堆的区别是什么? 为什么说栈的速度快,堆的速度慢?
- 计算机按键音乐文爱,CG/贺敬轩《文爱》[FLAC/MP3-320K]
- 前端开发实习生-实习日志
热门文章
- Vue CLI安装 Vue项目创建 Vue Devtools安装
- (Spring Cloud微服务实战-书中之坑)spring cloud zuul统一处理业务异常,并且需要响应状态为200...
- 无废话WPF系列16:资源
- 《腾讯iOS测试实践》一一1.8 小结
- CentOS6.5上增加中文字体库,确保前端WEB可以正常显示
- Windows Server 2012 R2 WSUS-3:安装服务器角色
- iterator总结(未完)
- Nginx 的 server_names_hash_bucket_size 问题
- 电大计算机阅读英语作文,(2017年电大)电大英语作文整理20篇.doc
- 计算机设备操作与讲解,第五章计算机操作系统设备管理讲解.ppt