一、编译期优化

1.JIT编译器在运行期的优化过程对程序运行很重要,而编译期优化过程对于程序编码关系更密切

2.Javac编译器编译过程

  • 解析与填充符号表过程:词法语法分析、填充符号表
  • 插入式注解处理器的注解处理过程:通过注解处理器提供的标准API在编译期对注解进行处理
  • 分析与字节码生成过程:标注检查、数据及控制流分析、解语法糖、字节码生成

3.语法糖

  • 泛型与类型擦除

    Class文件中,只要是描述不完全一致的方法即可共存,但是方法重载要求具备不同的特征签名(不包括返回值)

    List<String>与List<Integer>在类型擦除后是同一个类型,擦除只是对方法的Code属性中的字节码擦除,实际上元数据还是保留了泛型信息,如此可以使用反射获取参数化类型

  • 自动装箱、拆箱与遍历循环

二、运行期优化

  • 解释器与编译器的交互

  

  • 分层编译

  1)第0 层

  2)第1层

  3)第2层

1.触发条件(热点代码)

  • 被多次调用的方法:JIT标准编译方式,以整个方法作为编译对象
  • 被多次执行的循环体:虽然是循环体,但是仍然编译整个方法,由于创建栈帧执行,故称为栈上替换OSR编译(On Stack Replacement)

2.热点代码探测

  • 基于采样点:定期检查栈顶,若常出现,则为热点方法
  • 基于技术器:为每个方法或者代码块创建计数器,统计次数是否超过阈值

3.HotSpot虚拟机:

  • 方法调用计数器:AIMD

  

  • 回边计数器:

  

3.编译过程

  • Client Compiler:三步  

  

  • Server Compiler:会进行更多的优化动作,如无用代码消除、循环展开、公共子表达式清除等

4.编译优化技术

  • 公共子表达式消除
  • 数组范围检查消除
  • 方法内联(重要)

  目的:1)避免建立栈帧消耗 2)为其他优化建立基础

  Java虚方法:引入CHA(Class Hierarchy Analysis)分析类方法的实现,如果唯一,则可以内联,但是需要逃生门,如果加载了导致继承关系变化,则抛弃已编译代码,进行解释执行或者重新编译

  • 逃逸分析:方法中的对象作为参数传递给其他方法称为方法逃逸,如果能证明一个对象不会逃逸到方法或者线程之外,则可对这个变量进行一些高级优化,如下:

  1)栈上分配

  2)同步消除:可以去掉同步

  3)标量替换

深入理解Java虚拟机7-chap10-11-斗者4星的更多相关文章

  1. 深入理解Java虚拟机--下

    深入理解Java虚拟机--下 参考:https://www.zybuluo.com/jewes/note/57352 第10章 早期(编译期)优化 10.1 概述 Java语言的"编译期&q ...

  2. 深入理解Java虚拟机--中

    深入理解Java虚拟机--中 第6章 类文件结构 6.2 无关性的基石 无关性的基石:有许多可以运行在各种不同平台上的虚拟机,这些虚拟机都可以载入和执行同一种平台无关的字节码(ByteCode),从而 ...

  3. 《深入理解Java虚拟机:JVM高级特性与最佳实践》【PDF】下载

    <深入理解Java虚拟机:JVM高级特性与最佳实践>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230062566 内容简介 作为一位 ...

  4. 深入理解Java虚拟机(类文件结构+类加载机制+字节码执行引擎)

    目录 1.类文件结构 1.1 Class类文件结构 1.2 魔数与Class文件的版本 1.3 常量池 1.4 访问标志 1.5 类索引.父索引与接口索引集合 1.6 字段表集合 1.7 方法集合 1 ...

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

    二.java内存区域与内存溢出异常 0.在内存管理领域,java与c/c++不同的是,在java虚拟机自动内存管理机制下,java不需要手动去为对象写配对的free内存的代码,不容易出现内存泄漏和内存 ...

  6. 深入理解Java虚拟机内存模型

    前言 本文中部分内容引用至<深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)>第12章,如果有兴趣可自行深入阅读,文末放有书籍PDF版本连接. 一.物理机中的并发 物理机遇到的并 ...

  7. 《深入理解Java虚拟机》第 3 版里面到底多了哪些知识点?本文竟然得到了本书作者的认可!

    这是why的第 47 篇原创文章 荒腔走板 大家好,我是 why.老规矩,先是简短的荒腔走板聊聊生活. 上面的图是前几天拍的,那天晚上下班后,刚刚走进小区就看到了这一轮弯月和旁边那一颗特别特别亮的星星 ...

  8. 《深入理解java虚拟机》读书笔记-第二章Java内存区域和内存溢出异常

    java1.7和java8的jvm存在差异,本文先按照<深入理解java虚拟机>的讲解内容总结,并将java8的改变作为附录放在文末 一丶运行时数据区域 ​ 图:java虚拟机运行时数据区 ...

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

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

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

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

随机推荐

  1. 【AtCoder】【模型转化】【二分答案】Median Pyramid Hard(AGC006)

    题意: 给你一个排列,有2*n-1个元素,现在进行以下的操作: 每一次将a[i]替换成为a[i-1],a[i],a[i+1]三个数的中位数,并且所有的操作是同时进行的,也就是说这一次用于计算的a[], ...

  2. base64编解码

    //ZBBase64.h #include <string> class ZBase64{public:    /* 编码    DataByte       [in]输入的数据长度,以字 ...

  3. JavaScript浏览器解析原理

    首先,JavaScript的特点是: 1. 跨平台 可以再不同的操作系统上运行. 2. 弱类型 与之相对的是强类型 强类型:在定义变量的时候,需要将变量的数据类型表明.例如:Java 弱类型:定义变量 ...

  4. IP欺骗

    通过一番测试,我发现当我连续提交3份问卷,再换一个IP提交3个问卷,也就是连续提交了6份问卷,并没有触发网站的反爬虫机制.所以我们可以猜测对方基于IP提交问卷的频率来识别爬虫程序的.看到这里,大家可能 ...

  5. (90)Wangdao.com第二十三天_JavaScript CSS 操作

    CSS 操作 通过 JavaScript 操作 CSS HTML 元素的 style 属性 <div style="background-color:red; border:1px s ...

  6. scrapy入门使用

    scrapy入门 创建一个scrapy项目 scrapy startporject mySpider 生产一个爬虫 scrapy genspider itcast "itcast.cn&qu ...

  7. OpLogMergeMessage-OutOfMemoryError-JavaHeapSpace

    direct memory size netty or oplog 5.5kw * 20 60G worker/ 26G MaxDirectMemorySize 1/2 tasks per worke ...

  8. python全栈开发 * background 定位 z-index * 180813

    I back-ground 一.颜色的表示: 1.单词 2.rgb表示法 rgb:红色 绿色 蓝色 三原色 光学显示器每个像素都是由三原色的发光原件组成的,靠明亮度不同调成不同的颜色的. 用逗号隔开, ...

  9. .NET Core开发日志——GraphQL

    GraphQL是什么 GraphQL既是一种用于API的查询语言也是一种通过使用对应数据的类型系统,执行数据查询的服务端运行时.GraphQL没有局限于任何数据库或存储引擎,而是通过既有代码及数据获得 ...

  10. kali2.0安装docker(转)

    开始部署 1. Docker需要Linux Kernels 大于3.10并且是64-bit的机器,用uname -a可以查看是否符合要求. 2. 执行命令编辑文本: vim /etc/apt/sour ...