jit 和 jvm_关于JVM和JIT的一点点

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340931.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

voxelnet_ue4商城资源Voxel Sandbox Toolkit体素沙盒工具箱

Unreal Engine虚幻游戏引擎素材资源 Unreal Engine Marketplace –Voxel Sandbox Toolkit体素沙盒工具箱体素沙盒工具箱是一个新的改进版本的体素生成从2016年适应4.22的需要。它用不同类型的立方体、树和拾取网格生成无限世界。因为额外的代码实现比以前的版本快得多。理想的创…

Pub / Sub本地模拟器

发布/订阅是GCP提供的不错的工具。 它非常方便,可以帮助您解决应用程序可能面临的消息传递难题。 实际上,如果您使用GCP,则可以使用托管消息解决方案。 如预期的那样,使用实际的发布/订阅解决方案需要一定的配额,因此…

mysql 写入随机字中文符_MySQL产生随机字符

MySQL产生随机字符UUID简介UUID含义是通用唯一识别码 (Universally Unique Identifier),这是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部份…

mysql建表时外检怎么创建_MySQL创建表时加入的约束以及外键约束的的意义

1,创建表时加入的约束a) 非空约束,not nullb) 唯一约束,uniquec) 主键约束,primary keyd) 外键约束,foreign key1,非空约束,针对某个字段设置其值不为空,如:学生的姓名不…

minecraft_MineCraft和堆外内存

minecraft总览 MineCraft是一个很好的例子,说明何时使用堆外内存确实可以提供帮助。 关键要求是: 保留的数据大部分是一个简单的数据结构(在Minecraft的情况下,其很多字节[]) 堆外内存的使用可以隐藏在抽象中。 考试…

win2008 mysql_mysql5.7.17在win2008R2的64位系统安装与配置实例

脚本之家已经给大家讲解过MYSQL其他版本在各种环境中的安装过程,大家可以参阅正文下面的相关文章,今天一起来学习下mysql5.7.17的实例安装教学,配置上稍微不同,希望能够帮助到你。安装MySql操作系统:Windows Server 20…

结构性错误

团队成员在使用以下代码时遇到了麻烦: void extractData(String targetUri) { Path tempFile createTempFilePath(); extractDataToPathAndUpload(tempFile, targetUri); cleanUp(tempFile); } void extractDataToPathAndUpload(Path tempFile, String targetUr…

mysql小计_使用SQL实现小计,合计以及排序_MySQL

bitsCN.com--说明:个人学习笔记,实现小计合计显示,分组按BANK_IDOP_DATE升序排序--测试数据CREATE TABLE #TB(ID VARCHAR(10),BANK_ID VARCHAR(10),OP_DATE VARCHAR(10),OPERATOR_NO VARCHAR(20),AMT DECIMAL(10,2))INSERT #TB SELECT 1111,0…

mysql函数封装_PHP访问MYSQL数据库封装类(附函数说明)

/*MYSQL 数据库访问封装类MYSQL 数据访问方式,php4支持以mysql_开头的过程访问方式,php5开始支持以mysqli_开头的过程和mysqli面向对象访问方式,本封装类以mysql_封装数据访问的一般流程:1,连接数据库 mysql_connect or mysql_pco…

mule和activemq_Mule ESB,ActiveMQ和DLQ

mule和activemq在本文中,我将展示一个简单的Mule ESB流程,以了解实际中使用的Active MQ 的DLQ功能 。 我假设您有一个正在运行的Apache ActiveMQ实例(如果没有,则可以在此处下载一个版本)。 在此示例中,我…

MySQL倒序如何避免filesort_如何避免mysql查询的filesort?

我用不同的参数使用这种查询:EXPLAIN SELECT SQL_NO_CACHE ilan_genel.id , ilan_genel.durum , ilan_genel.kategori , ilan_genel.tip , ilan_genel.ozellik , ilan_genel.m2 , ilan_genel.fiyat , ilan_genel.baslik , ilan_genel.ilce , ilan_genel.parabirimi …

在Java中键入Safe SQL

字符串,字符串,字符串 无论您使用的是JPA , MyBatis还是Spring Data JDBC之类的框架,最终都将SQL语句声明为Java String。 这种方法的问题在于,您必须为每个语句编写测试,以确保它甚至是有效的SQL。 没有编…

springmvc怎么设置更改了界面不用重启_Microsoft Visual Studio 2019 更改语言包

第一次写文章,如有格式等问题,请多多包含与指点!很多人在编程时更喜欢英文界面,认为与编程语言具有相同的语境,更顺手。但是,在更改环境显示语言时,可能会遇到一些障碍,例如我之前在…

苹果电脑怎么删除软件_误格式化,删除文件怎么恢复?3款最好用的数据恢复软件推荐...

1、EasyRecovery一款威力非常强大的硬盘数据恢复工具,能够恢复丢失的数据以及重建文件系统。主要体现在可以从被病毒破坏或是已经格式化的硬盘中恢复数据。EasyRecovery在使用过程中不会在原始的驱动器中写入任何东西,其主要是在内存中重建文件分区表使数…

设计模式 生成器_生成器设计模式的应用

设计模式 生成器嗨,您好! 今天,我将分享我制作的全新设计模式系列的第一个。 构建器设计模式是开发严肃的应用程序时非常有用且通用的模式。 在这篇文章中,我将提供一个很小的构建器模式框架,因此您随时可以回到这里并…

mysql增加sort_buffer_设置sort_buffer_size

sort_buffer_sizemysql> show variables like ‘%sort_buffer_size%’;————————-———| Variable_name | Value |————————-———| innodb_sort_buffer_size | 1048576 || myisam_sort_buffer_size | 8388608 || sort_buffer_size | 262144 |———————…

先发帖

通常,我们编写代码来计算出一堆可用的答案。 让我们看看Java中的情况。 public Widget getAppropriateWidget(CustomerRequest request) { if (shelfstock.contains(request.getBarcode()) { return new ShelfWidget(); } if (backroomStock.contains(request.getBa…

C++ Qt全局异常处理器_QT教程

点击上方 蓝字关注我们今日资源今天的资源是另一套QT教程,某马发的,网上搜集到的。这已经是这个公众号发放的第三套QT教程了。关于QT:Qt(官方发音 [kju:t],音同 cute)是一个跨平台的 C 开发库,主要用来开发图形用户界面…

inputdstream mysql_【sparkStreaming】将DStream保存在MySQL

package SparkDemoimport java.sql.{Connection, DriverManager, PreparedStatement}import org.apache.spark.SparkConfimport org.apache.spark.streaming.{Seconds, StreamingContext}object DStreamToMySQL {//定义更新函数def updateFunc(newValues : Seq[Int],state :Opt…

无线设置 用户_无线WiFi远距离无线蹭网怎么中继桥接组网【详细介绍】

自从小编每天分享各种各样的无线无线WiFi蹭网、桥接、远距离组网等实例,吸引了很多朋友的兴趣,有很多网友通过关心我后,给我私信,求助我一些相关的问题,还有一些朋友建议我出一些教程。首先小编觉得有些东西只能意会不…