Java面试必考:什么是字节码?采用字节码的好处?
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面试必考:什么是字节码?采用字节码的好处?的更多相关文章
- 五分钟学Java:如何学习Java面试必考的JVM虚拟机
原创声明 本文首发于微信公众号[程序员黄小斜] 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 为什么要学习JVM虚拟机 最近的你有没有参加Java面试呢?你有没有发现,Java ...
- 【面试题】100IT名企java面试必考面试题
一.Java 基础部分 1. JAVA 的基本数据类型有哪些 ? String 是不是基本数据类型 ? Java 有 8 种基本数据类型: byte int ...
- 深入解读大厂java面试必考基本功-HashMap集合
课程简介 HashMap集合在企业开发中是必用的集合同时也是面试官面试率很高的集合,因为HashMap里面涉及了很多的知识点,可以比较全面考察面试者的基本功,想要拿到一个好offer,这是一个迈不过的 ...
- 五分钟学Java:如何学习Java面试必考的网络编程
原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 简介 Java作为一门后端语言,对于网络编程的支持是必不可少的,但是,作为一个经常CRUD的Java工程师,很多时候都不 ...
- 100IT 名企 java 面试必考面试题
一.Java基础(2/133) 二.Java代码报错(52/133) 三.算法与编程(55/133) 四.html&JavaScript&ajax部分 五.Java Web部分 六.数 ...
- Java BAT大型公司面试必考技能视频-1.HashMap源码分析与实现
视频通过以下四个方面介绍了HASHMAP的内容 一. 什么是HashMap Hash散列将一个任意的长度通过某种算法(Hash函数算法)转换成一个固定的值. MAP:地图 x,y 存储 总结:通过HA ...
- 95%的技术面试必考的JVM知识点都在这,另附加分思路!
概述:知识点汇总 jvm的知识点汇总共6个大方向:内存模型.类加载机制.GC垃圾回收是比较重点的内容.性能调优部分偏重实际应用,重点突出实践能力.编译器优化和执行模式部分偏重理论基础,主要掌握知识点. ...
- Java面试必问之Hashmap底层实现原理(JDK1.7)
1. 前言 Hashmap可以说是Java面试必问的,一般的面试题会问: Hashmap有哪些特性? Hashmap底层实现原理(get\put\resize) Hashmap怎么解决hash冲突? ...
- Java面试必知必会:基础
面试考察的知识点多而杂,要完全掌握需要花费大量的时间和精力.但是面试中经常被问到的知识点却没有多少,你完全可以用 20% 的时间去掌握 80% 常问的知识点. 一.基础 包括: 杂七杂八 面向对象 数 ...
- Java面试必知必会(扩展)——Java基础
float f=3.4;是否正确? 不正确 3.4是双精度,将双精度赋值给浮点型属于向下转型,会造成精度损失: 因此需要强制类型转换: 方式一:float f=(float)3.4 方式二:float ...
随机推荐
- c语言代码练习14
//设计一个猜数字游戏,需要提示猜大了还是小了,直到猜对为止 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include & ...
- 数据泵(impdb)导入Oracle分片的数据库dump文件
数据泵(impdb)导入Oracle数据库 一.sqlplus登录目标数据库,创建导入的目录路径 #该目录要在导入的数据库本机建立,如果是docker就在容器内部创建 create directory ...
- Django-rest-framework框架——请求与响应、视图组件
目录 一 请求与响应 1.1 Request 1.1.1.1 常用属性 1).data 2).query_params 1.2 Response 1.1.2.1 构造方式 1.1.2.2 常用属性 1 ...
- Langchain-Chatchat项目:1-整体介绍
基于Langchain与ChatGLM等语言模型的本地知识库问答应用实现.项目中默认LLM模型改为THUDM/chatglm2-6b[2],默认Embedding模型改为moka-ai/m3e-b ...
- python第2~5章 code
02基本语法 print('he\aaa\aaa') # 这是一个打印语句,请你看见了不要慌张# 这是一个注释# 注释会被解释器所忽略# print(123+456) 这行代码被注释了,将不会执行pr ...
- 13. 从零开始编写一个类nginx工具, HTTP中的压缩gzip,deflate,brotli算法
wmproxy wmproxy将用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,后续将实现websocket代理, 内外网穿透等, 会将实现过程分享出来, 感 ...
- 微服务系列-使用WebFlux的WebClient进行Spring Boot 微服务通信示例
公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享. 概述 在之前的教程中,我们看到了使用 RestTemplate 的 Spring Boot 微服务通信示例. 从 5.0 ...
- L2-032 彩虹瓶
#include <bits/stdc++.h> using namespace std; const int N = 1010; int main() { ios::sync_with_ ...
- Android 应用接入 Firebase Crashlytics 进行崩溃分析上报
前言 所在公司的项目中有一款应用应客户要求,需要接入 Firebase Crashlytics,在此提前练手,也做个总结.本文以最新的 Gradle 7.5 为例,如果 Gradle 版本比较低,添加 ...
- Python数字加密方法:建立从0到9的数字序列,将输入的数字数据,每个数字在数字序列中循环右移2位,输出该数据对应的汉字大写形式。
数字加密方法:建立从0到9的数字序列,将输入的数字数据,每个数字在数字序列中循环右移2位,输出该数据对应的汉字大写形式. 样例1:输入123,输出三四五 样例2:输入985,输出一零七 def Slo ...