jit编译原理
2024-10-19 02:50:22
jit用以把程序全部或部分翻译成本地机器码,当需要装载某个类【通常是创建第一个对象时】,编译器会先找到其.class文件,然后将该类的字节码装入内存。
hotspot采用惰性评估法:
如果一段代码频繁的调用方法,或是一个循环,也就是这段代码被多次执行,JIT编译器会参与其中
而如果一个方法从来不被执行,则不会经过JIT编译
寄存器和主存
其中一个最重要的优化策略是编译器可以决定何时从主存取值,何时向寄存器存值。考虑下面这段代码:
清单 1. 主存 or 寄存器测试代码
1
2
3
4
5
6
7
8
9
|
public class RegisterTest { private int sum; public void calculateSum(int n) { for (int i = 0; i < n; ++i) { sum += i; } } } |
在某些时刻,sum 变量居于主存之中,但是从主存中检索值是开销很大的操作,需要多次循环才可以完成操作。正如上面的例子,如果循环的每一次都是从主存取值,性能是非常低的。相反,编译器加载一个寄存器给 sum 并赋予其初始值,利用寄存器里的值来执行循环,并将最终的结果从寄存器返回给主存。这样的优化策略则是非常高效的。但是线程的同步对于这种操作来说是至关重要的,因为一个线程无法得知另一个线程所使用的寄存器里变量的值,线程同步可以很好的解决这一问题,有关于线程同步的知识,我们将在后续文章中进行讲解。
寄存器的使用是编译器的一个非常普遍的优化
最新文章
- Javascript学习之无缝滚动
- T4模版基础例子
- (三)play之yabe项目【数据模型】
- python编码:gbk编码与解码
- Flask框架获取用户IP地址的方法
- TFS服务器(微软源代码管理服务器)上彻底删除项目
- python爬虫之採集——360联想词W2版本号
- Delphi下实现全屏快速找图找色
- Unity 编辑器扩展自定义窗体
- 使用HttpGet请求json数据
- jquery 倒计时
- Jenkins的安装及使用(一)
- java基础---->;使用Itext生成数据库文档
- 访问php网站报500错误时显示错误显示
- LINUX 笔记5
- UNIX环境高级编程 第13章 守护进程
- 使用jquery触发a标签跳转
- 编写高质量代码改善C#程序的157个建议——建议152:最少,甚至是不要注释
- [转] linux nc命令
- centos7安装uwsgi报错
热门文章
- pthread 互斥量
- 树莓派搭建seafile服务器备忘
- PyQt(Python+Qt)学习随笔:Qt Designer中主窗口对象unifiedTitleAndToolBarOnMac属性
- CobaltStrike3.14&;3.8安装&;中文乱码解决
- bugkuctf 这 是 一 个 神 奇 的 登 录 界 面
- centos7 yum搭建lamp
- 部署基于.netcore5.0的ABP框架后台Api服务端,以及使用Nginx部署Vue+Element前端应用
- 深入理解Java虚拟机(三)——垃圾回收策略
- python命名切片
- Angular:惰性加载的模块