本文部分摘自《深入理解 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(
jvm
转载 2021-06-18 14:53:13
226阅读
本文部分摘自《深入理解 Java 虚拟机》简介Java 虚拟机的指令由操作 + 操作数组成,其中操作是代表某种特定操作含义的数字,长度为一个字节,而操作数就是此操作所需的一个或多个参数。由于 Java 虚拟机采用面向操作数栈而非寄存器的架构,所以大多数指令都不包括操作数,只有一个操作既然限制了 JVM 操作的长度为一个字节(0 ~ 255),也意味着指令集的操作总数不超过 256 条。C
JVM
转载 2021-01-20 21:38:38
254阅读
2评论
Java JVM 字节指令字节指令大全
转载 2021-07-23 22:40:00
528阅读
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系列该系列命令主要负责把
翻译 10月前
0阅读
字节指令字节指令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 指令用于调用对象的实例方法 运算指令和类型转换,比
JVM
原创 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推
本文的目的在于从宏观逻辑上介绍清楚绝大多数的字节指令的含义以及分类,只要认真阅读本文必然能够对字节指令集有所了解。如果需要了解清楚每一个指令的具体详尽用法,请参阅虚拟机规范。— 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 方法返
在前面我们已经学习了JVM 字节JVM能直接识别的语言,了解了字节文件的文件结构。在这篇文章里,我们进一步学习字节的相关指令
在前面我们已经学习了JVM 字节JVM能直接识别的语言,了解了字节文件的文件结构。在这篇文章里,我们进一步学习字节的相关指令
— 1 —前言简介前文已经对虚拟机进行过了简单的介绍,并且也对class文件结构,以及字节指令进行了详尽的说明。想要了解JVM的运行机制,以及如何优化你的代码,你还需要了解一下java编译器到底是如何编译你的代码的。本文不是从最底层的编译原理讲解,本文是针对java代码,去查看归纳总结编译器的结果行为,从而直观的感受到字节指令集。也就是说本文的内容,主要针对的是使用javap 查看字节文件中
转载 2021-06-01 21:21:14
462阅读
  • 1
  • 2
  • 3
  • 4
  • 5