java基础一JVM之JRE、JDK、解释器、编译器详解

news2024/10/9 11:13:54

1.JVM、JRE和JDK区别

1.JVM( Java Virtual Machine ):
  • Java虚拟机,它是整个 Java 实现跨平台的最核心的部分,所有的 Java 程序会首先被编译为 .class 的类文件,这种类文件可以在虚拟机上执行,也就是说 class 并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。
  • JVM与java无关,JVM只与class文件格式有关,任何语言只要能编译成class文件格式,就能在JVM上执行
2.JRE(Java RunTime Environment )
  • 组成:虚拟机、java核心类库,是运行环境,不具备编译开发功能
  • 介绍:JRE是运行Java程序所必须环境的集合,包含JVM标准实现及 Java基本类库。它包括Java虚拟机、Java平台核心类和支持文件。它不包含开发工具(编译器、调试器等)。
3.JDK(Java Development Kit):
  • 组成部分:java程序语言设计、虚拟机、java类库,JDK是支持程序开发的最小环境。

  • 介绍:JDK是Java开发工具包,它提供了Java的开发环境(提供了编译器javac等工具,用于将java文件编译为class文件)和运行环境(提 供了JVM和Runtime辅助包,用于解析class文件使其得到运行)。如果你下载并安装了JDK,那么你不仅可以开发Java程序,也同时拥有了运行Java程序的平台。

    该图来自深入理解java虚拟机

区别:
  1. JVM不能单独执行.class文件,在解释class 的时候 JVM 需要调用解释所需要的类库lib。
  2. JRE有一个lib目录和bin目录,lib目录里面就是java类库(打成jar包),bin目录就是虚拟机,虚拟机在解释class文件时需要调用到lib目录中的java类库。(JRE=JVM+lib)
  3. JDK包含JRE和开发工具、编辑器等,通过JDK中的javac将.java文件编译成.class文件,交给JVM处理。

2.说说java编译过程

  1. .java源文件通过编译器(javac.exe)编译成.class文件
  2. JVM通过ClassLoader对.calss文件进行解释(自解码解释器和JIT即使编译器)—该过程需要调用核心类库

1

3.说说JVM内的解释器(Just In Time Compiler)和即时编译器(JIT)

  • 解释器和即时编译器(Just In Time Compiler,JIT)就是JVM中将字节码转化为机器码的工具。
  • 解释器: 解释器将字节码解析成集器能识别的机器码。解释方式是一行一行的读取,解释到哪就执行到哪。
  • 即使编译器:以方法为单位,将热点代码的字节码一次性转为机器码,并在本地缓存起来的工具。避免了部分代码被解释器逐行解释执行的效率问题。

什么是机器码

机器码就是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合。

热点代码指的是什么

  1. 多次被调用的代码
  2. 被多次执行的循环体

4.怎么判断方法是否就是热点代码

使用热点代码探测方法

  • 基于采样式的热点探测(Sample Based Hot Spot Detection)
  • 基于计数器的热点探测(Counter Based Hot Spot Detection):(1)方法调用计数器(Invocation Counter )回边计数器(Back Edge Counter )。

采样式的热点探测(Sample Based Hot Spot Detection)

虚拟机会周期性 对各个线程的栈顶进行检查,如果某些方法经常出现在栈顶,这个方法就是“热点代码”。

  • 优点:简单高效。

  • 缺点:容易受到线程阻塞或其他因素影响

方法调用计数器(Invocation Counter )

首先是方法调用计数器。Client 模式下默认阈值是 1500 次,在 Server 模式下是 10000次,这个阈值可以通过 -XX:CompileThreadhold 来人为设定。如果不做任何设置,方法调用计数器统计的并不是方法被调用的绝对次数,而是一个相对的执行频率,即一段时间之内的方法被调用的次数。当超过一定的时间限度,如果方法的调用次数仍然不足以让它提交给即时编译器编译,那么这个方法的调用计数器就会被减少一半,这个过程称为方法调用计数器热度的衰减(Counter Decay),而这段时间就成为此方法的统计的半衰周期( Counter Half Life Time)。进行热度衰减的动作是在虚拟机进行垃圾收集时顺便进行的,可以使用虚拟机参数 -XX:CounterHalfLifeTime 参数设置半衰周期的时间,单位是秒。整个 JIT 编译的交互过程如下图。

