小谈JVM及JITITeye - AG环亚娱乐集团

小谈JVM及JITITeye

2019-01-13 23:04:58 | 作者: 醉波 | 标签: 代码,办法,运用 | 浏览: 2012

你或许也知道,正是JVM( Java Virtusal Machine,Java虚拟机)使得Java成为遵从“一次编写,处处运转”的典范。JVM包含如下中心组件:
堆 栈 耐久代及办法区 JIT编译器 代码缓存
堆是你的运用程序代码中new操作符分配内存的当地。栈存储的是你在某个办法效果域内要进行赋值的那些本地变量。有一点需求留意的是,办法效果域内所界说的变量在办法完毕后将会被删去。比如说,一个String变量在办法内被赋值了,它的效果域是本地效果域,那么它将会被存储到栈里,而给它所赋的值则是存储在堆中。

耐久代空间是用来存储类及办法的数据以及运用程序中界说的静态变量。办法区其实就是耐久代空间中的一块区域,它将会存储一切的办法,字段,常量池的具体数据。

JIT编译器和代码缓存密不可分。JVM中心会在运转时将Java字节码解说成汇编代码。这个解说的进程是十分缓慢的,因为每次履行你的运用程序的代码时都需求将字节码转化成机器代码。这就是JIT编译器发挥效果的当地了,它会将办法编译好然后存储到代码缓存中。

JIT编译器会在运转时剖析运用程序的代码,来识别出哪些办法能够归类为热办法。在这里热办法意味着代码段会被频频地拜访。JIT编译器给每个办法都分配一个计数器,以便计算它们的运用频率。当计数器到达预界说的阈值时,这个办法会被JIT编译器编译成对应的汇编代码,然后存储到代码缓存中。现在,当JIT需求再调用这些现已被编译好并存储到代码缓存中的办法时,它不必再去解说履行了,而是能够运用代码缓存中已编译好的汇编代码。这能提高你的运用程序的履行功率,因为运用编译好的代码要比运转时去解说要快得多。

当提及JIT编译器时,因为短少相关的文档,有两个首要的要素咱们大多数人或许都不太了解。它们别离是:
Client Server

默许运用哪个编译器取决于对应程序运转的机器的体系结构以及JVM的版别(32位仍是64位的)。咱们来看下它们别离有什么效果。

客户端编译器在运用发动的时分就会将你的字节码编译成汇编代码。这直接意味着会添加你的运用程序的发动时刻。不过它最大的缺陷在于你的代码缓存或许很快就会用光你的内存。许多优化只要当你的程序运转了一段时刻才能够进行。不过因为客户端编译器现已占用了代码缓存的空间,你或许没有当地去存储这些优化后的汇编代码了。这就是服务端编译器要胜出的当地。

服务端编译器不像客户端编译器那样,它不会在运用发动的时分就编译代码。它会让运用程序的代码运转一段时刻(这也被称为预热阶段),然后它才会开端将字节码编译成汇编代码,终究将它们存储到代码缓存里。

我的下一篇文章将会评论怎么能够将客户端及服务端编译给结合起来,一起还将介绍几个很少用到的JVM参数,但它们对提高运用的功能至关重要。



原创文章转载请注明出处:http://it.deepinmind.com



英文原文链接

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表AG环亚娱乐集团立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章