![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 91
一丨口月
这个作者很懒,什么都没留下…
展开
-
Volatile实现原理
文章目录Volatile底层实现DCL锁DCL需不需要加Volatile???Volatile三大特性:①保证可见性缓存一致性MESI总线嗅探总线风暴②不保证原子性解决不保证原子性添加synchronized/lock锁使用原子类解决③禁止指令重排序指令重排序:as-if-serial语义:happens-before原则:volatile禁止指令重排内存屏障Volatile底层实现保证内存可见性Volatile缓存可见性实现原理:底层实现主要通过汇编lock前缀指令,他会锁定这块区域的缓存(缓存行原创 2022-05-02 14:36:50 · 664 阅读 · 0 评论 -
JVM中标记算法-->漏标问题
文章目录三色标记算法三色标记的类型:三色标记的算法过程:图解:对象丢失问题(漏标)漏标的两个充要条件:CMS采用了增量更新SATB标记算法C1采用的是原始快照Serial Old——Parallel Old——CMS垃圾回收器在垃圾标记阶段都采用了三色标记算法。G1采用STAB算法三色标记算法它是描述追踪式回收器的一种有效的方法,利用它可以推演回收器的正确性。,三色标记的类型:黑色:根对象,或者该对象与它的子对象都被扫描过(对象被标记了,且它的所有field也被标记完了)。灰色:对象本身原创 2022-04-19 14:25:56 · 937 阅读 · 1 评论 -
JVM 垃圾回收器(下)
文章目录⑦G1回收器:区域化分代式Garbage First(G1)横空出世的原因?Garbage First(G1)由来G1参数设置G1收集器的常见操作步骤G1收集器的适用场景分区Region:化整为零Remembered Set(记忆集)G1垃圾回收器的回收过程G1回收过程-年轻代GCG1回收过程-并发标记过程G1回收过程 - 混合回收G1回收可选的过程 - Full GCG1回收的优化建议垃圾回收器总结垃圾收集器的组合关系怎么选择垃圾回收器GC日志分析verbose:gcPrintGCDetails补原创 2022-04-19 13:01:02 · 350 阅读 · 0 评论 -
JVM 垃圾回收器(上)
文章目录GC分类与性能指标垃圾收集器分类按线程数分按工作模式分按碎片处理方式分按工作的内存区间评估GC的性能指标(6)性能指标:吞吐量性能指标:暂停时间吞吐量vs暂停时间不同的垃圾回收器概述垃圾回收器发展史7种经典的垃圾收集器7款经典收集器与垃圾分代之间的关系如何查看默认垃圾收集器①②Serial回收器:串行回收总结③ParNew回收器:并行回收④⑤Parallel回收器:吞吐量优先参数配置⑥CMS回收器:低延迟CMS为什么不使用标记整理算法?设置的参数小技巧JDK后续版本中CMS的变化待续... ...原创 2022-04-18 13:49:38 · 77 阅读 · 0 评论 -
JVM垃圾回收概念补充
文章目录System.gc()的理解手动GC来理解不可达对象的回收内存溢出内存泄漏举例Stop The World垃圾回收的并行与并发并发并行并发和并行对比垃圾回收的并行与并发安全点与安全区域安全点安全区域引用强引用举例总结软引用弱引用虚引用案例终结器引用System.gc()的理解在默认情况下,通过system.gc()者Runtime.getRuntime().gc() 的调用,会显式触发FullGC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。然而system.gc() )调用附原创 2022-04-17 00:23:50 · 189 阅读 · 0 评论 -
JVM垃圾回收的概念和算法
文章目录为什么需要GC早期垃圾回收Java垃圾回收机制优点缺点GC主要活动的区域垃圾回收相关算法标记阶段:引用计数算法循环引用举例小结可达性分析算法思路GC Roots可以是哪些?小结注意对象的finalization机制注意对象的三种状态标记过程代码演示进行GC Roots溯源命令行使用 jmap使用JVIsualVM使用MAT打开Dump文件JProfiler的GC Roots溯源常见的垃圾清除算法清除阶段:标记-清除算法执行过程什么是清除?缺点清除阶段:复制算法核心思想优点缺点注意清除阶段:标记-压缩原创 2022-04-15 22:38:59 · 97 阅读 · 0 评论 -
JVM执行引擎
文章目录执行引擎概述执行引擎的工作流程Java代码编译和执行过程机器码、指令、汇编语言机器码指令指令集汇编语言高级语言字节码什么是解释器(Interpreter)解释器分类Java代码的执行分类什么是JIT编译器HotSpot JVM执行方式概念解释混合模式热点代码热点探测技术方法调用计数器热点衰减回边计数器HotSpotVM 可以设置程序执行方法HotSpotVM中 JIT 分类分层编译策略总结执行引擎概述执行引擎属于JVM的下层,里面包括 解释器、及时编译器、垃圾回收器三部分,执行引擎是Java原创 2022-04-15 00:18:30 · 103 阅读 · 0 评论 -
JVM方法区
文章目录栈、堆、方法区的交互关系方法区的理解HotSpot中方法区的演进设置方法区大小方法区的内部结构类型信息域信息方法(Method)信息non-final的类变量全局常量常量池 VS 运行时常量池常量池class文件常量池字面量符号引用运行时常量池字符串常量池基本类型包装类常量池方法区使用举例方法区的演进细节为什么永久代要被元空间替代?StringTable为什么要调整位置静态变量存放在那里?对象实例化内存布局和访问定位对象的实例化步骤(6步)对象内存布局(3类)对象访问方式(2种)java中4种(re原创 2022-04-12 00:01:27 · 1240 阅读 · 1 评论 -
JVM堆详解
堆堆的核心概念堆针对一个JVM进程来说是唯一的,也就是一个进程只有一个JVM,但是进程包含多个线程,他们是共享同一堆空间的。一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。堆内存的大小是可以调节的。《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区(Thread Local All原创 2022-04-10 18:53:31 · 115 阅读 · 0 评论 -
本地方法栈
Java虚拟机栈于管理Java方法的调用,而本地方法栈用于管理本地方法的调用。本地方法栈,也是线程私有的。允许被实现成固定或者是可动态扩展的内存大小。(在内存溢出方面是相同的)如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机将会抛出一个stackoverflowError 异常。如果本地方法栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的本地方法栈,那么Java虚拟机将会抛出一个outofMemoryError异常。本原创 2022-04-09 18:56:45 · 139 阅读 · 0 评论 -
本地方法接口
文章目录什么是本地方法为什么使用Native Method?与Java环境的交互与操作系统的交互现状什么是本地方法简单地讲,一个Native Methodt是一个Java调用非Java代码的接囗。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern “c” 告知c++编译器去调用一个c的函数。“A native method is a Java method wh原创 2022-04-09 18:56:24 · 91 阅读 · 0 评论 -
JVM虚拟机栈
1 虚拟机栈出现的背景由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。有不少Java开发人员一提到Java内存结构,就会非常粗粒度地将JVM中的内存区理解为仅有Java堆(heap)和Java战(stack)?为什么?首先栈是运行时的单位,而堆是存储的单位**(栈管运行,堆管存储)**栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是原创 2022-04-08 23:50:41 · 106 阅读 · 0 评论 -
运行时数据区及常量池栈
文章目录1 运行时数据区1.程序计数器2.虚拟机栈3.本地方法栈4.堆5.方法区(永久代/元空间)6.常量池:2 线程(计算机术语)JVM系统线程前言本节主要讲的是运行时数据区,它是在类加载完成后的阶段,程序进入了运行时数据区1 运行时数据区Java虚拟机在执行Java程序的过程中会把它管理的内存分为若干个不同的数据区域。这些区域有着各自的用途,一级创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范》中规定,jvm所管理原创 2022-04-07 21:45:07 · 112 阅读 · 0 评论 -
程序计数器
文章目录介绍两个常见问题:代码演示:使用PC寄存器存储字节码指令地址有什么用呢?CPU时间片介绍JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。它是一块很小的内存空间原创 2022-04-05 23:25:35 · 112 阅读 · 0 评论 -
类加载子系统
文章目录1 概述2 类加载器子系统作用3 类加载的流程① 加载阶段② 链接阶段验证:准备:解析:③ 初始化阶段① clinit② init4 类加载器的分类虚拟机自带的加载器①启动类加载器(引导类加载器,Bootstrap ClassLoader)②扩展类加载器(Extension ClassLoader)③应用程序类加载器(系统类加载器,AppClassLoader)用户自定义类加载器查看根加载器所能加载的目录5 双亲委派机制工作原理沙箱安全机制双亲委派机制的优势其它:1 概述详细图↓2 类加载原创 2022-04-04 19:37:23 · 58 阅读 · 0 评论 -
JVM与Java体系结构
敲门石文章目录前言1 Java vs C++2 Java生态圈3 字节码4 多语言混合编程5 Java发展的重大事件6 虚拟机与Java虚拟机1 虚拟机2 JVM初始(Java虚拟机)①应用程序②体系结构③内存管理④特性7 Java代码的执行流程8 JVM的架构模型1.基于栈式架构的特点2.基于寄存器架构的特点9 JVM生命周期1.虚拟机的启动2.虚拟机的执行3.虚拟机的退出10 JVM发展历程1.Sun Classic VM2.Exact VM3.HotSpot VM4.JRockit5.IBM的J96原创 2022-04-03 18:27:01 · 164 阅读 · 0 评论