首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过javap命令分析java汇编指令

如果你使用的eclipse,则默认情况下,eclipse在编译时会帮你生成局部变量表、指令和代码行偏移量映射表等信息的。 通过反编译生成的汇编代码,我们可以深入的了解java代码的工作机制。...如果需要分析更多的信息,可以使用javap -v进行查看。...另外,为了更方便理解,所有汇编指令不单拎出来讲解,而是在反汇编代码中以注释的方式讲解 例子1:分析一下下面的代码反汇编之后结果: public class TestDate { private...2、平常,我们比较关注的是java类中每个方法的反汇编中的指令操作过程,这些指令都是顺序执行的,可以参考官方文档查看每个指令的含义,很简单: https://docs.oracle.com/javase.../specs/jvms/se7/html/jvms-6.html#jvms-6.5.areturn 3、通过对前面两个例子代码反汇编中各个指令操作的分析,可以发现,一个方法的执行通常会涉及下面几块内存的操作

2.3K20

MIPS指令集与简要分析R格式指令I格式指令J格式指令指令分析

={(PC+4)[31,28],addr,00} jal 000011 addr $31=PC;PC={(PC+4)[31,28],addr,00} 指令分析 指令格式 ?...Op字段均为0,使用funct字段区分指令 I格式指令为带立即数的指令,最多使用两个寄存器,同时包括了load/store指令。使用Op字段区分指令 J格式指令为长跳转指令,仅有一个立即数操作数。...使用Op字段区分指令 数据通路 以上的指令包括以下几种与指令有关的数据通路: 指令——寄存器组:R格式指令均为寄存器指令,需要指令提供寄存器地址 指令——运算单元(ALU):运算指令指令提供运算类型,...同时提供参与运算的立即数和位移量 指令——存储器:load/store指令的寻址方式仅为寄存器偏移量寻址,需要指令提供立即数偏移量 指令——PC:J格式指令需要将指令中的立即数载入PC中 同时还有几种必备的与指令无关的数据通路...PC值(跳转指令)等 执行阶段:执行指令,包括:访问存储器(load/store指令),ALU运算(计算类指令),刷新PC值(跳转指令)等 回写阶段:将结果存入寄存器中,包括:ALU的运算结果(计算类指令

8.6K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java指令编译java文件

    Java指令编译java文件 1. 进入cmd 2. 编译 2.1 切换不同JDK编译文件 3. 运行 1....编译 如果出现错误: 编码 GBK 的不可映射字符 (0x8D) 需要在javac 后面加上 -encoding UTF-8 javac -encoding UTF-8 编译的文件.java...2.1 切换不同JDK编译文件 一般JDK配置好了,直接用javac编译即可 Java环境配置/JDK安装配置 如果安装了多个JDK那怎么办呢?...UTF-8 编译文件.java 这时候会发现类文件具有错误的版本 55.0, 应为 51.0 Java对应的major version版本号 是因为你之前用另一个JDK编译过了, 此时变了版本...运行 注意这里不需要后缀名了 java 文件名 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/131504.html原文链接:https://javaforall.cn

    1.2K30

    jvm之指令重排_java指令重排

    引言:在Java中看似顺序的代码在JVM中,可能会出现编译器或者CPU对这些操作指令进行了重新排序;在特定情况下,指令重排将会给我们的程序带来不确定的结果….. 1....进过分析,发现这里每组指令中都有写操作,这个写操作的位置是不允许变化的,否则将带来不一样的执行结果。...在多线程下的指令重排 首先我们基于一段代码的示例来分析,在多线程情况下,重排是否有不同结果信息: [html] view plain copy print ?...指令重排的原因分析 主要还是编译器以及CPU为了优化代码或者执行的效率而执行的优化操作;应用条件是单线程场景下,对于并发多线程场景下,指令重排会产生不确定的执行效果。 6....参考文献 http://www.infoq.com/cn/articles/java-memory-model-2 http://www.cnblogs.com/chenyangyao

    29320

    java指令

    1.栈和局部变量操作 ,将常量压入栈的指令 aconst_null 将null对象引用压入栈 iconst_m1 将int类型常量-1压入栈 iconst_0 将int类型常量0压入栈...ldc把常量池中的项压入栈 ldc_w 把常量池中的项压入栈(使用宽索引) ldc2_w 把常量池中long类型或者double类型的项压入栈(使用宽索引) 2.从栈中的局部变量中装载值的指令...将引用类型值存入数组中 bastore将byte类型或者boolean类型值存入数组中 castore 将char类型值存入数组中 sastore 将short类型值存入数组中 wide指令...计算float类型除法的余数 drem 计算double类型除法的余数 fneg 将一个float类型的数值取反 dneg 将一个double类型的数值取反 对象和数组 对象操作指令...异常 athrow 抛出异常或错误 finally子句 jsr 跳转到子例程 jsr_w 跳转到子例程(宽索引) rct 从子例程返回 方法调用与返回 方法调用指令

    40710

    Java内存模型与指令重排

    本文暂不讲JMM(Java Memory Model)中的主存, 工作内存以及数据如何在其中流转等等, 这些本身还牵扯到硬件内存架构, 直接上手容易绕晕, 先从以下几个点探索JMM 原子性 有序性 可见性...编译器优化 主要是Java虚拟机层面的可见性, 下文会有详细讲述. 指令重排 指令重排是指在程序执行过程中, 为了性能考虑, 编译器和CPU可能会对指令重新排序....System.out.println("finish main"); 30 System.out.println(v.getStop()); 31 } 32 } 我们可以通过修改JAVA_HOME...server KNOWN -client KNOWN -hotspot ALIASED_TO -client -classic WARN -native ERROR -green ERROR 修改成功后, java...再来看两个从Java语言规范中摘取的例子, 也是涉及到编译器优化重排, 这里不再做详细解释, 只说下结果. 例子1中有可能出现r2 = 2 并且 r1 = 1; ?

    1.7K50

    Java 进阶篇】JSP 指令详解

    JSP 为我们提供了一种将 Java 代码嵌入 HTML 页面的方法,使得页面可以根据动态数据进行渲染。指令是 JSP 页面的一部分,用于控制页面的行为。...以下是一些常用的页面指令: 3.1. page 指令 page 指令用于设置页面的各种属性。以下是一些常用的属性: language:指定在 JSP 页面中使用的编程语言,通常为 “java”。...import:导入 Java 类。您可以使用多个 import 指令。 session:指定是否使用会话。可以设置为 “true” 或 “false”。...以下是一个示例: <%@ page language="<em>java</em>" contentType="text/html; charset=UTF-8" import="<em>java</em>.util.*" session...页面指令示例 下面是一个包含各种页面指令的简单示例: <%@ page language="<em>java</em>" contentType="text/html; charset=UTF-8" import="<em>java</em>.util

    41040

    Java 并发编程】线程指令重排序问题 ( 指令重排序规范 | volatile 关键字禁止指令重排序 )

    文章目录 总结 一、指令重排序规范 二、指令重排序示例 总结 Java 并发的 3 特性 : 原子性 : 每个操作都是 不可拆分的原子操作 ; 在线程中进行 a++ 就不是原子操作 , 该操作分为..." ; 保证 有序性 ; 一、指令重排序规范 ---- 指令重排指的是 , 线程中如果两行代码 没有逻辑上的上下关系 , 可以对代码进行 重新排序 ; JVM 指令重排遵循规范 : as-if-serial...规范 : 单个线程中, 指令的重排 , 不能影响程序的执行结果 ; 可以重排的情况 : 对于下面代码 , 两条指令顺序颠倒 , 执行结果相同 , 可以进行指令重排 ; x = 0; y = 1; 不可以进行重排的情况...: 对于下面的代码 , 两条指令如果上下颠倒 , 结果不同 , 不可以进行指令重排 ; x = 0; y = x; happens-before 规范 : 先行发生原则 ; 二、指令重排序示例 ---...这两个线程的执行顺序都是随机的 , 可能线程 1 先执行 , 也可能是线程 2 先执行 ; 如果线程 1 先执行, 则 x = 0, y = 1 ; 如果线程 2 先执行, 则 x = 1, y = 0 ; 根据代码分析

    93320

    Java里认识汇编指令重排序

    前言 编译器重排指令主要是为了优化程序的执行效率。编译器会根据程序的语义和指令的特性,对指令进行重新排序,使得程序在执行时能够更快地完成。...一、对象创建过程 对象创建过程,指令不只是一条,所以多线程执行会进行重排序,如图所示: 可以用编译直接打开java对象编译后的class文件,就可以看到,new对象生成的指令不止一个。...二、Java代码验证指令重排 单线程环境里面确保程序最终执行结果和代码顺序执行的结果一致的。...三、禁止指令重排 在Java中,可以通过将变量声明为`volatile`或使用`synchronized`关键字来禁止指令重排。 1....例如: synchronized(this){ // 执行需要禁止重排的代码 } 总结 从Java的角度看汇编语言的指令重排序,我们可以理解到这是一种提高程序执行效率的技术,但在多线程环境中需要谨慎处理

    39670

    Java】单例模式及指令重排问题

    单例模式介绍 在Java中单例设计模式准确来说是,类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。 2....null) { single = new Singleton(); } return single; } } 同步代码块解决(推荐):指令重排问题解决...private static volatile Singleton single;//声明为volatile解决指令重排 // 3.提供公共的静态的方法,返回当前类的对象。...} } return single; } } } /* 注意:上述方式2中,有指令重排问题 mem = allocate(); 为单例对象分配内存空间...但是需要 volatile关键字,避免指令重排(在成员属性上声明)。 */ 6.

    59740
    领券