JVM
文章平均质量分 88
xylitolz
Ta很懒,还没有添加简介
展开
-
JVM之垃圾回收器:7种经典垃圾回收器总结
文章目录往期7种经典垃圾回收器总结垃圾回收器组合怎么选择垃圾回收器?Reference往期JVM之垃圾收集器:Serial 与 Serial Old垃圾回收器JVM之垃圾收集器:ParNew垃圾回收器JVM之垃圾收集器:Parallel与Parallel Old垃圾回收器JVM之垃圾回收器:CMS垃圾回收器JVM之垃圾收集器:G1收集器7种经典垃圾回收器总结截止JDK1.8,一共有7款不同的垃圾收集器,每一款不同的垃圾收集器都有不同的特点垃圾收集器分类作用位置使用算法原创 2021-04-11 20:49:24 · 764 阅读 · 0 评论 -
JVM之垃圾收集器:G1收集器
文章目录简介为什么叫做Garbage First(G1)?G1回收器的特点优势缺点G1收集器的运作过程G1参数设置G1回收器的常见操作步骤G1回收器的适用场景Region的使用介绍设置H的原因Reference简介官方给G1设定的目标是:在延迟可控的情况下获得尽可能高的吞吐量,开创了收集器面向局部收集的设计思路和基于Region的内存布局形式G1 (Garbage- First)是一款面向服务端应用的垃圾收集器,主要针对配备多核CPU及大容量内存的机器,以极高概率满足GC停顿时间的同时,还兼具高原创 2021-04-11 20:33:02 · 288 阅读 · 0 评论 -
JVM之垃圾回收器:CMS垃圾回收器
文章目录CMS工作原理总结CMS变化ReferenceCMS垃圾回收器简介JDK1.5时期,HotSpot推出了一款在强交互应用中有划时代意义的垃圾收集器:CMS(Concurrent-Mark-Sweep)收集器,这款收集器是HotSpot虚拟机中第一款真正意义上的并发收集器,它第一次实现了让垃圾收集线程与用户线程同时工作回收方式标记-清除算法、并发回收和"Stop-the-world"机制回收区域老年代应用场景CMS收集器的关注点是尽可能缩短垃圾收集时用原创 2021-04-11 20:28:01 · 1004 阅读 · 0 评论 -
JVM之垃圾收集器:Parallel与Parallel Old垃圾回收器
文章目录简介设置Reference简介Parallel ScavengeParallel Old简介和ParNew收集器不同,Parallel Scavenge收集器的目标是达到一个可控制的吞吐量(Throughput),它也被称为吞吐量优先的垃圾收集器自适应调节策略也是Parallel Scavenge与ParNew一个重要区别Parallel收集器在JDK1.6时提供了用于执行老年代垃圾收集的Parallel Old收集器,用来替代老年代的Serial Old收集器原创 2021-04-06 21:24:18 · 690 阅读 · 0 评论 -
JVM之垃圾收集器:ParNew垃圾回收器
文章目录简介ParNew 与 Serial 对比设置Reference简介ParNew简介如果说Serial GC是年轻代中的单线程垃圾收集器,那么ParNew收集器则是Serial收集器的多线程版本Par是Parallel的缩写New:只能处理新生代ParNew是很多JVM运行在Server模式下新生代的默认垃圾收集器回收方式复制算法、并行回收和"Stop-the-world"机制回收区域新生代ParNew 与 Serial 对比由于ParNew收原创 2021-04-06 21:19:34 · 756 阅读 · 0 评论 -
JVM之垃圾收集器:Serial 与 Serial Old垃圾回收器
文章目录简介设置总结Reference简介SerialSerial Old简介HotSpot中Client模式下的默认新生代垃圾收集器Client模式下的默认老年代垃圾收集器回收方式采用复制算法、串行回收和"Stop-the-world"机制的方式执行内存回收标记-压缩算法、串行回收和"Stop-the-world"机制回收区域新生代老年代Serial Old在Server模式下主要有两个用途:与新生代的Parallel Scavenge配合原创 2021-04-06 21:03:43 · 1099 阅读 · 0 评论 -
JVM之MinorGC、MajorGC和FullGC的对比
文章目录1. 概述2. Minor GC3. Full GC4. 补充Reference1. 概述针对HotSpot VM的实现,它里面的GC其实准确分类只有两大种:Partial GC:不是完整收集整个Java堆的垃圾收集Young GC/Minor GC:只收集young gen的GCOld GC/Major GC:只收集old gen的GC只有CMS GC会有单独收集老年代的行为很多时候Major GC会和Full GC混淆使用,需要具体分辨是老年代回收还是整堆回收M原创 2021-03-29 21:34:15 · 480 阅读 · 0 评论 -
JVM之对象的创建及内存布局
文章目录1. 对象的创建1). 判断对象对应的类是否加载、链接、初始化2). 为对象分配内存3). 处理并发安全问题4). 初始化分配到的空间5). 设置对象的对象头6). 执行init方法进行初始化2. 对象的内存布局2.1 对象头(Header)2.1.1 Mark Word2.1.2 Klass Pointer2.2 实例数据2.3 对齐填充2.4 new Object()占用几个字节3. 对象的访问定位3.1 句柄访问3.2 直接指针(HotSpot)Reference1. 对象的创建1).原创 2021-03-24 09:28:58 · 197 阅读 · 0 评论 -
JVM之垃圾回收:垃圾清除
文章目录1. JVM中比较常见的三种垃圾收集算法2. 指针碰撞(Bump the Pointer)3. 空闲列表(Free List)4. 分代收集算法5. 增量收集6. 分区算法Reference1. JVM中比较常见的三种垃圾收集算法标记-清除算法 Mark-Sweep标记-复制算法简称复制算法 Mark-Copying标记-压缩算法或标记-整理 Mark-Compact标记-清除算法(Mark-Sweep)标记-复制算法(Mark-Copying)标记-压缩算法(Mark原创 2021-03-18 20:54:58 · 158 阅读 · 0 评论 -
JVM之运行时数据区总结
往期JVM之运行时数据区:方法区JVM之运行时数据区:堆区JVM之运行时数据区:虚拟机栈JVM之运行时数据区:程序计数器JVM之运行时数据区:本地方法栈总结PC程序计数器虚拟机栈本地方法栈HotSpot JVM中直接将本地方法栈和虚拟机栈合二为一堆方法区是否线程私有是是是否否生命周期和线程一致和线程一致和线程一致和JVM一致和JVM一致是否存在GC否否否是GC的重点区域是是否存在OOM否会会(和虚拟机栈情况相同)原创 2021-03-17 21:36:25 · 58 阅读 · 0 评论 -
JVM之垃圾回收:垃圾标记
文章目录1. 垃圾标记阶段:对象存活判断1.1 两种方式1.2 循环引用1.3 GC Roots1.4 查看GC Roots的工具Reference1. 垃圾标记阶段:对象存活判断1.1 两种方式在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分内存中哪些是存活对象,哪些是已经死亡的对象,只有标记为已经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间。判断对象存活一般有两种方式:引用计数算法可达性分析算法引用计数算法(Referenc原创 2021-03-16 22:36:55 · 138 阅读 · 0 评论 -
JVM常用参数总结
文章目录GC相关堆相关方法区相关栈相关执行引擎直接内存官方地址GC相关参数说明-XX:+PrintGCDetails输出详细的GC处理日志-XX:+PrintGC输出简要的GC信息-verbose:gc输出简要的GC信息-XX:+PrintFlagsInitial查看所有参数的默认初始值-XX:+PrintFlagsFinal查看所有参数的最终值(参数可能会存在修改)-Xnoclassgc关闭对类的GC堆相关参数说明原创 2021-03-14 21:15:30 · 84 阅读 · 5 评论 -
JVM之运行时数据区:方法区
文章目录1. 运行时数据区内部结构2. 栈、堆、方法区的交互关系3. 方法区(Method Area)3.1 概述3.2 HotSpot中方法区的演进3.2.1 jdk73.2.2 jdk83.3 方法区的内部结构3.3.1 全局常量 vs non-final的类变量3.3.2 为什么需要常量池3.3.3 常量池中有什么?3.3.4 运行时常量池 vs 常量池3.3.5 方法区在JDK6、JDK7、JDK8中的演进细节3.3.6 永久代为什么要被元空间替换?3.3.7 StringTable为什么要调整位置原创 2021-03-14 20:40:32 · 81 阅读 · 0 评论 -
JVM之运行时数据区:堆
文章目录1. 运行时数据区内部结构2. 堆2.1 概述2.2 内存细分2.3 堆空间内部结构2.3.1 JDK72.3.2 JDK82.4 年轻代与老年代2.5 为什么需要把Java堆分代?HotSpot VM整体结构Reference1. 运行时数据区内部结构2. 堆一个进程就对应着一个JVM实例,一个JVM实例就有一个运行时数据区,只有一个方法区和堆,一个进程中的多个线程共享方法区和堆空间,每个线程有自己独立的程序计数器、本地方法栈、虚拟机栈2.1 概述堆区在JVM启动时即被创建,空间原创 2021-03-13 20:46:06 · 85 阅读 · 0 评论 -
JVM之运行时数据区:本地方法栈
文章目录1. 本地方法接口(Native Method Interface, JNI)1.1 什么是本地方法?2. 运行时数据区内部结构3. 本地方法栈4. HotSpot VM整体结构Reference1. 本地方法接口(Native Method Interface, JNI)1.1 什么是本地方法?简单地讲,一个Native Method就是一个Java调用非Java代码的接口。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java原创 2021-03-13 20:40:02 · 102 阅读 · 0 评论 -
JVM之运行时数据区:虚拟机栈
文章目录1. 运行时数据区内部结构2. Java虚拟机栈2.1 虚拟机栈出现背景2.2 内存中的堆与栈2.3 简介2.4 作用2.5 栈中可能出现的异常2.6 栈帧的内部结构2.6.1 简介2.6.2 方法中定义的局部变量是否线程安全?HotSpot VM整体结构Reference1. 运行时数据区内部结构2. Java虚拟机栈2.1 虚拟机栈出现背景由于跨平台性的设计,Java的指令都是根据栈来设计的(使用零地址指令,又叫堆栈运算指令,必须依赖于栈,操作数都来自栈);不同平台CPU架构不同,原创 2021-03-13 20:36:39 · 163 阅读 · 0 评论 -
JVM之运行时数据区:程序计数器(PC寄存器)
文章目录1. 运行时数据区内部结构2. PC Register2.1 简介2.2 作用2.3 使用PC寄存器存储字节码指令地址有什么用?2.4 PC寄存器为什么会被设定为线程私有?3. HotSpot VM整体结构Reference1. 运行时数据区内部结构2. PC Register2.1 简介JVM中的程序计数器(Program Counter Register)并非广义上所指的物理寄存器,而是对物理PC寄存器的一种抽象模拟,或许将其翻译为PC计数器(或指令计数器)会更加贴切。它是一块很原创 2021-03-13 20:03:04 · 127 阅读 · 0 评论 -
JVM之类加载子系统
文章目录1. 类加载器子系统的作用2. 类加载过程3. 类加载器的分类4. 双亲委派机制4.1 简介4.2 工作原理4.3 双亲委派机制的优势5. HotSpot VM整体结构Reference1. 类加载器子系统的作用类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识(cafe)ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定加载的类信息存放于一块称为方法区的内存空间。除.原创 2021-03-05 21:34:36 · 105 阅读 · 0 评论 -
虚拟机和Java虚拟机简介
文章目录虚拟机和Java虚拟机简介1. 虚拟机2. Java虚拟机2.1 简介2.2 作用2.3 特点3. 基于栈的指令集架构和基于寄存器的指令集架构3.1 基于栈式架构的特点3.2 基于寄存器架构的特点3.3 举例3.3.1 基于栈的计算流程(以Java虚拟机为例)3.3.2 基于寄存器的计算流程(以ARM指令集为例)3.4 总结4 HotSpot VM4.1 简介4.2 整体结构5 JVM的生命周期5.1 虚拟机的启动5.2 虚拟机的执行5.3 虚拟机的退出Reference虚拟机和Java虚拟机.原创 2021-03-03 21:47:15 · 428 阅读 · 1 评论