回边计数器(Back Edge Counter )

作用是统计一个方法中循环体代码执行的次数,在字节码中遇到控制流向后跳转的指令称为“回边”( Back Edge )。显然,建立回边计数器统计的目的就是为了触发 OSR 编译。关于这个计数器的阈值, HotSpot 提供了 -XX:BackEdgeThreshold 供用户设置,但是当前的虚拟机实际上使用了 -XX:OnStackReplacePercentage 来简介调整阈值。

5.解释器(Just In Time Compiler)和即时编译器(JIT)如何相互配合

  • 解释器:程序执行的时候,解释器首先发挥作用,省去了编译器编译时间,加快程序的执行焦虑
  • 编译器:在程序运行过程中,随着时间的推移,编译器就开始慢慢发挥了作用,把热点代码编译成本地代码后,以后执行相同的代码,即可直接获取,更高的执行效率。
  • 解释器和编译器相互配合,使程序高效执行。

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

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

相关文章

3.10-动态规划-01背包问题

问题描述,给定n种物品和一个背包。物品 i 的重量是 wi ,其价值为 vi ,背包的容量为 c ,问应该如何选择装入背包中的物品,使得装入背包的物品总价值最大? 写在前面 dp数组的含义--dp[i][j]表述容量为j 已经…

【计算机体系结构-03】ISA (Instruction Set Architecture) 指令集架构特性

1. 指令的类型 上一篇文章里主要介绍了几种机器模型,有机器模型后需要知道计算机有什么样的基本指令,接下来就来看看指令都有哪些类型。 [注]:以下指令主要为 MIPS 指令。 类型指令数据传输LD、ST、MFC1、MTC1、MFC0、MTC0计算ADD、SUB、AN…

Vue3和Vue2的slot-scope插槽用法

目录 🧨🧨🧨第一种插槽(匿名插槽) 🧨🧨🧨第二种插槽(具名插槽)以及插槽简写 具名插槽的使用 🧨🧨🧨第三种插槽(作用域插…

使用HTTP代理后,网速反而变慢是什么原因?

如今越来越多的人利用HTTP代理开展业务,但在实际使用时,经常会有用户发现使用了HTTP代理后,网速非但没有变快,反而还更慢了。我们今天就来说说,这是什么原因造成的,从根本入手对于我们能更有利的解决问题。…

2.Spring IOC

目录 一.如何进行注册 二、如何进行注入 三、扫描注解的原理 反射文件操作 四、什么是IOC/DI? 五、演示使用Spring开发的案例:用户管理|登陆、注册 五、常见错误总结 1、注解使用Repository 2、UserController的构造方法注入: 3、…

【FreeRTOS】第一章:介绍

FreeRTOS是什么? Free和RTOS,Free就是免费的、自由的意思,RTOS 全称是 Real Time Operating System。中文名就是实时操作系统。可以看出FreeROTS 就是一个免费的 RTOS 类系统。这里要注意,RTOS 不是指某一个确定的系统,而是指一类…

联想电脑安装ubuntu18.04双系统超详细教程(23年最新教程,99%成功率)

文章目录前言电脑配置制作系统盘安装ubuntu系统更新显卡驱动安装wifi驱动完成前言 ubtuntu的长期支持版本现在应该已经出道21.04版本了,如果你对于版本没有要求的话,建议直接安装最新版ubuntu,因为新版的系统驱动都会进行更新,也…

自学 Java 怎么入门?

玩Java多年的老司机带你上车全面系统学习Java,并且还能教你如何学习才能在今年拿到一份不错的offer。 说到系统全面,就是以目前绝大部分公司招聘要求的知识内容为基准,毕竟我们学习Java都是为了高薪工作,《史记》中说”天下熙熙皆…

2.【SpringBoot源码】SpringBoot核心启动流程

目录 一、简介 二、创建SpringApplication对象 1)、推导出当前启动的项目的类型 2)、设置Initializer初始化器 3)、初始化Listener监听器 4)、反推出main方法所在的Class对象 三、运行SpringApplication#run(java.lang.String...)方法 1)、获取运行监听器 2)、发布…

