@author Kode
@date:2018年6月28日11:02

第五期:JVM-HotSpot虚拟机-即时编译器、编译优化等相关知识。

这一部分怎么理解呢?我觉得应该找个主线把它串起来。

估计很多人都思考我们写的程序是怎么驱动电脑运行的,今天我们就以Java为例来说道说道。

打开IDEA,写了.java程序,一运行,生成.class文件,然后再运行这个文件,最后展示出我们想要的结果。

第一步:先看看.java是怎么变成.class的?

这个时候就得需要一个专业名词了,编译。那么编译是什么呢?编译就是将源程序翻译成可执行的目标代码。 .java文件经过处理后变成.class文件这一过程就可以理解为编译。那么这一过程是怎么样的呢?

过程

.Java文件 –> 词法分析器 –> 语法分析器 –> 语义分析器 –> .class 文件

第二步:得到.class文件以后,怎么输出我们想要的结果?

现在有了class文件以后,那我们怎么让它解释并运行呢?这个时候就得介绍一下类加载过程和机制了。

class文件 –> 加载 –> 验证 –> 准备 –> 解析 –> 初始

类加载机制就是:双亲委派模型了

在解释这一过程,我们可能需要先了解一下一个专有名词:解释,编译和解释两个名词也说明了Java语言的特性。那么什么是解释呢? 解释就是将.class文件逐条读入,逐条翻译解释,大白话就是一步一步来。这样的话会有什么缺点?Java是怎么解决的呢?

缺点是:执行效率比较差,这也算是解释性的语言的通病。

解决办法:这个时候就得掌声欢迎 JVM 和 JIT(Just in time)技术大佬登场,他们协作着把这个问题解决了。如何提高性能,那就通过优化。那怎么优化呢?这个时候就需要JVM帮忙了,JVM会通过观察方法和代码块运行的次数来决定是不是把这些代码块和方法标记成热点代码,然后JIT会把标记的热点代码翻译成本地相关的机器码,并进行优化,然后缓存起来,以备下次之用。这里面有点像数据库中的存储过程。在这里有个疑问,JVM是怎么判别方法和代码块是不是热点代码?

1, 基于采样的方式探测

2,基于计数器的热点探测
常用的计数器的热点探测两个方法:方法计数器、回边计数器

JIT是怎么优化的呢?

逃逸分析、 锁消除、 锁膨胀、 方法内联、 空值检查消除、 类型检测消除、 公共子表达式消除

参考资料:

[1] 深入浅出 JIT 编译器

[2] 什么是即时编译(JIT)!?OpenJDK HotSpot VM剖析

[3] 对象和数组并不是都在堆上分配内存的。-HollisChuang’s Blog

JVM-HotSpot虚拟机-即时编译器、编译优化等相关知识相关推荐

  1. JVM hotspot虚拟机对象探秘

    为什么80%的码农都做不了架构师?>>>    本文全部内容均转述自<深入理解Java虚拟机 JVM高级特性与最佳实践(第二版)>2.3节 下载地址:http://pan ...

  2. JVM Hotspot 虚拟机与 DalvikART 虚拟机堆栈的区别

    文章目录 Hotspot 虚拟机与 Dalvik 虚拟机的区别 Android 内存管理模型 JVM 与 Dalvik 虚拟机在栈的区别 AOT(Ahead Of Time)预先编译机制 JVM 与 ...

  3. 对于以太坊虚拟机 (EVM)及其相关知识的讲解

    以太坊虚拟机(EVM) EVM是智能合约的运行环境 作为区块验证协议的一部分,参与网络的每个节点都会运行EVM,审查节点会检查验证正在验证的区块中列出的交易,并运行EVM中交易触发的代码 EVM是沙盒 ...

  4. Android 扫描二维码 以及优化方面相关知识

    优化zxing 扫描二维码出现卡顿 扫描慢等现象:解决方案 :解决办法很简单,就是不仅仅使用聚焦框里的图像数据,而是采用全幅图像的数据.public PlanarYUVLuminanceSource ...

  5. 深入理解Java虚拟机-程序编译与代码优化

    本博客主要参考周志明老师的<深入理解Java虚拟机>第二版 读书是一种跟大神的交流.阅读<深入理解Java虚拟机>受益匪浅,对Java虚拟机有初步的认识.这里写博客主要出于以下 ...

  6. jvm(4)-虚拟机性能监控与故障处理工具

    [0]README 0.1)本文文字描述转自 "深入理解jvm",旨在了解 虚拟机性能监控与故障处理工具的基础知识(仅仅在于了解): [1]概述 1)给一个系统定位问题的时候,知识 ...

  7. JVM成神之路-HotSpot虚拟机-编译原理、JIT、编译优化

    Java编译原理 什么是字节码.机器码.本地代码? 字节码是指平常所了解的 .class 文件,Java 代码通过 javac 命令编译成字节码 机器码和本地代码都是指机器可以直接识别运行的代码,也就 ...

  8. Jvm 系列(十):Java 即时编译器JIT机制以及编译优化

    在部分的商用虚拟机中,Java 程序最初是通过解释器( Interpreter )进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁的时候,就会把这些代码认定为"热点代码" ...

  9. 深入理解java虚拟机(十三) Java 即时编译器JIT机制以及编译优化

    在部分的商用虚拟机中,Java 程序最初是通过解释器( Interpreter )进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁的时候,就会把这些代码认定为 热点代码 .为了提高热点代码的 ...

最新文章

  1. zabbix监控实践解析(历史记录附近乱码、图表显示乱码)
  2. 怎样新建Oracle数据库
  3. 复练--软考高级-综合布线部分
  4. openCVPracticalExercise学习笔记02
  5. JAVA虚拟机类加载机制之类加载的时机双亲委派模型
  6. 20210314:力扣第 232 场周赛
  7. VMware View 5.0 策略列表
  8. 全球智能猫眼行业调研及趋势分析报告
  9. Windows 技术篇-cmd命令查看系统启动时间、操作系统信息、内存使用情况、电脑配置信息
  10. 右键后资源管理器重启
  11. Wow~70G上市公司定期报告数据集!
  12. FrameExit:Conditional Early Exiting for Efficient Video Recognition
  13. 托业考试常遇到的科学论文词汇汇总
  14. 2020HYS-MISC-你觉得这个是什么文件
  15. 洛谷 P3014 [USACO11FEB]牛线Cow Line
  16. 源码分析 merge 标签减少布局层级的秘密(Android Q)
  17. 普元技术专家团作品大合集(2016年圣诞特辑)
  18. QCSPCChart for Java R3x0 Crack
  19. 多种方法使用GloVe
  20. C语言实现-杨辉三角(详解解析-知识点总结)

热门文章

  1. 信号完整性(SI)电源完整性(PI)学习笔记(七)电感的物理基础(二)
  2. 英特尔CEO帕特·基辛格:以独特优势抓住巨大的增长机遇
  3. 牛客1005 迷宫2
  4. 多状态布局《网络空白页》Two
  5. 【艾特】淘宝7月新规上线,这类商家要注意避坑
  6. 智能购物车,让线下购物更加便利
  7. Android中运行的错误:java.lang.UnsatisfiedLinkError
  8. 三亚年会 | 谢成鸿:与同路人共舞,要重视核心骨干的增长率
  9. 电信“商务领航” PK 网通“EPOWER”
  10. [推荐]在线照相大头贴功能