1. 通过javac Node.java 可以将Java文件编译成Node.class的字节码文件。 2. 通过javap -c Node.class 可以查看内部字节码,这些字节码是用来给JVM按照指令一条条去执行的。 通过javap -c -verbose Node.class 打印常量池。 j ...
转载
2021-10-08 21:10:00
129阅读
2评论
Java 之所以可以“一次编译,到处运行”,一是因为 JVM 针对各种操作系统、平台都进行了定制,二是因为无论在什么平台,都可以编译生成固定格式的字节码(.class 文件)供 JVM 使用。 .class 文件是一组以 8 位字节为基础单位的二进制流,各个数据项严格按照顺序紧凑地排列在 .clas
转载
2020-06-13 21:15:00
102阅读
2评论
本文部分摘自《深入理解 Java 虚拟机》简介Java 虚拟机的指令由操作码 + 操作数组成,其中操作码是代表某种特定操作含义的数字,长度为一个字节,而操作数就是此操作所需的一个或多个参数。由于 Java 虚拟机采用面向操作数栈而非寄存器的架构,所以大多数指令都不包括操作数,只有一个操作码既然限制了 JVM 操作码的长度为一个字节(0 ~ 255),也意味着指令集的操作码总数不超过 256 条。C
转载
2021-01-20 21:38:38
254阅读
2评论
本文部分摘自《深入理解 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虚拟机所使用的指令集,是八位字节的二进制流,数据项按顺序存储在class文件中,相邻的项之间没有任何间隔,这样可以使得class文件紧凑。任何一个Class文件都对应着唯一的一个类或接口的定义信息,但是反过来说,类或接口并不一定都得定义在文件(譬如类或接口也 ...
转载
2021-07-11 20:30:00
555阅读
2评论
jvm 字节码 笔记
原创
2017-01-19 16:50:45
2050阅读
1、JVM基础1.1、JDK,JRE,JVM关系JDKJDK(Java Development Kit) 是用于开发 Java 应用程序的软件开发工具集合,包括 了 Java 运行时的环境(JRE)、解释器(Java)、编译器(javac)、Java 归档 (jar)、文档生成器(Javadoc)等工具。简单的说我们要开发Java程序,就需要安 装某个版本的JDK工具包。JREJRE(Java Runtime Enviroment )提供 Java 应用程序执行时所需的环境,由 Java.
原创
2022-04-20 14:53:32
180阅读
1、源码和字节码 (1)源码 public class MyTest { public static void main(String[] args){ int a=10; int b=a++ + ++a +a--; System.out.println(a);//11 System.out.pri
转载
2020-07-18 10:42:00
501阅读
Java JVM 字节码指令,字节码指令大全
转载
2021-07-23 22:40:00
528阅读
2评论
字节码是jvm语言,java 不是。 jvm 的语言Java 语言和字节码对字节码名字的理解理解一段简单的字节码 jvm 的语言字节码是jvm 的语言。jvm 可以通过翻译字节码来执行指令。 那么任何一门语言如果可以翻译为字节码,那么就可以使用jvm来执行。 字节码作为一种中立的计算机治理表示方式,为众多的语言在jvm 上执行提供了可能。Java 语言和字节码我们可以通过javac (java编译
转载
2023-10-04 08:16:19
73阅读
java的“一处编译、多处执行”,得益于它的字节码和JVM。字节码就是java编译后的能被JVM读懂的类汇编语言。1.举个例子:package jvm;
public class A {
}上面是一个最简单的类,编译该类:javac A.java生成对应的A.class文件,反编译该class:javap A.class
Compiled from "A.java"
public class j
转载
2023-05-23 14:03:41
63阅读
目录通过javap命令查看class文件的字节码内容常量池描述符字段描述符方法描述符解读方法字节码图解研究i++与++i的不同查看字节码对比分析字符串拼接孰优孰劣小结通过javap命令查看class文件的字节码内容通过javap命令查看字节码并将内容写入到Test1.txt文件中的命令:javap -v Test1.cl...
原创
2021-07-02 14:07:15
284阅读
目录通过javap命令查看class文件的字节码内容常量池描述符字段描述符方法描述符解读方
原创
2022-01-20 15:22:13
118阅读
操作数栈管理指令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阅读
2、JVM字节码前面我们通过tomcat本身的参数以及jvm的参数对tomcat做了优化,其实要想将应用程 序跑的更快、效率更高,除了对tomcat容器以及jvm优化外,应用程序代码本身如果写的效率不高的,那么也是不行的,所以,对于程序本身的优化也就很重要了。对于程序本身的优化,可以借鉴很多前辈们的经验,但是有些时候,在从源码角度方面 分析的话,不好鉴别出哪个效率高,如对字符串拼接的操作,是...
原创
2021-08-18 10:48:17
119阅读
一、简介 根据字节码的不同用途,可以大概分为如下几类 加载和存储指令,比如 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 或基于 Java 虚拟机构建的其他语言(Scala、Closure、Kotlin、Groovy、Nashorn、Jython、JRuby 等)进行编程的每个人都熟悉“字节码”这个术语。但我们中有多少人真正了解 JDK 字节码是什么?字节码显然是位于高级编程语言和 JVM 之间的一层代码。JVM 本身接收该字节码,并通过将该字节码翻译成每个特定平台所需的机器语言来解决区分不同操作系统