jit 和 jvm

如您所知,JVM(Java Virtusal Machine)使Java能够遵循“一次写入,随处运行”的范例。 JVM的核心包括以下组件:

  • 叠放
  • PermGen和方法区域
  • JIT编译器
  • 代码缓存

堆是在应用程序代码开发阶段为您使用的每个新运算符分配内存的位置。 堆栈将存储您将在方法范围内分配的局部变量。 需要注意的一件事是,在方法范围内定义的变量将在方法完成后删除。 例如,如果在方法范围内分配了字符串,并且保证其范围属于本地范围,则该字符串将存储在堆栈中,否则将在堆中分配。

PermGen空间将存储类和方法级别的数据以及在应用程序中定义的静态变量。 方法区域实际上是PermGen空间内的区域,它将存储您的应用程序的所有方法,字段,恒定池级别的详细信息。

JIT编译器和代码缓存并存。 JVM的核心是在运行时将Java字节码解释为汇编代码。 解释可能是一个缓慢的过程,因为每次执行部分应用程序代码时,都需要在运行时将代码从字节码转换为机器码。 这就是JIT编译器起作用的地方,它的方法超级棒,然后将其存储在代码缓存中。

JIT编译器在运行时分析应用程序代码,以了解哪些方法可以归类为热门方法。 在这种情况下很热,这意味着代码片段的访问频率更高。 在很高的层次上,JIT编译器所做的是为每个执行的方法都有一个计数器,以了解其使用频率。 当计数器达到定义的阈值时,该方法将有资格由JIT编译器编译为其相应的汇编代码,然后将其存储在代码缓存中。 现在发生的事情是,每当JIT编译器遇到对那些已编译并存储在代码缓存中的方法的调用时,它将不再尝试再次解释它们,而是将使用代码缓存内可用的已编译汇编代码。 这可以提高应用程序的性能,因为使用编译后的代码比在运行时对其进行解释要快得多。

在谈论JIT编译器时,主要有两种风格,由于缺乏相关文档,我们几乎忽略了它们。 这两种类型是:

  • 客户
  • 服务器

使用的默认编译器将根据您所运行的计算机体系结构和JVM版本(32位或64位)而有所不同。 让我们简要地看看每个人的工作。

客户端编译器在应用程序启动时开始将字节代码编译为汇编代码。 这间接意味着您的应用程序的启动时间将大大缩短。 但是,这带来的主要缺点是代码缓存将更快地耗尽内存。 只有在您的应用程序运行了很短的时间后,才能进行大多数优化。 但是由于客户端编译器已经占用了代码缓存空间,因此您将没有空间来存储用于这些优化的汇编代码。 这就是服务器缓存出色的地方。

与客户端编译器不同,服务器编译器不会在应用程序启动时开始编译。 它将允许应用程序代码运行一段时间(通常称为预热期),此后它将开始将字节码编译为汇编代码,然后将其存储在代码缓存中。

在我的下一篇文章中,我将讨论如何真正混合和匹配客户端和服务器编译,并向您介绍一些我们很少遇到但对于提高应用程序性能至关重要的JVM标志。

翻译自: https://www.javacodegeeks.com/2014/06/a-little-bit-on-the-jvm-and-jit.html

jit 和 jvm

jit 和 jvm_关于JVM和JIT的一点点相关推荐

  1. JRE、JDK、JVM、Jit

    今天我们来聊一聊关于JRE.JDK.JVM.Jit他们之间的关系. JRE JRE(Java Runtime Enviroment)是Java的运行环境.面向Java程序的使用者,而不是开发者.如果你 ...

  2. jvm与jit编译器的区别_了解jvm和jit编译器的第1部分

    jvm与jit编译器的区别 Hello people!! 大家好!! I can see that the Java community is growing a lot but there are ...

  3. php的JIT特性,PHP8新特性之JIT简介

    PHP8 alpha1已经在昨天发布,相信关于JIT是大家最关心的,它到底怎么用,有什么要注意的,以及性能提升到底咋样? 首先,我们来看一张图: 左图是 PHP 8之前的Opcache流程示意图, 右 ...

  4. php的jit,PHP8.0新特性:JIT即时编译

    JIT编译原理 一.查看JIT编译原理图 二.Zend Opcache作用 1.检查opcodes是否缓存 2.zend compiler编译器进行编译生成opcodes 3.optimizer优化器 ...

  5. 小师妹学JVM之:JIT中的PrintAssembly

    文章目录 简介 使用PrintAssembly 输出过滤 总结 简介 想不想了解JVM最最底层的运行机制?想不想从本质上理解java代码的执行过程?想不想对你的代码进行进一步的优化和性能提升? 如果你 ...

  6. 小师妹学JVM之:JIT中的PrintCompilation

    文章目录 简介 PrintCompilation 分析PrintCompilation的结果 总结 简介 上篇文章我们讲到了JIT中的LogCompilation,将编译的日志都收集起来,存到日志文件 ...

  7. 小师妹学JVM之:JIT中的LogCompilation

    文章目录 简介 LogCompilation简介 LogCompilation的使用 解析LogCompilation文件 总结 简介 我们知道在JVM中为了加快编译速度,引入了JIT即时编译的功能. ...

  8. JDK,JRE,JVM,JIT

    jdk是java的开发工具包(Java development kit). jre是java的运行环境(Java run-time). jvm则是让java能够在任何平台运行的虚拟机(Java vir ...

  9. 关于JVM和JIT的一点点

    如您所知,JVM(Java Virtusal Machine)使Java能够遵循"一次写入,随处运行"的范例. JVM的核心包括以下组件: 堆 堆 PermGen和方法区域 JIT ...

最新文章

  1. html的编辑器有几种,各种系统下HTML用哪种编辑器
  2. 解决IDEA快捷键 Alt+Insert 失效的问题
  3. 搜索引擎核心技术与算法 —— 倒排索引初体验
  4. Java基础:值传递
  5. jQuery图片水平滑动延迟加载动画
  6. mysql定时event创建每隔一天_mysql用event设置定时任务
  7. 洛谷P1238 走迷宫
  8. Queue与生产者消费者模型
  9. DCEP | 农行将上线数字人民币刷脸支付
  10. 密码生成器c语言程序,C++全密码生成的实现代码
  11. Python电影售票系统
  12. ios 集成阿里云推送通知的注意点
  13. stm32f4产生100k正弦波_STM32_DAC 实验(正弦波_方波_锯齿波_发生器)
  14. 2019未来科学大奖周盛大开幕 百格活动倾情助力
  15. 计算机windows10怎么找word,Win10 word路径在哪?Win10如何修改word路径
  16. cesium两种方式鼠标移入移出实体显示提示框
  17. 自动化测试 - 12306火车票网站自动登录工具
  18. 使用HBase Coprocessor协处理器
  19. TensorFlow入门教程(16)分离歌曲中的人声和背景音乐
  20. 老款诺基亚6 android 8,行动迅速!诺基亚为Nokia 6/7推送安卓8.0

热门文章

  1. 【最短路】【SPFA】电车 (luogu 1346)
  2. 【动态规划】最大子矩阵之和
  3. 24、mysql连接线程的show和kill
  4. SpringCloud Ribbon(二)之自定义负载均衡策略IRule
  5. 彻底理解JVM常考题之分级引用模型
  6. Mybatis简介与原理
  7. Oracle入门(三A)之sqlplus
  8. Java开发必须掌握的日志分析命令
  9. JAVA面试常考系列九
  10. 让java的多重继承成为现实!