介绍java虚拟机的指令功能,至少能阅读java代码生成的字节码指令含义
一、概述
Java虚拟机采用基于栈的架构,其指令由操作码和操作数组成。
- 操作码:一个字节长度(0~255),意味着指令集的操作码个数不能操作256条。
- 操作数:一条指令可以有零或者多个操作数,且操作数可以是1个或者多个字节。编译后的代码没有采用操作数长度对齐方式,比如16位无符号整数需使用两个字节储存(假设为byte1和byte2),那么真实值是
(byte1 << 8) | byte2
。
介绍java虚拟机的指令功能,至少能阅读java代码生成的字节码指令含义
Java虚拟机采用基于栈的架构,其指令由操作码和操作数组成。
(byte1 << 8) | byte2
。Java编译过程是将Java文件转换为Claaa文件,从而实现了跨平台的功能, 本文详细讲述Class文件结构。
计算机只能识别0和1,所以大家编写的程序都需要经过编译器,转换为由0和1组成的二进制本地机器码(Native Code)。随着虚拟机的不断发展,很多程序语言开始选择与操作系统和机器指令集无关的格式作为编译后的存储格式(Class文件),从而实现”Write Once, Run Anywhere”。 Java设计之初,考虑后期能让Java虚拟机运行其他语言,目前有越来越多的其他语言都可以直接需要在Java虚拟机,虚拟机只能识别Class文件,至于是由何种语言编译而来的,虚拟机并不关心,如下图:
java是在java虚拟机上运行,一般地大家讲到的Java运行时内存结构其实就是Jvm内存
Java代码是运行在Java虚拟机之上的,由Java虚拟机通过解释执行(解释器)或编译执行(即时编译器)来完成,故Java运行时内存结构,也就是指Java虚拟机的运行时内存结构。
@SpringBootApplication:
包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。
其中@ComponentScan让spring Boot扫描到Configuration类并把它加入到程序上下文。