• java
  • go
  • 数据库
  • linux
  • 中间件
  • 书
  • 源码
  • 夕拾

  • java
  • go
  • 数据库
  • linux
  • 中间件
  • 书
  • 源码
  • 夕拾

【第四部分】程序编译与代码优化

目录

  • 目录
  • 前端编译与优化
    • javac编译器
    • 语法糖
      • 泛型
  • 后端编译与优化
    • 即时编译器
      • 解释器与编译器
      • 编译对象与触发条件
    • 提前编译
      • 提前编译得优劣

前端编译与优化

javac编译器

javac是java编写的

流程:

  1. 词法语法分析
  2. 符号填充

语法糖

泛型

  1. 类型擦除
  2. 具现化实现

java采用类型擦除的方式,也即导致了一系列问题,包含性能问题使用问题等…

  1. 无法使用泛型创建对象
  2. 重载时,List<String>与List<Integer>视作同样的参数
  3. 不支持基础类型

后端编译与优化

即时编译器

目前主流的两款商用Java虚拟机(HotSpot、 OpenJ9) 里, Java程序最初都是通过解释器(Interpreter) 进行解释执行的, 当虚拟机发现某个方法或代码块的运行特别频繁, 就会把这些代码认定为“热点代码”(Hot Spot Code) , 为了提高热点代码的执行效率, 在运行时, 虚拟机将会把这些代码编译成本地机器码, 并以各种手段尽可能地进行代码优化, 运行时完成这个任务的后端编译器被称为即时编译器。

解释器与编译器

程序需要迅速启动和执行,解释器可以首先发挥作用,省去编译时间.立即运行.程序启动后,随着时间推移,编译器发挥作用,把越来越多得代码编译成本地代码,减少解释器中间得消耗,获得更高得效率.当程序运行环境内存受到限制比较大,使用解释器执行,可以节约内存.反之使用编译器提升效率

编译对象与触发条件

热点代码:被多次调用的方法,被多次执行得循环体.

提前编译

提前编译得优劣

即时编译消耗的时间都是原本可用于程序运行的时间, 消耗的运算资源都是原本可用于程序运行的资源, 这个约束从未减弱, 更不会消失, 始终是悬在即时编译头顶的达摩克利斯之剑。

给即时编译器做缓存加速, 去改善Java程序的启动时间, 以及需要一段时间预热后才能到达最高性能的问题。 这种提前编译被称为动态提前编译(DynamicAOT) 或者索性就大大方方地直接叫即时编译缓存(JIT Caching) 。

【第二部分】自动内存管理-虚拟机性能监控、故障处理工具
拾遗
  1. 1. 目录
  2. 2. 前端编译与优化
    1. 2.1. javac编译器
    2. 2.2. 语法糖
      1. 2.2.1. 泛型
  3. 3. 后端编译与优化
    1. 3.1. 即时编译器
      1. 3.1.1. 解释器与编译器
      2. 3.1.2. 编译对象与触发条件
    2. 3.2. 提前编译
      1. 3.2.1. 提前编译得优劣
© 2023 haoxp
Hexo theme