JVM13_字节码文件的跨平台、前端编译器、什么是字节码指令(二)

简介: ③. 透过字节码指令看代码细节④. 如何解读供虚拟机解释执行的二进制字节码?

③. 透过字节码指令看代码细节


  • ①. Integer:透过字节码可以看出,当Integer的范围在-128 - +127 之间会在数组中直接拿取数值,超过这个范围会重新new对象


public class IntegerTest {
    public static void main(String[] args) {
        /*
        * 透过字节码可以看出,当Integer的范围在-128 - +127 之间会在数组中直接拿取数值
        * 超过这个范围会重新new对象
        * */
        Integer x = 5;
        int y = 5;
        System.out.println(x == y);
        Integer i1 = 10;
        Integer i2 = 10;
        System.out.println(i1 == i2);//true
        Integer i3 = 128;
        Integer i4 = 128;
        System.out.println(i3 == i4);//false
    }


微信图片_20220106171959.png


②. 在父类中调用方法,如果子类有重写,那么调用的是子类的方法,如代码中的this.print( )


注意:这里的this是指的 new son( )


/*
成员变量(非静态的)的赋值过程:
 ① 默认初始化 -
 ② 显式初始化 /代码块中初始化 -
 ③ 构造器中初始化 -
 ④ 有了对象之后,可以“对象.属性”或"对象.方法"
 的方式对成员变量进行赋值。
 */
class Father {
    int x = 10;
    public Father() {
        this.print();
        x = 20;
    }
    public void print() {
        System.out.println("Father.x = " + x);
    }
}
class Son extends Father {
    int x = 30;
//    float x = 30.1F;
    public Son() {
        this.print();
        x = 40;
    }
    public void print() {
        System.out.println("Son.x = " + x);
    }
}
public class SonTest {
    public static void main(String[] args) {
        Father f = new Son();
        System.out.println(f.x);//编译看左边,执行也看左边
    }
}
  /*
   son.x=0 
   son.x=30
   20
  */


④. 如何解读供虚拟机解释执行的二进制字节码?


  • ①. 一个一个二进制的看。这里用到的是Notepad++,需要安装一个HEX-Editor插件,或者使用Binary Viewer


微信图片_20220106172037.png


  • ②. 使用javap指令:jdk自带的反解析工具


  • ③. 使用IDEA插件:jclasslib 或jclasslib bytecode viewer客户端工具(可视化更好)


微信图片_20220106172053.png微信图片_20220106172056.png







相关文章
|
17天前
|
前端开发 JavaScript Java
前端限制打包文件数量
前端限制打包文件数量
165 65
|
1月前
|
Java 编译器 Linux
JVM/编译器/CPU,究竟谁是卧底?一个曾经困扰我一个月的 bug
任何复杂的系统都可能因为一个小小的疏漏而无法运转,本文记录了一个困扰作者一个月的 bug 最终拨云见日的过程。
|
1天前
|
前端开发
前端引入字体文件
文章介绍了如何在前端项目中引入字体文件,并展示了具体的HTML和CSS代码示例,包括如何使用`@font-face`规则来定义字体和在页面中应用自定义字体。
8 1
前端引入字体文件
|
3天前
|
前端开发 JavaScript API
前端JS读取文件内容并展示到页面上
前端JavaScript使用FileReader API读取文件内容,支持文本类型文件。在文件读取成功后,可以通过onload事件处理函数获取文件内容,然后展示到页面上。
11 2
前端JS读取文件内容并展示到页面上
|
1天前
|
前端开发
前端diff文件对比使用worker进行优化
如何使用Web Worker在React项目中优化文件对比差异功能的实现。
11 5
|
1月前
|
资源调度 前端开发 JavaScript
前端 nodejs 命令行自动调用编译 inno setup 的.iss文件
前端 nodejs 命令行自动调用编译 inno setup 的.iss文件
|
2月前
|
Web App开发 开发框架 编解码
在基于ABP框架的前端项目Vue&Element项目中采用电子签章处理文件和打印处理
在基于ABP框架的前端项目Vue&Element项目中采用电子签章处理文件和打印处理
|
2月前
|
开发框架 前端开发 JavaScript
循序渐进VUE+Element 前端应用开发(22)--- 简化main.js处理代码,抽取过滤器、全局界面函数、组件注册等处理逻辑到不同的文件中
循序渐进VUE+Element 前端应用开发(22)--- 简化main.js处理代码,抽取过滤器、全局界面函数、组件注册等处理逻辑到不同的文件中
|
1月前
|
Java Docker 索引
记录一次索引未建立、继而引发一系列的问题、包含索引创建失败、虚拟机中JVM虚拟机内存满的情况
这篇文章记录了作者在分布式微服务项目中遇到的一系列问题,起因是商品服务检索接口测试失败,原因是Elasticsearch索引未找到。文章详细描述了解决过程中遇到的几个关键问题:分词器的安装、Elasticsearch内存溢出的处理,以及最终成功创建`gulimall_product`索引的步骤。作者还分享了使用Postman测试接口的经历,并强调了问题解决过程中遇到的挑战和所花费的时间。
|
1月前
|
存储 算法 Oracle
不好意思!耽误你的十分钟,JVM内存布局还给你
先赞后看,南哥助你Java进阶一大半在2006年加州旧金山的JavaOne大会上,一个由顶级Java开发者组成的周年性研讨会,公司突然宣布将开放Java的源代码。于是,下一年顶级项目OpenJDK诞生。Java生态发展被打开了新的大门,Java 7的G1垃圾回收器、Java 8的Lambda表达式和流API…大家好,我是南哥。一个Java学习与进阶的领路人,相信对你通关面试、拿下Offer进入心心念念的公司有所帮助。
不好意思!耽误你的十分钟,JVM内存布局还给你