随笔分类 -  JVM学习笔记

GC Roots的对象有哪些?
摘要:简单来说,作为GC Roots的主要有四种对象: 虚拟机栈(栈帧中的本地变量表)中引用的对象 方法区中类静态属性引用的对象 方法区中常量引用的对象 本地方法栈中JNI引用的对象 高级回答: 1.虚拟机栈(栈帧中的本地变量表)中引用的对象;各个线程调用方法堆栈中使用到的参数、局部变量、临时变量等。 2 阅读全文

posted @ 2023-10-18 22:08 HHHuskie 阅读(2494) 评论(0) 推荐(0)

类加载过程
摘要:大的分为加载、连接、初始化三部分,其中连接包括验证、准备、解析。类的完整生命周期还有之后的使用和销毁两阶段 类加载:JVM加载类文件,并将其字节码表示存储在方法区(或元数据区)中。 验证:JVM对字节码进行验证,以确保它符合Java语言规范和安全性要求。 准备:在方法区中为类的静态变量分配内存并初始 阅读全文

posted @ 2023-09-04 22:30 HHHuskie 阅读(17) 评论(0) 推荐(0)

一个对象的创建过程
摘要:Step1:类加载检查 虚拟机遇到一条 new 指令时,首先将去检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载过、解析和初始化过。如果没有,那必须先执行相应的类加载过程。 Step2:分配内存 在类加载检查通过后,接下来虚拟机将为新生对象分配内存。 阅读全文

posted @ 2023-09-04 11:12 HHHuskie 阅读(24) 评论(0) 推荐(0)

Java对象的内存布局
摘要:由 对象头、实例数据、对齐填充 三部分组成。 1.对象头 Hotspot 虚拟机的对象头包括两部分信息,第一部分用于存储对象自身的运行时数据(哈希码、GC 分代年龄、锁状态标志等等),另一部分是类型指针,即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。 2.实例数据 实 阅读全文

posted @ 2023-09-04 11:11 HHHuskie 阅读(20) 评论(0) 推荐(0)

一文回顾JVM
摘要: 阅读全文

posted @ 2023-04-22 14:46 HHHuskie 阅读(31) 评论(0) 推荐(0)

JMM(java内存模型)
摘要:println方法中加了synchronized关键字,保证了可见性与原子性。 偏向锁用于解决锁重入问题!!(有利有弊,有人认为弊大于利) 阅读全文

posted @ 2022-11-29 19:57 HHHuskie 阅读(201) 评论(1) 推荐(0)

运行期优化
摘要:因为上述代码中的new Obeject();不会在外部使用(不会发生逃逸),因此c2即时编译器会将字节码内容修改(改成能够更快执行的机器码),加快代码的执行。 以上优化存在于生成机器码的过程中 test1为运行期优化,test2为代码优化,test3为编译期优化 第十七次将反射调用改为了正常方法调用 阅读全文

posted @ 2022-11-29 16:24 HHHuskie 阅读(22) 评论(0) 推荐(0)

类加载器(双亲委派!!)
摘要:启动类加载器(c++写的,java代码无法直接访问)、扩展类加载器、应用程序类加载器、用户自定义类加载器(User ClassLoader) 注意:这里存在的加载器之间的层级关系并不是以继承的方式存在的,而是以组合的方式处理的。 打破双亲委派机制的例子:jdbc-driver类(不在JAVA_HOM 阅读全文

posted @ 2022-11-29 09:41 HHHuskie 阅读(24) 评论(0) 推荐(0)

类加载
摘要:符号引用(内部标识)————>>直接引用(内存地址) 阅读全文

posted @ 2022-11-28 21:02 HHHuskie 阅读(19) 评论(0) 推荐(0)

语法糖
摘要:在方法的参数和返回值上,可利用反射获取泛型信息 阅读全文

posted @ 2022-11-28 18:41 HHHuskie 阅读(38) 评论(0) 推荐(0)

图解运行流程
摘要: 阅读全文

posted @ 2022-11-28 15:11 HHHuskie 阅读(45) 评论(0) 推荐(0)

类文件结构
摘要: 阅读全文

posted @ 2022-11-28 12:05 HHHuskie 阅读(23) 评论(0) 推荐(0)

垃圾回收调优
摘要:GC调优始终优先处理新生代 阈值一般设置为75%或80%,预留一部分空间给浮动垃圾,避免CMS退化。 案例1:FullGC和MinorGC频繁。 问题分析:新生代内存空间过小,大量新创建的对象经常占满新生代内存空间(触发MinorGC频繁),并且幸存区空间紧张使得晋升阈值降低,导致很多生命周期较短的 阅读全文

posted @ 2022-11-26 22:08 HHHuskie 阅读(46) 评论(0) 推荐(0)

G1(Garbage First)
摘要:这里的45%指的是老年代占整个堆内存的45% 老年代内存不足,CMS和G1(并发标记以及后续混合收集)优先进行并发垃圾回收,若回收速度大于产生垃圾速度,则维持;否则,进行FullGC(FullGC的stw时间更长)。 阅读全文

posted @ 2022-11-26 18:08 HHHuskie 阅读(382) 评论(0) 推荐(0)

垃圾回收器GC
摘要:垃圾回收器 1.串行 单线程 堆内存较小,适合个人电脑 2.吞吐量优先 多线程 堆内存较大,多核cpu支持 使得单位时间内STW时间最短0.2 + 0.2 = 0.4 3.响应时间优先 多线程 堆内存较大,多核cpu支持 尽可能让STW(stop the world)的单次时间最短 0.1+0.1+ 阅读全文

posted @ 2022-11-26 15:34 HHHuskie 阅读(18) 评论(0) 推荐(0)

相关VM参数
摘要: 阅读全文

posted @ 2022-11-25 20:46 HHHuskie 阅读(16) 评论(0) 推荐(0)

分代回收
摘要:三、分代垃圾回收 阅读全文

posted @ 2022-11-25 20:45 HHHuskie 阅读(27) 评论(0) 推荐(0)

垃圾回收算法
摘要:二、垃圾回收算法 2.1标记清除(特点:速度快;问题:内存碎片多) 2.2标记整理(特点:无内存碎片;问题:速度慢) 2.3复制(FROM+TO;无内存碎片,但需要双倍内存空间) 阅读全文

posted @ 2022-11-25 19:28 HHHuskie 阅读(41) 评论(0) 推荐(0)

垃圾回收
摘要:一、如何判断对象可以回收 1.1引用计数法(Python) 定义:当引用数为0时进行回收 问题:无法解决循环引用 1.2可达性分析算法(Java) (堆空间分析器) GC root原理:通过对枚举GCroot对象做引用可达性分析,即从GC root对象开始,向下搜索,形成的路径称之为引用链。 如果一 阅读全文

posted @ 2022-11-25 18:19 HHHuskie 阅读(118) 评论(0) 推荐(0)

直接内存(操作系统内存)
摘要:定义: 分配和回收原理 若设置 -XX:+DisableExplicitGC (禁用显示的GC) 即代码中的System.gc(); 无效 可能会导致直接内存无法释放;(解决办法:可使用unsafe手动管理直接内存,对直接内存进行释放) 阅读全文

posted @ 2022-11-24 20:52 HHHuskie 阅读(53) 评论(0) 推荐(0)

导航