![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JVM—hotspot
基于hotspot 做笔记
DO your like
冇七年
展开
-
物理分代垃圾回收器
内存结构内存分配堆上分配 大多数情况在eden【年轻代中的一个区域】上分配,偶尔会直接在old【老年代】上分配,细节取决于GC的实现。 栈上分配(发生了指针逃逸,又叫指针逃逸分析——JVM优化) 原子类型的局部变量。GC1、在物理分代模型上,GC 从思想上分为 Young GC 和 Full GC,从实现上分为Minor GC、Major GC。【注:】方法区的数据是类信息,常量池什么的,而Young、Old是对象信息2、Young GC(通过 Minor GC 具体实现..原创 2023-08-02 19:18:30 · 181 阅读 · 0 评论 -
应用RSet的垃圾回收器
在CMS中,有RSet的概念只能做老年代回收器 在老年代中有一块区域用来记录指向新生代的引用 在进行Young GC时,扫描根时,仅仅需要扫描这一块区域,而不需要扫描整个老年代。 这是一种point-out(外部指针)在G1中RSet的概念,YoungGC 阶段:使用point-in(内部指针)来解决 标记哪些新生代引用老年代 原因在于每次GC时,所有新生代都会被扫描, 检测从年轻代指向年老代的对象 分区中存放的是卡表 如果引用的对象很多,赋值器需要对每个引用做处理,赋值器开.转载 2021-12-06 08:39:43 · 403 阅读 · 0 评论 -
JVM内存结构
JVM流程图JVM流程图细化原创 2021-10-26 20:23:35 · 63 阅读 · 0 评论 -
Class文件
Magic NumberMinor VersionMajor Versionconstant_pool_countconstant_poolaccess_flagsthis_classsuper_classinterfaces_countinterfacesfields_countfieldsmethods_countmethodsattributes_countattributes原创 2021-09-12 10:27:21 · 62 阅读 · 0 评论 -
JVM方法区实现gc
方法区和堆一样,都是线程共享的内存区域,被用于存储已被虚拟机加载的类信息(字段等)、即时编译后的代码(方法字节码)、静态变量和常量等数据。根据Java虚拟机规范的规定,方法区无法满足内存分配需求时,也会抛出OutOfMemoryError异常,虽然规范规定虚拟机可以不实现垃圾收集,因为和堆的垃圾回收效率相比,方法区的回收效率实在太低,但是此部分内存区域也是可以被回收的。方法区的垃圾回收主要有两种,分别是对废弃常量的回收(常量池的回收)和对无用类的回收(类的卸载)。当一个常量对象不再任何地方被引用转载 2021-05-30 08:08:59 · 371 阅读 · 0 评论 -
字符引用
Java类从加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括,加载,验证,准备,解析,初始化,卸载,总共七个阶段。其中验证,准备,解析统称为连接。而在解析阶段会有一个步将常量池当中二进制数据当中的符号引用转化为直接引用的过程。符号引用:符号引用以一组符号来描述所引用的目标。符号引用可以是任何形式的字面量,只要使用时能无歧义地定位到目标即可,符号引用和虚拟机的布局无关。个人理解为:在编译的时候一个每个java类都会被编译成一个class文件,但在编译...转载 2020-07-11 12:47:25 · 482 阅读 · 0 评论 -
类加载机制
在介绍双亲委派机制的时候,不得不提ClassLoader。说ClassLoader之前,我们得先了解下Java的基本知识。 Java是运行在Java的虚拟机(JVM)中的,但是它是怎么就运行在JVM中了呢?我们在IDE中编写的Java源代码被编译器编译成.class的字节码文件。然后由我们得ClassLoader负责将这些class问价加载到JVM中去执行。 JVM中提供了三层的C...原创 2020-02-03 23:03:51 · 122 阅读 · 0 评论 -
008-空间分配担保
抛几个问题:1.谁进行空间担保? JVM使用分代收集算法,将堆内存划分为年轻代和老年代,两块内存分别采用不同的垃圾回收算法,空间担保指的是老年代进行空间分配担保2.什么是空间分配担保? 在发生Minor GC之前,虚拟机会检查老年代最大可用的连续空间是否大于新生代所有对象的总空间, 如果大于,则此次Minor GC是安全的 如果小于,则虚拟机会查看HandlePromotionFailure设置值是否允许担保失败。如果HandlePromotionFailure=原创 2021-05-29 21:40:36 · 142 阅读 · 0 评论 -
007-JVM垃圾回收器
标记清除1、把无用的内存标记2、清除标记内存,清除只是把内存的起始结束地址做一个记录即可,不需要别的处理优点:速度快缺点:容易产生内存碎片,如果此时插入一个数组对象,实际内存空间够用,但是由于各自不连续,导致数组对象无法存储标记整理1、标记无效内存2、删除无效内存并重新排布内存对象,避免了碎片产生,但由于要把有用的内存对象前移,因此要改动内存和对象引用,导致速度慢优点:防止内存碎片缺点:速度慢...............原创 2021-05-28 12:30:58 · 3692 阅读 · 0 评论 -
006-JVM生命周期
启动通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成,这个类是由虚拟机的具体实现指定执行一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序程序开始执行时jvm才运行,程序结束才停止执行一个所谓的Java程序其实是在执行一个jvm进程退出程序正常执行结束程序在执行过程中遇到了异常或者错误而终止由于系统错误而终止线程执行了Runtime、System的exit方法,或者Runtime类的hal.原创 2021-07-20 05:21:05 · 88 阅读 · 0 评论 -
006-垃圾回收机制-5种引用类型
5种引用强引用 软引用 弱引用 虚引用 终结器引用可达分析对各种引用的管理图示强引用:比如图中的A1对象,被c对象和b对象强引用,回收时会被保留下来,当b、c都不再引用a1,则a1会被回收软引用:比如图中的a2对象,c虽然通过软引用的方式引用a2,但是如果内存不够时,gc是会回收a2的弱引用:不管内存够不够,只要gc执行,就会被成功回收如果a2、a3被回收了,此时软/弱引用是被强引用的,后面如果需要释放内存也要去删除软/弱引用,为了方便只需要使用引用队列来存放软引用和弱引用,对原创 2021-05-18 15:36:48 · 296 阅读 · 0 评论 -
005-方法区
方法区保存在着被加载过的每一个类的信息;这些信息由类加载器在加载类的时候,从类的源文件中抽取出来;static变量信息也保存在方法区中;可以看做是将类(Class)的元数据,保存在方法区里;方法区是线程共享的;当有多个线程都用到一个类的时候,而这个类还未被加载,则应该只有一个线程去加载类,让其他线程等待;方法区的大小不必是固定的,jvm可以根据应用的需要动态调整。jvm也可以允许用户和程序指定方法区的初始大小,最小和最大限制;方法区同样存在垃圾收集,因为通过用户定义的类加载器可以动态扩展原创 2021-05-09 18:29:17 · 107 阅读 · 0 评论 -
004-堆空间
定义通过 new 或者 class 方式创建的对象都会存在堆内存特点线程共享,堆中对象都得考虑线程安全 垃圾回收内存溢出:OutOfMemoryError默认的堆内存是4g,现在改成8m,可以发现只有2525个元素就满了堆内存诊断工具:jps工具:查看当前系统执行的Java程序 jmap工具:查看堆内存的占用情况 jconsole工具:图形界面,多功能,可检测堆内存,线程,cpu等,而且可以实时检测 jvisualvm工具:图形界面,比jconsole更..原创 2021-05-09 18:20:34 · 86 阅读 · 0 评论 -
003-栈空间
定义栈内存中会将调用的方法封装进栈帧,对栈帧内代码逐行执行,如下图,main方法先执行,栈内加载栈帧1,栈帧1中执行的代码有调用Sub对象的test方法,加载栈帧2,栈帧2在执行时有调用父类方法,加载栈帧3加载逻辑:FILO:先进后出,执行完栈帧3,如果有return值,且栈帧2有声明变量接收,则会直接接收,反之就会被回收(对象会被gc回收)问题:1.垃圾回收是否涉及栈: 不涉及2.栈内存是否越大越好: 不是,内存大,分配的线程会减少,每个线程都...原创 2021-05-09 15:36:54 · 372 阅读 · 0 评论 -
002-程序计数器
程序计数器,一个线程一个栈,每个栈分配一个程序计数器,程序计数器分给此栈的线程会调度上图的字节码,下图是调度的整体流程:线程在程序计数器存进地址0,——>线程调用解释器,解释器去程序计数器获取地址,——>解释器去对应地址取字节码(getstatic)——>转为机器码——>提交cpu——>线程在程序计数器存进地址3...循环往复总结:作用: 负责存储下一条jvm指令的地址 特点: 线程私有 是唯一不会内存溢出的内存空间 ...原创 2021-01-28 13:56:25 · 128 阅读 · 0 评论 -
001-jvm学习路线
链接:https://www.bilibili.com/video/BV1yE411Z7AP?p=5原创 2021-01-28 12:35:12 · 142 阅读 · 0 评论 -
书签
待49原创 2021-05-16 15:09:46 · 79 阅读 · 0 评论