JVM在Java进阶中有多重要,相信每一位学习Java的同学都了解,上篇内容说到了JVM内存模型详解,还是有同学留言说挺实用的。

昨天,在交流群里和大佬们交流的时候,发现现在学到jvm这块进阶内容的时候,很多人对指令手册不是很了解。

还被大佬们调侃,因为这也是我当初学进阶课程时,jvm版块的一个难点,也是群里的大佬们协助解决的。

所以,今天就来和大家说一下这块的内容,主要分为三篇文章来和大家说,有兴趣的小伙伴可以持续关注。想学习大佬们经验或者想向大佬们请教的,我这边也给到大家方法,大家自行获取。

一、未归类系列A

此系列暂未归类。

二、const系列

该系列命令主要负责把简单的数值类型送到栈顶。该系列命令不带参数。注意只把简单的数值类型送到栈 顶时,才使用如下的命令。

比如对应int型才该方式只能把-1,0,1,2,3,4,5(分别采用iconst_m1,iconst_0, iconst_1, iconst_2, iconst_3, iconst_4, iconst_5)

送到栈顶。对于int型,其他的数值请使用push系列命令(比如bipush)。

三、push系列

该系列命令负责把一个整形数字(长度比较小)送到到栈顶。该系列命令有一个参数,用于指定要送到栈顶的数字。

注意该系列命令只能操作一定范围内的整形数值,超出该范围的使用将使用ldc 命令系列。

四、ldc系列

该系列命令负责把数值常量或String常量值从常量池中推送至栈顶。该命令后面需要给一个表示常量在常量池中位置(编号)的参数,

哪些常量是放在常量池呢?比如:final static int id=32768;final static float double=6.5。

对于const系列命令和push系列命令操作范围之外的数值类型常量,都放在常量池中.

另外,所有不是通过new创建的String都是放在常量池中的。

五、load系列

5.1、load系列A

该系列命令负责把本地变量的送到栈顶。这里的本地变量不仅可以是数值类型, 还可以是引用类型。

对于前四个本地变量可以采用iload_0,iload_1,iload_2,iload_3(它们分别表示第0,1,2,3个整形变量)这种不到参数的简化命令形式。

对于第4以上的本地变量将使用iload命令这种形式,在它后面给一参数,以表示是对第几个(从0开始)本类型的本地变量进行操作。

对本地变量所进行的编号,是对所有类型的本地变量进行的(并不按照类型分类)。

对于非静态函数,第一变量是this,即其对于的操作是aload_0.

还有函数传入参数也算本地变量,在进行编号时,它是先于函数体的本地变量的。

5.2、load系列B

该系列命令负责把数组的某项送到栈顶。该命令根据栈里内容来确定对哪个数组的哪项进行操作。

比如,如果有成员变量:final String names[]={"robin","hb"};

那么这句话:String str=names[0];对应的指令为

六、store系列

6.1、store系列A

该系列命令负责把栈顶的值存入本地变量。这里的本地变量不仅可以是数值类型,还可以是引用类型。

如果是把栈顶的值存入到前四个本地变量的话,采用的是istore_0,istore_1, istore_2,istore_3(它们分别表示第0,1,2,3个本地整形变量)这种不到参数的简 化命令形式。如果是把栈顶的值存入到第四个以上本地变量的话,将使用istore 命令这种形式,在它后面给一参数,以表示是把栈顶的值存入到第几个(从0开 始)本地变量中。

对本地变量所进行的编号,是对所有类型的本地变量进行的(并不按照类型分类)。

对于非静态函数,第一变量是this,它是只读的.

还有函数传入参数也算本地变量,在进行编号时,它是先于函数体的本地变量的。

6.2、store系列B

该系列命令负责把栈顶项的值存到数组里。该命令根据栈里内容来确定对哪个数组的哪项进行操作。

比如,如下代码:

int moneys[]=new int[5];

moneys[1]=100;

其对应的指令为:

49:iconst_5

50:newarray int

52:astore11

54:aload11

56:iconst_1

57:bipush100

59:iastore

60:lload6//因为str在我的程序中是其所非静态在函数的第6个变量(从0开始计数).

七、pop系列

该系列命令似乎只是简单对栈顶进行操作,更多详情待补充。

八、栈顶元素数学操作及移位操作系列

该系列命令用于对栈顶元素行数学操作,和对数值进行移位操作。移位操作的操作数和要移位的数都是从栈里取得。

比如对于代码:int k=100;k=k>>1;其对应的JVM指令为:

60:bipush100

62:istore12//因为k在我的程序中是其所在非静态函数的第12个变量(从0开始计数).

64:iload12

66:iconst_1

67:ishr

68:istore12

关于JVM指令手册内容将分为3篇文章给大家,有需要的可以持续关注,我这边也有关于进阶的大佬交流群,任何关于Java相关的内容都可以在群内咨询,大佬们都会积极解决。

很多人在学习Java的过程中会忽略这一块的知识,如果想要通过进阶获得高薪酬的工作,肯定是各个内容都需要掌握,希望这篇文章能够帮助到大家。