unity使用对象池实现冲锋留下的残影效果

目录 效果展示 实现思路 残影代码 对象池代码 控制冲刺产生残影 CD冷却图标 效果展示 实现思路 对象池,有想要用的物体时可以从池子里取,用完再放回去。 因为在生成残影再销毁,这个过程中创建和销毁都需要耗费大量资源,因此…

shell 条件测试详解

目录 shell条件测试 一,条件测试的基本语法 1,test 2,[ ] 3,[[ ]] 二,文件测试表达式 1,判断目录是否存在: 2,判断文件file1是否有写的权限,结果为有 3&#xf…

重学MySQL基础(一)

文章目录重学MySQL基础(一)MySQL 连接管理MySQL字符编码InnoDB 记录存储结构InnoDB 表的主键生成策略:InnoDB 数据页结构页目录页的效验和索引事务报错记录在MySQL中创建函数时出现这种错误恶补SQL语句SQL中的条件语句SQL中的字符串函数SQL中…

python调用go语言踩坑记录

目录 基本操作 1 在go文件中加注释,设置为导出方法,导出C依赖 2 导出so文件(mac或者linux下只需要so) 3 进行调用 报错记录 踩坑1 关于结构体 2 cannot use (_Cfunc_CString)("12345") (value of type *_Ctype_char) as ty…

spring中事务失效场景

文章目录spring中事务失效场景一、权限访问问题二、方法用final修饰三、无事务嵌套有事务的方法四、没有被spring管理五、设计的表不支持事务六、没有开启事务七、错误的事务传播八、自己捕获了异常九、手动抛出别的异常十、自定义回滚异常spring中事务失效场景 一、权限访问问…

软件研发管理经验总结 - 事务管理

软件研发管理经验总结 - 事务管理 相关系列文章 软件产品研发管理经验总结-管理细分 软件研发管理经验总结 - 事务管理 目录软件研发管理经验总结 - 事务管理一、概述二、事务管理过程1、制定开发计划2、启动会议3、阅读前一天的日报4、例会/早会5、调整计划6、协调资源7、日报…

LeetCode——2325. 解密消息

一、题目 给你字符串 key 和 message ,分别表示一个加密密钥和一段加密消息。解密 message 的步骤如下: 使用 key 中 26 个英文小写字母第一次出现的顺序作为替换表中的字母 顺序 。 将替换表与普通英文字母表对齐,形成对照表。 按照对照表…

vue全家桶(三)前端路由

vue全家桶(三)前端路由1.路由的概念1.1路由1.2vue Router2.vue-router的基本使用步骤2.1基本使用步骤2.2路由重定向3.vue-router的嵌套路由用法3.1嵌套路由的用法4.vue-router动态路由匹配用法5.vue-router命名路由用法6.vue-router编程式导航用法6.1 页…

06 Sentinel控制台规则配置讲解 (2)

1、实时监控 监控接口的通过的QPS和拒绝的QPS 2、簇点链路 用来显示微服务的所监控的API 3、流控规则 流量控制(flow control),其原理是监控应用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对流量进行控制,以…

源于《C陷阱与缺陷》----研究程序死循环问题

本题来源于《C陷阱与缺陷》这本书,从本质上讲解程序死循环的原因,关键在于栈的空间使用方式。研究程序死循环的原因死循环的原因是什么呢?解决方法总结研究程序死循环的原因 题目1: 在VS2019 X86环境下测试: int mai…

Linux服务器怎么设置iptables防火墙?

当今,为避免香港服务器及其端口受到恶意入侵,保障香港服务器的安全,配置Linux服务器防火墙的重要性不言而喻。恒创科技将向您介绍如何在 CentOS、Ubuntu 和 Debian 服务器中安装和配置 iptables防火墙。iptables是一个简单的防火墙&#xff0…