Java面试必考:什么是字节码?采用字节码的好处?

于哥你好,最近在java面试中被问答到什么是字节码?采用字节码的好处是什么?瞬间懵了,如果你连这个都不知道,我保证你面试GG!

首先说下Java的优势

Java之所以可以“一次编译,到处运行”,一是因为JVM针对各种操作系统、平台都进行了定制,二是因为无论在什么平台,都可以编译生成固定格式的字节码(.class文件)供JVM使用。

这里所说的字节码文件,大多数操作码都是一个字节长,而有些操作需要参数,导致了有一些多字节的操作码。而且并不是所有可能的256个操作码都被使用;其中有51个操作码被保留做将来使用。除此之外,原始Java平台开发商,升阳微系统,额外保留了3个代码永久不使用。

字节码文件

在我们开发过程中,java程序编译后得到的.class文件便是字节码文件。使用文本工具打开一个class文件,编码方式选择Hex(十六进制),得到如下内容:

<img src="https://pic4.zhimg.com/v2-dc02c81af16baab536f2d290e47231fb_b.jpg" data-caption="" data-size="normal" data-rawwidth="350" data-rawheight="155" data-default-watermark-src="https://pic3.zhimg.com/v2-4491714d8d0358014abfc55b33c905ae_b.jpg" class="content_image" width="350"/>

class文件之所以被称之为字节码,是因为字节码文件由十六进制值组成,而JVM以两个十六进制值为一组,即以字节为单位进行读取。在Java中一般是用javac命令编译源代码为字节码文件,一个.java文件从编译到运行的示例如图1所示。

<img src="https://pic4.zhimg.com/v2-e4a06afa299bed746ab7af01d27eebe7_b.jpg" data-caption="" data-size="normal" data-rawwidth="1080" data-rawheight="494" data-default-watermark-src="https://pic3.zhimg.com/v2-8319bfd033a6a7bf0a5d9a766180f1de_b.jpg" class="origin_image zh-lightbox-thumb" width="1080" data-original="https://pic4.zhimg.com/v2-e4a06afa299bed746ab7af01d27eebe7_r.jpg"/>

Java从源代码编译到运行的基本过程

Java源代码---->编译器---->jvm可执行的Java字节码(即虚拟指令)---->jvm---->jvm中解释器----->机器可执行的二进制机器码---->程序运行。

采用字节码的好处

Java语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以Java程序运行时比较高效,而且,由于字节码并不专对一种特定的机器,因此,Java程序无须重新编译便可在多种不同的计算机上运行。

一个问题也是经常问到的,关于网上说一摞一摞的,长篇大论的不好记怎么办

有问题找于哥,那今天于哥给大家总结了一下三句真言:

是什么?(定义)

java程序通过编译器编译成字节码文件,也就是计算机可以识别的二进制

为什么?(原理)

java虚拟机就是将字节码文件解释成二进制段

怎么样?(优势)

采用字节码的最大好处是:可以实现一次编译到处运行,也就是java的与平台无关性

总之

class文件不用重新编译就可以在其他的计算机系统上运行,只需要一次编译就可以到处运行

Java面试必考:什么是字节码?采用字节码的好处?的更多相关文章

  1. 五分钟学Java:如何学习Java面试必考的JVM虚拟机

    原创声明 本文首发于微信公众号[程序员黄小斜] 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 为什么要学习JVM虚拟机 最近的你有没有参加Java面试呢?你有没有发现,Java ...

  2. 【面试题】100IT名企java面试必考面试题

    一.Java 基础部分 1.   JAVA 的基本数据类型有哪些 ?   String 是不是基本数据类型 ? Java  有 8 种基本数据类型:           byte    int     ...

  3. 深入解读大厂java面试必考基本功-HashMap集合

    课程简介 HashMap集合在企业开发中是必用的集合同时也是面试官面试率很高的集合,因为HashMap里面涉及了很多的知识点,可以比较全面考察面试者的基本功,想要拿到一个好offer,这是一个迈不过的 ...

  4. 五分钟学Java:如何学习Java面试必考的网络编程

    原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 简介 Java作为一门后端语言,对于网络编程的支持是必不可少的,但是,作为一个经常CRUD的Java工程师,很多时候都不 ...

  5. 100IT 名企 java 面试必考面试题

    一.Java基础(2/133) 二.Java代码报错(52/133) 三.算法与编程(55/133) 四.html&JavaScript&ajax部分 五.Java Web部分 六.数 ...

  6. Java BAT大型公司面试必考技能视频-1.HashMap源码分析与实现

    视频通过以下四个方面介绍了HASHMAP的内容 一. 什么是HashMap Hash散列将一个任意的长度通过某种算法(Hash函数算法)转换成一个固定的值. MAP:地图 x,y 存储 总结:通过HA ...

  7. 95%的技术面试必考的JVM知识点都在这,另附加分思路!

    概述:知识点汇总 jvm的知识点汇总共6个大方向:内存模型.类加载机制.GC垃圾回收是比较重点的内容.性能调优部分偏重实际应用,重点突出实践能力.编译器优化和执行模式部分偏重理论基础,主要掌握知识点. ...

  8. Java面试必问之Hashmap底层实现原理(JDK1.7)

    1. 前言 Hashmap可以说是Java面试必问的,一般的面试题会问: Hashmap有哪些特性? Hashmap底层实现原理(get\put\resize) Hashmap怎么解决hash冲突? ...

  9. Java面试必知必会:基础

    面试考察的知识点多而杂,要完全掌握需要花费大量的时间和精力.但是面试中经常被问到的知识点却没有多少,你完全可以用 20% 的时间去掌握 80% 常问的知识点. 一.基础 包括: 杂七杂八 面向对象 数 ...

  10. Java面试必知必会(扩展)——Java基础

    float f=3.4;是否正确? 不正确 3.4是双精度,将双精度赋值给浮点型属于向下转型,会造成精度损失: 因此需要强制类型转换: 方式一:float f=(float)3.4 方式二:float ...

