![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 96
一叶飘舟
目标赋予我们生命的意义和目的。有了目标,我们才会把注意力集中在追求喜悦,而不是在避免痛苦上。(急需找我,加微信:jdsjlzx)
展开
-
字节码进阶之java反射的底层实现原理
Java反射的底层实现原理主要涉及到Java的类加载机制和字节码操作。总结起来,Java反射的底层实现原理是通过类加载机制将类的字节码加载到内存中,并通过字节码操作解析和操作类的成员变量、方法和构造方法。这样就实现了在运行时动态地获取和操作类的信息。Java的反射机制允许在执行时查看和修改程序的行为。它使得Java代码可以动态地加载、探查、使用已编译的Java应用,也就是.class文件。下面是使用Java反射的示例和底层原理的解析。我们首先使用方法加载类。转载 2024-06-13 00:27:01 · 32 阅读 · 0 评论 -
从字节码分析synchronized的实现原理
前几个章节我们了解到Class文件的结构剖析,以及字节码的场景语句的底层原理,以及字节码中的指令的基本含义。本章节我们学以致用,来从字节码层面分析synchronized的实现原理。首先,我们来看一个简单的Code:0: aload_0 // 将"this"加载到操作数栈顶1: dup // 复制操作数栈顶的值2: astore_1 // 将操作数栈顶的值存储到局部变量表的第1个位置,也就是"this"3: monitorenter // 为对象(此处即"this")加锁。原创 2024-06-13 00:23:48 · 810 阅读 · 0 评论 -
字节码进阶之方法调用指令详解
Java字节码是Java虚拟机(JVM)执行的代码,它是由Java编译器编译Java源代码生成的。字节码可以在任何安装了JVM的平台上运行,这也是Java“一次编写,到处运行”的基础。在字节码中,方法调用指令是一类重要的指令,它用于调用Java方法。方法调用指令主要包括五种:invokevirtual、invokespecial、invokestatic、invokeinterface和invokedynamic。每种指令对应一种特定的方法调用场景。转载 2024-06-13 00:20:54 · 31 阅读 · 0 评论 -
字节码之 Lambda 表达式底层原理
前两章我们了解了JVM之所以夸平台的一个重要特性《字节码指令详解》、并且通过javap反编译了一些常见的java 语句的字节码指令(《常见java语句的底层原理》),了解了之所以这些语句举报那样的特性。今天我们继续学以致用从字节码指令层面聊聊Lambda表达式的底层原理。首先我们写一个简单的lambda表达式,并用javap命令反编译成字节码指令。(动态方法调用)是Java 7引入的一个新的字节码指令,目的是为了支持动态类型语言在Java平台上的执行。原创 2024-06-13 00:11:09 · 719 阅读 · 0 评论 -
字节码进阶之ASM字节码操作类库详解
在Java的世界里,一切都围绕着字节码进行。字节码,作为Java源代码到Java虚拟机(JVM)的中间表示,扮演了重要的角色。然而,直接操作字节码并非易事,需要深入理解JVM的工作原理以及字节码的细节。这就是ASM类库登场的地方。ASM是一个在Java中广泛使用的字节码操作和分析框架。它提供了直接操作字节码的能力,从而可以实现一些Java语言本身无法实现或者难以实现的功能。通过使用ASM,开发者可以动态生成类,修改已存在的类,优化代码性能,以及进行深度的代码分析。转载 2024-06-12 23:57:25 · 30 阅读 · 0 评论 -
字节码学习之常见java语句的底层原理
本章我们学以致用,聊一下我们常见的一些java语句的特性底层是如何实现。原创 2024-06-12 23:48:19 · 680 阅读 · 0 评论 -
i++ 和++i的字节码原理详解
一个关于i++和++i的原理详解,对字节码不太熟悉的可以先了解下字节码相关知识,因为从字节码角度更能理解两者的原理。转载 2024-06-11 10:30:03 · 22 阅读 · 0 评论 -
JVM笔记:Java虚拟机的字节码指令详解
因为。转载 2024-06-11 10:25:27 · 37 阅读 · 0 评论 -
JVM可视化监控工具
命令行JVM插件官网下载nbm包后用于查找内存泄漏以及查看内存消耗情况对象A支配对象BJava堆篇//从网络中接收数据并保存到msg中saveMsg();//保存msg到数据库中12345678官网地址官方文档java -jar arthas-boot.jar --telnet-port 端口号 -http-port -1-b。转载 2024-06-07 10:02:22 · 66 阅读 · 0 评论 -
字节码指令
1、Java字节码对于虚拟机,就好像汇编语言对于计算机,属于基本执行命令。2、Java虚拟机的指令由1个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的0至多个代表此操作所需参数(称为操作数,Operand)而构成。由于Java虚拟机采用面向操作数栈而不是寄存器的结构,所以大多数的指令都不包含操作数,只有一个操作码,指令惨数都存放在操作数栈中。3、字节码指令集可算是一种具有鲜明特点、优势和劣势均很突出的指令集架构。转载 2024-06-07 00:09:41 · 91 阅读 · 0 评论 -
Class文件结构下篇
5、紧接着是0x2a,对应的指令为aload_0;如果方法表有Code属性存在,那么它的结构如下图,Code属性表的前两项跟属性表是一致的,即Code属性表遵循属性表的结构,后面那些则是他自定义的结构。2、attribute_name_index是一项指向CONSTANT_Utf8_info型常量的索引,此常量值固定为Code,它 代表了该属性的属性名称,attribute_length指示了属性值的长度,由于属性名称索引与属性长度一共为6个字节,所以属性值的长度固定为整个属性表长度减去6个字节。转载 2024-06-07 00:00:44 · 27 阅读 · 0 评论 -
Class文件结构上篇
1、Java 虚拟机不和包括Java在内的任何语言绑定,它只与"Class文件"这种特定的二进制文件格式所关联。无论使用何种语言进行软件开发,只要将源文件编译为正确的Class文件,那么这种语言就可以在Java虚拟机上执行。可以说,统一而强大的Class文件结构,就是Java虚拟机的基石、桥梁。所有的JVM全部遵守Java虚拟机规范,也就是说所有的JVM环境都是一样的,这样一来字节码文件可以在各种JVM上运行。转载 2024-06-06 18:16:36 · 28 阅读 · 0 评论 -
Java类加载过程
类加载过程:一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载 (Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化 (Initialization)、使用(Using)和卸载(Unloading)七个阶段,其中验证、准备、解析三个部分统称为连接(Linking)原创 2024-06-06 16:11:15 · 699 阅读 · 1 评论 -
Java代码原来是这么执行的—怒撕字节码指令
Java虚拟机的指令是由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零个或多个代表此操作所需参数(称为操作数,Operand)而构成。由于一条虚拟机指令的操作码只用一个字节存储,因此Java虚拟机所能支持的指令最多256条。转载 2024-06-05 15:12:33 · 21 阅读 · 0 评论 -
深入理解字节码指令集及流程分析
上面的代码在内存中执行的情况如下:这个类文件中对应每一个方法还包含一个。转载 2024-06-05 14:56:58 · 34 阅读 · 0 评论 -
ASM基础使用之代码生成
clinit>代表的类的初始化方法,不同于,它不是显示调用的。注意:和执行的时机不一样,的时机早于,是在类被加载阶段的初始化过程中调用方法,而方法的调用是在new一个类的实例的时候。value:变量的初始值。注意:maxStack == 2,不是代表只有两个对操作数栈的指令,而是操作数栈容量大小为2,可以满足上面代码,例如下面代码,操作数栈大小为2也可以满足。看到下面,这才是我们需要的。转载 2024-06-05 10:50:01 · 47 阅读 · 0 评论 -
Java字节码指令大全
这是oracle官方提供的java虚拟机指令集操作码与助记符的映射图,按类型进行了划分。原创 2024-06-05 13:41:03 · 586 阅读 · 0 评论 -
Java和Android的类加载器和类加载机制详解
我们的应用程序都是由这3中类加载器互相配合进行加载的,如果有必要,还可以加入自己定义的类加载器。开发人员可以通过继承 java.lang.ClassLoader类,重写findClass()方法,调用defineClass()方法的方式实现自己的类加载器,以满足一些特殊的需求。为什么会有自定义类加载器?一方面是由于java代码很容易被反编译,如果需要对自己的代码加密的话,可以对编译后的代码进行加密,然后再通过实现自己的自定义类加载器进行解密,最后再加载。转载 2024-05-28 14:59:11 · 40 阅读 · 0 评论 -
Java JVM的类加载过程详解
根据《Java虚拟机规范 Java SE8》版规定,类或者接口的加载过程分为 加载(Loading)、链接(Linking)、初始化(Initialization)。其中链接(Linking)又可以分为: 验证(Verification)、准备(Preparation)、解析(Resolution)。加载是根据特定名称查找类或接口类型的二进制表示(binary representation), 并由此二进制表示来创建类或接口的过程。转载 2024-05-28 00:09:54 · 28 阅读 · 0 评论 -
Java的 Class字节码文件结构和内容全面解析
Exceptions 属性表中, attribute_name_index 指定了属性的名称, 它为指向常量池的索引,恒为“Exceptions",attribute_lengt表示属性长度, number_of_exceptions表示表项数量即可能抛出的异常个数,最后exception_index_table项罗列了所有的异常,每一项为指向常量池的索引,对应的常量为CONSTANT_Class_info,表示为一个异常类型。而这里的最大长度就是length的最大值,既u2类型能表达的最大值65535。转载 2024-05-27 10:30:09 · 35 阅读 · 0 评论