java是编译型语言还是解释型语言?

news2024/11/13 22:49:32

基本概念

  1. 什么是编译型语言?编译型语言的首先将源代码编译生成机器语言,再由机器运行机器码(二进制),比如C和C++.
    编译型语言:程序在执行之前需要一个专门的编译过程,把程序编译成 为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。
  2. 什么是解释型语言?解释性语言编写的程序不进行预先编译,以文本方式存储程序代码。在发布程序时,看起来省了道编译工序。但是,在运行程序的时候,解释性语言必须先解释再运行。

要知道java到底是编译型语言还是解释型语言,就要理清楚java源代码文件(.java)到机器码的整个过程。

源代码文件的旅行

  1. 程序员编写的java代码就是源代码,格式为.java。
  2. 经过了javac(正常是IDE自动编译的)编译后,就是class文件,也叫字节码(bytecode)文件,格式是.class,当打开class文件会发现内容如下:
    首先是二进制文件,其次是以16进制表示的
    字节码文件本质是二进制文件,只是以16进制表示。
  3. jvm上场,jvm有JIT(即时编译器),AOT(提前编译器),还有解释器。
  • AOT可以把字节码文件在运行之前提前编译为二进制的本地机器码(计算机的机器码)
  • JIT可以在运行期间把热点代码编译为本地机器码。
  • 解释器可以一边解析字节码文件一边编译为本地机器码执行。

正常情况下,是解释器和JIT配合,当然也可以AOT,或者只有AOT也可以,常用的HotSpot是解释器和JIT配合,可以配置AOT。

总结

从概念和java文件的旅行中我们可以得出以下结果:

  1. Java文件编译成字节码文件(二进制)就是编译过程,是编译型语言。(jvm也是一种机器,字节码就是jvm的机器码)
  2. 字节码文件一边解析一边执行的过程就是解释过程,是一种解释型语言。
  3. 字节码文件通过AOT提前编译成本地机器码的过程,是一种编译型语言。
  4. JIT是在运行期起作用的,不是执行之前,可以看做解释过程的优化。

由于通常用的是HotSpot虚拟机,并且基本是解释器都有使用,所以我们通常说java即是编译型又是解释型语言。例外:三大虚拟机之一的JRockit,没有解释器,所以对它来说,java是编译型语言。

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

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

相关文章

mysql一explain结果分析

1. EXPLAIN简介 使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。 ➤ 通过EXPLAIN,我们可以分析出以下结果: 表的读取顺序数据读取操作的操作类型哪些索引可…

【LeetCode】背包问题总结

文章目录一、背包能否装满?416. 分割等和子集1049. 最后一块石头的重量 II二、装满背包有几种方法?494. 目标和518.零钱兑换II377. 组合总和 Ⅳ70. 爬楼梯三、背包装满的最大价值474.一和零四、装满背包最小物品数322. 零钱兑换279.完全平方数一、背包能…

win10+python3.6+cuda9+pytorch1.1.0安装

为了让torch可以使用显卡GPU加速,需要安装对应版本的cudatoolkit和pytorch。这里我的nvidia显卡驱动是9.1版本,只能安装cudatoolkit9。 一般支持gpu加速的显卡大部分都是英伟达nvidia系列,都自带了nvidia驱动,所以不需要安装nvidi…

一次失败的面试经历:我只想找个工作,你却用面试题羞辱我!

金三银四近在咫尺,即将又是一波求职月,面对跳槽的高峰期,很多软件测试人员都希望能拿一个满意的高薪offer,但是随着招聘职位的不断增多,面试的难度也随之加大,而面试官更是会择优录取小王最近为面试已经焦头…

大数据处理学习笔记1.7 Scala类与对象

