
java虚拟机学习
文章平均质量分 87
九死九歌
丹书铁契!
展开
-
【JVM学习笔记】类的加载过程
一、类的生命周期概述二、类的加载阶段 Loading1 加载完成的操作2 二进制流的获取3 类模型与class实例的位置 反射的使用:import java.lang.reflect.Method;import java.lang.reflect.Modifier;public class Test { public static void main(String[] args) { try { Class<?> cls = Class.forN原创 2022-04-14 18:59:16 · 621 阅读 · 0 评论 -
【JVM学习笔记】字节码指令集解析
一、class的文件结构1 前端编译器 AOT效率较高,但只支持Linux平台。2 透过字节码查看代码执行细节原创 2022-03-18 21:53:24 · 634 阅读 · 0 评论 -
【JVM学习笔记】GC——JAVA语言的垃圾回收
一、垃圾回收概述1 什么是GC,为何要GC?2 早期垃圾回收3 Java的垃圾回收机制二、垃圾回收的相关算法1 垃圾回收算法的概述 垃圾回收分为标记阶段和清除阶段,标记阶段找垃圾,清除阶段清掉找到的垃圾。 标记阶段使用的算法有引用计数算法、可达性算法。 清除阶段使用的算法有标记-清除算法、复制算法、标记-压缩算法、分代收集算法、增量收集算法、分区算法。2 标记阶段:引用计数算法3 标记阶段:可达性分析算法4 对象的finalization机制原创 2022-02-25 23:22:13 · 479 阅读 · 0 评论 -
【JVM学习笔记】超重点——字符串String
一、String的不可变性二、String底层的HashTable结构 1st,看一个例子:public class StringExr { String str = new String("good"); char[] ch = new char[]{'t', 'e', 's', 't'}; public void change(String str, char[] ch) { str = "test ok"; ch[0] = 'b'; } public static原创 2022-02-20 21:14:54 · 422 阅读 · 0 评论 -
【JVM学习笔记】对象创建、直接内存与执行引擎
一、对象的创建1 对象实例化的几种方式2 从字节码角度看对象的创建package com.spd.jvm;public class Test { public static void main(String[] args) { Object obj = new Object(); }} 对应字节码:0 new #2 // 创建Object对象3 dup // 复制一份栈顶slot并压入栈中4 invokespecial #1 // 调用构造器方法7 ast原创 2022-02-17 22:30:01 · 159 阅读 · 0 评论 -
【JVM学习笔记】运行时数据区
一、运行时数据区与线程概述1 运行时数据区的结构 其中方法区和堆是随着虚拟机的创建而创建摧毁而摧毁,为各个线程所共用。而程序计数器(PC)、本地方法栈(NMS)、虚拟机栈(VMS)则是随着某个线程的创建而创建摧毁而摧毁。 垃圾回收大部分是发生在堆区,但也有一些发生在 方法区/元空间/永久代 中。另外对于JIT编译缓冲,有的书中说是在方法区中,有的书上说是独立于方法区存在,众说纷纭。2 一些比较重要的守护线程 要知道执行Java程序的时候,并不是只有main方法这一个线程。还有很多很多虚拟机原创 2022-02-14 17:15:09 · 380 阅读 · 0 评论 -
《深入了解Java虚拟机》类的加载之被动引用
什么是被动引用?这篇文章里面我们提到过:JVM学习笔记内存与垃圾回收篇 我们来看几个例子。例一package com.spd.jvm;class SuperClass { static { System.out.println("SuperClass.static initializer"); } public static String str = "Hello world!";}class SubClass extends SuperClass { static原创 2021-12-17 14:24:39 · 1687 阅读 · 0 评论 -
【JVM学习笔记】概述
一、java的编译 有句话说java是半编译半解释型语言,因为从*.java到*.class文件的过程是编译。而*.class文件的运行是解释。 但其实*.class文件的运行过程是半编译半解释的。有些需要反复用到的字节码是直接编译成机器指令来执行的。就好比域名的解析,常用访问的域名解析是直接通过本地域名服务器,不常用的才会自顶向下层层解析。如图:二、jvm的指令集 指令集架构有基于栈的指令集架构和基于寄存器的指令集架构。 jvm中使用的就是基于栈的指令集架构。它的好处是不需要硬件支持,原创 2021-12-13 22:39:35 · 1004 阅读 · 0 评论