JVM学习笔记(2)——MarkWord和GC入门

简介: JVM学习笔记(2)——MarkWord和GC入门

一、as if serial

不管如何重排序,单线程执行结果不会变

二、对象的创建过程


三、对象占用多少字节

对象的MarkWord一般占8字节,MarkWord的2位来表示锁的状态,分代年龄也在MarkWord里,表明这个对象被GC回收了多少次

+ UseCompressedClassPointers和+ UserCompressedOops,这2个参数是JVM默认开启的

UseCompressedClassPointers会把_class pointer从8字节压缩到4字节


UserCompressedOops会压缩对象的引用类型的成员变量。如图,String本来应该是8字节,由于这个参数,被压缩到了4字节


21aa3e5f47bc457facbf0175b946e4df.png

MarkWord

为什么GC年龄默认为15 ?

可以看到分代年龄占4位,而4位最多表示16种状态: 0~15。所以年龄最大是15,是这么来的

调用hasCode导致锁升级

四、GC

何为垃圾

单一个对象没被引用的时候,这个对象就成了垃圾

怎么发现垃圾

引用计数器

说白了就是一个对象被引用了,计算器+1,这个对象没被引用,计数器变为0,就回收。

引用计数器无法解决循环引用,A引用B,B引用C,C引用A,那么这3个对象永远无法被回收

GC Root(可达性分析算法)

JVM采用的是GC Root

此算法的核心思想:通过一系列称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索走过的路径称为“引用链”,当一个对象到 GC Roots 没有任何的引用链相连时(从 GC Roots 到这个对象不可达)时,证明此对象不可用。以下图为例:


在Java语言中,可作为GC Roots的对象包含以下几种:

  1. 虚拟机栈(栈帧中的本地变量表)中引用的对象。(可以理解为:引用栈帧中的本地变量表的所有对象)
  2. 方法区中静态属性引用的对象(可以理解为:引用方法区该静态属性的所有对象)
  1. 方法区中常量引用的对象(可以理解为:引用方法区中常量的所有对象)
  2. 本地方法栈中(Native方法)引用的对象(可以理解为:引用Native方法的所有对象)

GC算法

标记-清除算法


简单来说就是把没用的进行标记,然后清楚掉标记的

适用场景:存活对象比较多

缺点:需要进行2次扫描(一次标记,一次清除),容易产生内存碎片

复制算法

开辟一个新的空间,把存活的对象移动到新空间

适用场景:存活对象比较少的情况,因为涉及到了对象的移动,对象存活的少了,移动次数肯定少,效率自然高

标记-压缩

说白了就是把存活对象挤到一起,集中起来,然后剩下的垃圾对象直接清理

分代算法

分代算法其实跟垃圾回收器有关,ZGC之前所有的垃圾回收器都是分代算法。ZGC不在分年轻代和老年代

G1是逻辑分代,物理不分代

目录
相关文章
|
4月前
|
算法 Java
太狠了!阿里技术专家撰写的电子版JVM&G1 GC实战,颠覆了传统认知
JVM是Java语言可以跨平台、保持高发展的根本,没有了 JVM, Java语言将失去运行环境。针对 Java 程序的性能优化一定不可能避免针对JVM 的调优,随着 JVM 的不断发展,我们的应对措施也在不断地跟随、变化,内存的使用逐渐变得越来越复杂。所有高级语言都需要垃圾回收机制的保护,所以 GC 就是这么重要。
|
4月前
|
算法 Java
JVM GC和常见垃圾回收算法
JVM GC和常见垃圾回收算法
48 0
|
4月前
|
缓存 监控 算法
jvm性能调优实战 - 39一次大促导致的内存泄漏和Full GC优化
jvm性能调优实战 - 39一次大促导致的内存泄漏和Full GC优化
73 0
|
4月前
|
架构师 Java
jvm性能调优实战 - 35电商APP后台系统如何对Full GC进行深度优化
jvm性能调优实战 - 35电商APP后台系统如何对Full GC进行深度优化
52 0
|
3月前
|
Oracle Java 编译器
基本概念【入门、 发展简史、核心优势、各版本的含义、特性和优势、JVM、JRE 和 JDK 】(二)-全面详解(学习总结---从入门到深化)
基本概念【入门、 发展简史、核心优势、各版本的含义、特性和优势、JVM、JRE 和 JDK 】(二)-全面详解(学习总结---从入门到深化)
47 1
|
18天前
|
算法 安全 前端开发
JVM的基础入门(上)
JVM的基础入门(上)
49 0
|
3月前
|
算法 Java
深入理解JVM - 解读GC日志
深入理解JVM - 解读GC日志
52 0
|
4月前
|
存储 监控 算法
JVM入门手册(通俗版)
JVM入门手册(通俗版)
32 0
|
4月前
|
Oracle IDE Java
基本概念【入门、 发展简史、核心优势、各版本的含义、特性和优势、JVM、JRE 和 JDK 】(二)-全面详解(学习总结---从入门到深化)(下)
基本概念【入门、 发展简史、核心优势、各版本的含义、特性和优势、JVM、JRE 和 JDK 】(二)-全面详解(学习总结---从入门到深化)
37 1
|
4月前
|
Java 程序员 PHP
基本概念【入门、 发展简史、核心优势、各版本的含义、特性和优势、JVM、JRE 和 JDK 】(二)-全面详解(学习总结---从入门到深化)(上)
基本概念【入门、 发展简史、核心优势、各版本的含义、特性和优势、JVM、JRE 和 JDK 】(二)-全面详解(学习总结---从入门到深化)
32 0