本文部分摘自《深入理解 Java 虚拟机》简介Java 虚拟机的指令由操作码 + 操作数组成,其中操作码是代表某种特定操作含义的数字,长度为一个字节,而操作数就是此操作所需的一个或多个参数。由于 Java 虚拟机采用面向操作数栈而非寄存器的架构,所以大多数指令都不包括操作数,只有一个操作码既然限制了 JVM 操作码的长度为一个字节(0 ~ 255),也意味着指令集的操作码总数不超过 256 条。C
转载
2021-01-20 21:40:04
328阅读
2评论
demo:
public class T1 {
volatile int n = 0;
public void add() {
n++;
}
}
Compiled from "T1.java"
public class com.shishi.jmm.T1 {
volatile int n;
public com.shishi.jmm.T1(
转载
2021-06-18 14:53:13
226阅读
本文部分摘自《深入理解 Java 虚拟机》简介Java 虚拟机的指令由操作码 + 操作数组成,其中操作码是代表某种特定操作含义的数字,长度为一个字节,而操作数就是此操作所需的一个或多个参数。由于 Java 虚拟机采用面向操作数栈而非寄存器的架构,所以大多数指令都不包括操作数,只有一个操作码既然限制了 JVM 操作码的长度为一个字节(0 ~ 255),也意味着指令集的操作码总数不超过 256 条。C
转载
2021-01-20 21:38:38
254阅读
2评论
请合理利用Ctrl+F栈和局部变量操作将常量压入栈的指令aconst_null 将null对象引用压入栈iconst_m1 将int类型常量-1压入栈iconst_0 将int类型常量0压入栈iconst_1 将int类型常量1压入操作数栈iconst_2 将int类型常量2压入栈iconst_3 将int类型常量3压入栈iconst_4 将int类型常量4压入栈iconst_5 将int类型常量5压入栈lconst_0 将long类型常量0压入栈lconst_1 将long类型常量
原创
2021-05-20 11:45:11
429阅读
一、未归类系列A此系列暂未归类。指令码 助记符 说明0x00 nop 什么都不做0x01 aconst_null 将null推送至栈顶二、const系列该系列命令主要负责把
字节码指令字节码指令1.字节码指令简介2.字节码与数据类型3.加载和存储指令实操:4.运算
原创
2022-07-06 16:51:50
145阅读
操作数栈管理指令1)pop、pop2:将操作数栈的栈顶一个或两个元素出栈。2)dup、dup2、dup_x1、dup2_x1、dup_x2、dup2_x2:复制栈顶一个或两个数值并将复制值或双份的复制值重新压入栈顶。3)swap:将栈最顶端两个数值互换。publicstaticvoidmain(String[]args){heavyMethod();}对应的字节码:publicstaticvoid
原创
2018-06-20 17:44:27
3090阅读
一、简介 根据字节码的不同用途,可以大概分为如下几类 加载和存储指令,比如 iload 将一个整形值从局部变量表加载到操作数栈 控制转移指令,比如条件分支 ifeq 对象操作,比如创建类实例的指令 new 方法调用,比如 invokevirtual 指令用于调用对象的实例方法 运算指令和类型转换,比
原创
2021-07-19 15:15:49
340阅读
概述本文主要是基于 .class 文件,进行分析 .class 文件的内容。 这部分个人觉得主要是属于设计机构拓展的内容,大家可以一起来学习一下 Java 字节码的设计结构以及感受一下设计者的设计。 Java 提供 javap 命令可以分析字节码文件,我们可以使用 javap …
原创
2022-04-12 16:16:04
261阅读
在平时的demo中,依靠字节码顺序,解析程序执行流程,真正的执行顺序是字节码的执行顺序,单线程下字节码顺序是与程序书写顺序一致的,多线程环境下,共享变量的赋值读取顺序却不可掌握时机。 JVM:Java Virtual Machine 添加描述ps:这是我搜集的最干净整洁的JVM内存图了MinorGC的过程(复制->清空->互换)1:Eden,SurvivorFrom复制到Sur
原创
2023-07-14 23:03:25
94阅读
虚拟机字节码指令表(《深入理解Java虚拟机》第二版) JVM指令表常量型本地变量数组变量类型将值存入变量将值存入数组将值弹出栈顶复制栈顶数值指令交换指令变量计算变量增加指定值跳转指令返回指令获值/赋值指令调用方法指令创建对象指令异常指令锁指令 常量型助记符指令含义nop什么都不做aconst_null将null推
转载
2023-11-06 23:25:04
77阅读
本文的目的在于从宏观逻辑上介绍清楚绝大多数的字节码指令的含义以及分类,只要认真阅读本文必然能够对字节码指令集有所了解。如果需要了解清楚每一个指令的具体详尽用法,请参阅虚拟机规范。— 1 —指令简介计算机指令就是指挥机器工作的指示和命令,程序就是一系列按一定顺序排列的指令,执行程序的过程就是计算机的工作过程。通常一条指令包括两方面的内容:操作码操作数操作码决定要完成的操作;操作数指参加运算的数据及其
转载
2021-06-01 21:21:39
582阅读
下文中的栈指操作数栈。 对于非静态方法,局部变量表的 0 号槽为 this 变量。 局部变量表中的变量槽可以复用。 Constants 常量相关 十进制 操作码 助记符 含义 备注 0 0x00 nop 什么都不做 1 0x01 aconst_null 把 null 压入栈顶 a 代表引用 2 0x ...
转载
2021-08-25 22:51:00
281阅读
2评论
一、未归类系列A此系列暂未归类。指令码助记符说明0x00nop什么都不做0x01aconst_null将null推送至栈顶二、const系列该系列命令主要负责把简单的数值类型送到栈顶。该系列命令不带参数。注意只把简单的数值类型送到栈顶时,才使用如下的命令。比如对应int型才该方式只能把-1,0,1,2,3,4,5(分别采用iconst_m1,iconst_0, iconst_1, iconst_2, iconst_3,iconst_4, iconst_5)送
原创
2022-04-20 14:53:33
615阅读
Java虚拟机的指令由一个字节长度的,代表着某种特定操作含义的数字(操作码)以及跟随其后的零至多个代表此操作所需参数(操作数)而构成。由于Java虚拟机采用面向操作数栈而不是寄存器的架构,所以大多数的指令都不包含操作数,只有一个操作码。
转载
2023-06-18 10:22:14
181阅读
文章目录1 字节码概述2 指令与数据类型关系2.1 常用指令3 操作数栈4 局部变量表5 存储指令5.1 局部变量压栈5.2 常量入栈指令5.2 出栈装入局部变量表指令6 算术指令6.1 i++与++i7 类型转换指令7.1 宽化类型转换7.2 窄化类型转换8 对象创建与访问指令8.1 创建指令8.2 字段访问指令8.3 数组操作指令8.4 类型检查指令9方法指令9.1方法调用指令9.2 方法返
转载
2023-08-20 16:45:09
106阅读
在前面我们已经学习了JVM 字节码是JVM能直接识别的语言,了解了字节码文件的文件结构。在这篇文章里,我们进一步学习字节码的相关指令。
原创
2021-12-29 14:11:40
120阅读
在前面我们已经学习了JVM 字节码是JVM能直接识别的语言,了解了字节码文件的文件结构。在这篇文章里,我们进一步学习字节码的相关指令。
原创
2022-04-12 15:11:01
292阅读
— 1 —前言简介前文已经对虚拟机进行过了简单的介绍,并且也对class文件结构,以及字节码指令进行了详尽的说明。想要了解JVM的运行机制,以及如何优化你的代码,你还需要了解一下java编译器到底是如何编译你的代码的。本文不是从最底层的编译原理讲解,本文是针对java代码,去查看归纳总结编译器的结果行为,从而直观的感受到字节码指令集。也就是说本文的内容,主要针对的是使用javap 查看字节码文件中
转载
2021-06-01 21:21:14
462阅读