随机推荐

  1. Jupyter_Notebook_添加代码自动补全功能

    Jupyter Notebook 添加代码自动补全功能 安装 如果之前安装过显示目录功能的话,这一步骤可以跳过. pip install jupyter_contrib_nbextensions 配置 ...

  2. Java 魔法值处理的四种方法

    Java 魔法值处理方案 魔法值的定义 方法一 静态常量(不推荐) 方法二 接口中定义 方法三 定义在实体类 方法四 使用枚举类 enum 总结 魔法值的定义 魔法值是Java中突兀出现在代码中的常量 ...

  3. python制作定时发送信息脚本

    文章中提到的菜单是右下角这个 需求 我们需要做到打开微信获取输入框焦点及输入 思路 1,获取到右下角菜单的坐标和菜单中微信的坐标以及输入框的坐标 2,定时,用time.sleep()来定义多长时间后触 ...

  4. 轻松掌握组件启动之MongoDB:快速入门、Linux安装和Docker配置指南

    引言 我们将继续深入研究组件启动专题.在之前的文章中,我们已经详细介绍了Redis的各种配置使用方法,为读者提供了全面的指导.然而,今天我们将转向另一个备受关注的数据库--MongoDB.MongoD ...

  5. 2023-10-18:用go语言,给定一个数组arr,长度为n,表示有0~n-1号设备, arr[i]表示i号设备的型号,型号的种类从0~k-1,一共k种型号, 给定一个k*k的矩阵map,来表示型号

    2023-10-18:用go语言,给定一个数组arr,长度为n,表示有0~n-1号设备, arr[i]表示i号设备的型号,型号的种类从0~k-1,一共k种型号, 给定一个k*k的矩阵map,来表示型号 ...

  6. MongoDB 中的锁分析

    MongoDB 中的锁 前言 MongoDB 中锁的类型 锁的让渡释放 常见操作使用的锁类型 如果定位 MongoDB 中锁操作 1.查询运行超过20S 的请求 2.批量删除请求大于 20s 的请求 ...

  7. 博弈论nim游戏

    nim游戏 给定n堆物品,第i堆物品有Ai个,两名玩家轮流行动,每次可以任选一堆,取走任意多个物品,可把一堆取光,但不能不取.取走最后一件物品的人获胜. 定理:nim游戏先手必胜,当且仅当A1 xor ...

  8. Spring及UML

    深入浅出UML:http://blog.csdn.net/lovelion/article/details/7843437 //Component 1 package umltest.ticketma ...

  9. Net 高级调试之十:轻量级代码生成的调试

    一.简介 今天是<Net 高级调试>的第十篇文章.说起来,高级调试,调试的内容还是挺多的,技巧也不少,但是,要想做一个合格的高级调试人员,还需要掌握如何调试动态生成的IL代码.今天要探讨的 ...

  10. 洛谷3521 [POI2011]ROT-Tree Rotations(线段树合并)

    题意:给定一颗有 n 个叶节点的二叉树.每个叶节点都有一个权值pi​(注意,根不是叶节点),所有叶节点的权值构成了一个1∼n 的排列.对于这棵二叉树的任何一个结点,保证其要么是叶节点,要么左右两个孩子 ...