![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 94
外星喵
喵了个咪的~~
展开
-
一切要从new Object()说起
`java.lang.Object` 类是所有类的父类, Java 的所有类都继承了 Object,所有类皆可以使用 Object 的方法。Object类位于 `java.lang` 包中,编译时会自动导入,它可以显示继承,也可以隐式继承,如我们创建一个类时,如果没有明确继承一个父类,那么它就会自动继承 Object,成为 Object的子类。通常我们需要实例化一个Object,需要通过`new`关键字去初始化。原创 2017-08-13 01:55:14 · 1346 阅读 · 2 评论 -
Java本地方法调用
JNI介绍JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java 1.1 开始,Java Native Interface (JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的,比如,使用一些旧的库,与硬件、操原创 2021-06-08 15:09:29 · 1564 阅读 · 5 评论 -
class文件详解
class文件结构Class文件是一组以8位字节为基础单位的二进制流,内容是以《Java虚拟机规范》规定的一种固定的格式存储数据。存储数据用到了两个数据类型:“无符号数”和“表”。无符号数:无符号数是基本数据类型,以u1、u2、u4、u8来分别代表1个字节、2个字节、4个字节和8个字节的无符号数,无符号数可以用来描述数字、索引引用、数量表或者按照UTF-8编码构成字符串值。表:由多个无符号数或者其他表作为数据项构成的复合数据类型,以“_info”结尾,用户描述有层次关系的复合结构的数据。下图为《Ja原创 2019-04-09 15:29:09 · 342 阅读 · 1 评论 -
JVM垃圾回收机制深入解析
垃圾回收介绍Java 语言的可移植性就是建立在 JVM 的基础之上的,任何平台只要装有针对于该平台的 Java 虚拟机,字节码文件(.class)就可以在该平台上运行,这就是“一次编译,多次运行”。除此之外,作为 Java 语言最重要的特性之一的自动垃圾回收机制,也是基于 JVM 实现的。在 JVM 进行垃圾回收之前,首先就是判断哪些对象是垃圾,也就是说,要判断哪些对象是可以被销毁的,其占有的空间是可以被回收的。根据 JVM 的架构划分,我们知道, 在 Java 内存模型中,几乎所有的对象实例都在堆中存原创 2021-06-01 20:21:27 · 945 阅读 · 1 评论 -
一文看懂Java内存模型(JMM)
文章目录Java内存模型介绍Java内存模型图什么是Java内存模型Java内存模型的意义Java内存模型规范Java内存模型的主要结构1、程序计数器(Program Counter Register)2、Java 虚拟机栈(Java Virtual Machine Stacks)栈帧(Stack Frame)3、本地方法栈(Native Method Stacks)4、堆(Heap)4、方法区(Method Area)运行时常量池(Runtime Constant Pool)5、直接内存(Direct M原创 2021-05-29 00:09:14 · 16071 阅读 · 13 评论 -
Java对象的生命周期
文章目录生命周期概览加载(loading)验证(Verifaction)准备(Preparation)解析(Resolution)解析阶段的静态绑定和动态绑定初始化(Initialization)类的初始化阶段对象的初始化阶段触发对象初始化的场景使用(Using)卸载(Unloading)对象的卸载类的卸载面试十问生命周期概览类生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个流程,其中验证、准备、解析这三个流程也被称之为连接(除了解析外,其他流程是顺序发生的,而解析可以与这些阶段交叉进行,因原创 2021-05-25 19:22:05 · 5293 阅读 · 3 评论 -
JVM双亲委派模型
Java类加载机制类的生命周期类生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个流程,大致可以分为以下三个阶段:其中第一阶段即是完整的类加载过程:加载、验证、准备、解析、初始化。类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class对象,用来封装类在方法区内的数据结构类的加载过程第一步:加载在此阶段,主要做了三件事类加载器(ClassLoader)通过一个类的全限定名来获取其定义的二进原创 2021-05-22 23:52:55 · 1029 阅读 · 5 评论 -
通过jvm指令手册看懂java反汇编源码
1. 栈和局部变量操作1.1 将常量压入栈的指令aconst_null 将null对象引用压入栈iconst_m1 将int类型常量-1压入栈iconst_0 将int类型常量0压入栈iconst_1 将int类型常量1压入栈iconst_2 将int类型常量2压入栈iconst_3 将int类型常量3压入栈iconst_4 将int类型常量4压入栈iconst_5 将int类型常量5压入栈lconst_0 将long类型常量0压入栈lconst_1 将long类型常量1压入栈fc原创 2021-05-05 15:52:33 · 1300 阅读 · 1 评论 -
Java代码的执行原理
JVM字节码执行引擎JVM字节码执行引擎概述所谓的「虚拟机字节码执行引擎」其实就是 JVM 根据 Class 文件中给出的字节码指令,基于栈解释器的一种执行机制。通俗点来说,也就是 JVM 解析字节码指令,输出运行结果的一个过程。接下来我们详细看看这部分内容。栈帧栈帧的基本概念在 Java 中,一个栈帧对应一个方法调用,方法中需涉及到的局部变量、操作数,返回地址等都存放在栈帧中的。每个方法对应的栈帧大小在编译后基本已经确定了,方法中需要多大的局部变量表,多深的操作数栈等信息早以被写入方法的 Co原创 2021-06-06 12:09:45 · 911 阅读 · 3 评论