文章目录零、本节学习目标一、类(一)类的定义(二)类的实例化二、单例对象(一)单例对象概念(二)案例演示三、伴生对象(一)伴生对象概念(二&#xf…

C++ vector学习与使用

本文皆在vs2015下运行,操作系统不一样结果可能有出入1.vector的介绍及使用1.1 vector的介绍string:动态类型的顺序表,只能存储charvector:动态类型的顺序表,任意类型的元素都可以存储endofstorage表示vector底层空间的…

Java_面向对象

Java_面向对象 1.面向对象概述 ​ 面向对象是一种符合人类思想习惯的编程思想。显示生活中存在各种形态的不同事物,这些食物存在着各种各样的联系。在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的关系,这种思想就是面…

如何使用码匠连接 Redis

目录 在码匠中集成 Redis 在码匠中使用 Redis 关于码匠 Redis 是由 Salvatore Sanfilippo 用 C 语言开发的一款开源的、高性能的键值对存储数据库,它采用 BSD 协议,为了适应不同场景下的存储需求,提供了多种键值数据类型。到目前为止&…

汇川AM402和上位机C#ModebusTcp通讯

目录 一、测试任务 二、测试环境 三、PLC工程 1、组态配置 2、ip地址、端口号 3、全局变量定义 四、C#端Winform程序创建 1创建主界面 2、创建子窗口 3、运行生成,界面效果 4、Modebus协议说明 5、Modebus操作说明 六、测试 1、寄存器读测试 2、MW1300寄…

软件著作权登记申请表填错之后如何修改?软著登记官费有没有续费或年费?软件登记常见问题汇总

什么是计算机软件? 计算机软件是指计算机程序及其有关文档。计算机程序是指能实现一定功能的代码化指令序列,或者符号化语句序列。文档指用来描述程序的内容、组成、设计、功能规格、开发情况、测试结果及使用方法的文字资料和图表,如程序设…

centos7如何远程连接Navicat数据库?

1、登录centos7,启动mysql服务 [rootlocalhost ~]# systemctl start mysqld 2、设置mysql服务开机自启 [rootlocalhost ~]# systemctl enable mysqld [rootlocalhost ~]# systemctl daemon-reload 3、查看mysql服务状态 4、若未更改初始密码,若已更改…

4.基于Label studio的训练数据标注指南:情感分析任务观点词抽取、属性抽取

情感分析任务Label Studio使用指南 1.基于Label studio的训练数据标注指南:信息抽取(实体关系抽取)、文本分类等 2.基于Label studio的训练数据标注指南:(智能文档)文档抽取任务、PDF、表格、图片抽取标注等…

网络协议(九):应用层(域名、DNS、DHCP)

网络协议系列文章 网络协议(一):基本概念、计算机之间的连接方式 网络协议(二):MAC地址、IP地址、子网掩码、子网和超网 网络协议(三):路由器原理及数据包传输过程 网络协议(四):网络分类、ISP、上网方式、公网私网、NAT 网络…

听说你没法在 JRE 中使用 arthas?不,你可以

作者:卜比 本文是《容器中的 Java》系列文章之 5/n ,欢迎关注后续连载 😃 。 JVM如何获取当前容器的资源限制?——容器中的Java 1Java Agent踩坑之appendToSystemClassLoaderSearch问题——容器中的Java 2让 Java Agent 在 Drag…

SEO 如何提升网站权重?

关于SEO如何提高网站权重,米贸搜整理了以下内容,希望对大家有所帮助:1. 网站不能都使用收藏。有些站长,在网站上线之前,没有充分考虑,没有很好地定位网站,网站内容的来源从哪里来,就…

全网最详细的软件测试基础知识概述(绝密),一般人我不告诉他

目录 1、什么是软件 2、软件工程的内容 3、软件的生命周期 4、什么是软件测试 5、软件测试的方法 6、软件测试阶段有哪些任务 7、测试的原则 8、软件测试工作流程图 9、自动化测试 10、自动化测试的过程 11、自动化测试的优点 12、自动化测试技术 13、自动化测试的…

EasyExcel 实现写入多个sheet数据进excel模板并下载

目录说明说明 场景说明:对数据库或者其他数据源读取获取到数据,需要写入到excel完成下载功能,其中一个sheet是固定模板,只需要填充值,另一个sheet是动态的表头和数据需要填充。模板如下图,模板提前放在项目…

【简单DP】Children’s Queue

哈哈,独立做出来了,不错感觉这种暴力DP还是很好做的Problem - 1297 (hdu.edu.cn)题意:思路:写了这么多DP,我认识到DP的状态设计是最难的首先看阶段,就是第i个人然后影响决策的因素就是,女生不能…

【docker mysql】docker 快速安装mysql和redis

docker_hub 官网:点击docker_hub仓库地址 docker run --name mysql-bear -p 3307:3306 -e MYSQL_ROOT_PASSWORDmysql-bear -d mysql:latestdocker run --name redis-bear -p 6479:6379 -d redis再次使用docker ps 命令查看即可。 我这里把端口映射到主机上了&…

【Axure教程】橡皮擦的擦除效果——刮奖原型

橡皮擦的擦除效果是系统常见的效果,在可以画图编辑的系统中或者是在抽奖刮奖的系统中非常常见。所以今天和大家分享在Axure中如何制作橡皮刷的效果,我们会议刮奖原型为案例,教大家制作出一个刮奖效果的高保真原型模板。一、效果展示1、鼠标移…