ldc java_Java进阶干货分享:深入JVM指令手册(一)相关推荐

  1. jmap 文件解析_干货分享丨jvm系列:dump文件深度分析

    摘要:java内存dump是jvm运行时内存的一份快照,利用它可以分析是否存在内存浪费,可以检查内存管理是否合理,当发生OOM的时候,可以找出问题的原因.那么dump文件的内容是什么样的呢? JVM ...

  2. 【华为云技术分享】干货分享丨jvm系列:dump文件深度分析

    摘要:java内存dump是jvm运行时内存的一份快照,利用它可以分析是否存在内存浪费,可以检查内存管理是否合理,当发生OOM的时候,可以找出问题的原因.那么dump文件的内容是什么样的呢? JVM ...

  3. JVM指令分析实例四(数组、switch)

    本篇为<JVM指令分析实例>的第四篇,相关实例均使用Oracle JDK 1.8编译,并使用javap生成字节码指令清单. 前几篇传送门: JVM指令分析实例一(常量.局部变量.for循环 ...

  4. eureka 之前的服务如何关闭_干货分享 | 服务注册中心Spring Cloud Eureka部分源码分析...

    友情提示:全文13000多文字,预计阅读时间10-15分钟 Spring Cloud Eureka作为常用的服务注册中心,我们有必要去了解其内在实现机制,这样出现问题的时候我们可以快速去定位问题.当我 ...

  5. android 移除泛型中元素_最新(2020)Android高级面试知识点干货分享(二)

    最新Android高级面试知识点干货分享(一) *转载请说明出处*! 四.Java集合(List.Set.Queue.Map) Java集合体系是一个树状,如果按照类似OSI网络模型来看的话,整个Ja ...

  6. 让0基础纯小白也能上手写Python,干货分享(二)

    上一篇文章测试工程师进阶之Python学习干货分享分享了Python基础知识,本次继续分享其它内容. 一.Python基本数据类型 1.数值类型:整数.浮点数.复数. 2.序列类型:字符串.列表.元组 ...

  7. 干货分享:十年大厂资深程序员的开发经验总结

    本文由腾讯云加社区整理和发布,原文链接:cloud.tencent.com/developer/article/1004735,内容有删减和改动. 1.引言 在互联网一线做了十年的程序开发,经历了网易 ...

  8. Netty干货分享:京东京麦的生产级TCP网关技术实践总结

    1.引言 京东的京麦商家后台2014年构建网关,从HTTP网关发展到TCP网关.在2016年重构完成基于Netty4.x+Protobuf3.x实现对接PC和App上下行通信的高可用.高性能.高稳定的 ...

  9. 干货分享:AI绘图学习心得-Midjourney绘画AI,让你的AI绘画之路少走弯路

    干货分享:AI绘图学习心得-Midjourney绘画AI 最重要的Prompt和参数 基本 Prompts 高级Prompts 一.构图指令结构 二.常用指令分享 三.操作技巧总结 四.常用风格词汇 ...

最新文章

  1. Java 理论与实践: 非阻塞算法简介——看吧,没有锁定!(转载)
  2. 为EditText输入框加上提示信息
  3. 批量移动AD用户到指定OU
  4. PHP usort 函数底层排序
  5. mercury无线路由器设置服务器无响应,有了这款路由器,从此卡顿不存在
  6. match VS match_phrase
  7. 将Matplotlib嵌入wxPython的GUI界面中
  8. 关于重分类工具的其他讨论
  9. 【工作笔记001】SuperMap配准TransCAD底图
  10. latex怎么改字体大小_latex更改字体 latex局部字体大小
  11. Can‘t open /dev/sda3 exclusively. Mounted filesystem?
  12. 目前建站系统用的比较多的几个系统(几款值得推荐的建站系统)
  13. 简述MES系统的9大核心功能模块
  14. 史上最强窃密软件来袭,手机或成泄密工具
  15. Rhythmbox乱码的解决办法
  16. 在VMware上安装Android虚拟机
  17. PG 异常状态- active+undersized+degraded
  18. 1.0 Linux 网络相关概念和修改IP地址的方法
  19. Paper Reading:Image-to-Image Translation with Conditional Adversarial Networks
  20. On-Premise

热门文章

  1. 华为云灾备方案,如何助力企业扬帆起航
  2. 《架构真经:互联网技术架构的设计》大道至简
  3. 从无到有创建一个聊天App六-仿QQ号生成算法
  4. Python入门 - 笔记 - 第三章 Python中的变量和数据类型
  5. dos模拟器存档_互联网档案馆最近收录了几千款DOS游戏
  6. 通过数据库批量生成汉信码
  7. 信号隔离器 隔离式安全栅BM200
  8. 还原数据库bak文件
  9. Microsoft SharePoint Server 2010 的 Total Economic ImpactTM(总体经济影响)
  10. 百度AI人工智能开发平台api接口强---使用有感