美文网首页
JVM相关知识点

JVM相关知识点

作者: 长孙俊明 | 来源:发表于2019-10-24 00:08 被阅读0次

垃圾回收机制

不定时的回收不可达的对象。

什么是不可达对象

没有被使用的对象。

怎么判断对象是否可达

1、引用计数算法
大概的意思就是对象被引用一次加一,取消引用一次减一。但是有一个致命的缺点就是对象互相引用。所以该算法jvm不使用。
2、可达性算法
通过一些系列GCROOT作为根节点,当一个对象跟根节点没有任何相连时,则认为该对象为垃圾对象。

什么才能做为GCROOT

可以这样想就知道,堆中数据是共享数据,那么谁来使用共享数据,谁就是GCROOT。
如:

  1. 虚拟机栈中的局部变量表。如:
void methoda() {
  Object object = new Object();
}
  1. 方法区
    如:
private static ClassA = ClassA.getInstance();
  1. 本地方法栈
void methoda() {
  Object object = new Object();
}

怎么回收不可达对象,也就是垃圾对象

通过垃圾回收算法进行回收

  1. 标记-清除
    描述:先标记出需要回收的对象,标记完成后进行清除。
    缺点:清除之后,没有做碎片整理,会导致需要大内存的对象无法存储。如:堆内存零碎空间加起来还有10M,正好新对象所需的内存空间也是10M,但是他放不进去,因为没有一个完整的空间容纳。
  2. 标记-整理
    对标记-删除算法一种优化,也就是删除之后,还能帮我做碎片整理。
    缺点:碎片整理复杂。
    适用场景:老年代。
  3. 复制
    可以说是对标记-整理进行了优化,因为不用考虑整理碎片整理问题,但是它是以牺牲空间为代价。
    描述:内存一分为二(使用区和未使用区),首先标记出需要回收的对象,然后将不需要回收的对象未使用区,接着将之前的使用区全部清空,变成了未使用区。
    缺点:如果可用的对象很多,复制会消耗性能。
    适用场景:可用对象不是很多时。如:新生代
    新生代和老年代概念是从分代收集提出的,分代收集是针对着垃圾回收特点不同,将Java堆分为新生代和老年代,新生代采用复制算法,老年代采用标记-整理或标记-删除

新生代工作流程

第一个minor gc流程
Eden满时,发生一次minor gc,将存活的对象移动到from区。
第二次minor gc流程
Eden满时,发生一次minor gc,将Eden和from区存活对象移动到to区,清除Eden和from区。
第三次minor gc流程
Eden满时,发生一次minor gc,将Eden和to区存活对象移动到from区,清除Eden和to区。

标记-清除、标准-整理、复制算法实现,也就是垃圾回收器

类加载机制

什么是类加载机制

虚拟机把class文件加载到内存,并对数据进行验证、准备、解析和初始化,最终转换到虚拟机直接能使用的java类型。

初始化时机

1、new时
2、反射时

类加载器

从jvm来讲,分为两种,一种是bootstarpclassloader启动类加载器,所有其他的类加载器。
从java开发者角度来讲,分为四种,bootstrapclassloader启动类加载器、扩展类加载器、系统加载器和自定义加载器
JVM默认使用双亲委派类加载机制,意思是说先加载父类在加载子类

双亲委托模型机制

一个类加载器收到加载类请求时,它不会尝试去加载类,而是委托给其父类加载器去完成,但父类加载器不能完成这个加载请求时,子类加载器才会尝试去加载。

运行时数据区

image.png
程序计数器

简单理解,就是一个程序执行顺序的标记。

虚拟机栈

虚拟机栈是线程私有的,每个方法在执行时,都会创建一个栈帧存放到虚拟机栈中,执行完毕后,从虚拟机栈中移出。创建栈帧的目的是为了存放局部变量表、操作数栈和动态链接。


image.png

堆是共享数据区,用于存放对象实例和数组。

方法区

方法区是共享数据区,用户存放类信息,常量,静态变量,静态方法。

相关文章

  • 后端指路手册(建议收藏):一文告诉你后端都要学习什么?应该从哪里

    1. 语言相关 1.1 Java 核心知识点: Java的类加载机制 JVM相关:JVM内存模型和结构,GC原理,...

  • Java后端技术栈梳理

    1. 语言相关 1.1 Java 核心知识点 Java的类加载机制 JVM相关:JVM内存模型和结构,GC原理,性...

  • JVM01——JVM内存区域的构成

    从本文开始将为各位带来JVM方面的知识点,关注我的公众号「Java面典」了解更多Java相关知识点。 JVM内存主...

  • JVM相关知识点

    1、java中的内存模型 gc内存模型:主要包括栈、堆、程序计数器,其中栈和程序计数器是线程私有的 1)栈:虚拟机...

  • JVM相关知识点

    1.方法区和堆都是供所有线程共享的。2.程序计数器、虚拟机栈、本地方法栈这三个区域随线程而生,随线程而灭。 1 程...

  • JVM相关知识点

    垃圾回收机制 不定时的回收不可达的对象。 什么是不可达对象 没有被使用的对象。 怎么判断对象是否可达 1、引用计数...

  • Jvm相关知识点

    Jvm组成部分 1. PC寄存器/程序计数器 一块小的内存空间,作用可以看做是当前线程所执行的字节码的行号指示器。...

  • JVM知识点——Jvm内存相关考点

    Jvm的知识点汇总共6个大方向:内存模型、类加载机制、GC垃圾回收是比较重点的内容。性能调优部分偏重实际应用,重点...

  • JVM基础知识系列

    JVM基础系列 JVM知识点扫盲系列(1) JVM知识点扫盲系列(2) JVM内存的那些事 JVM类加载的那些事 ...

  • 面试必问:JVM类加载机制详细解析

    前言 在Java面试中,简历上有写JVM(Java虚拟机)相关的东西,JVM的类加载机制基本是面试必问的知识点。 ...

网友评论

      本文标题:JVM相关知识点

      本文链接:https://www.haomeiwen.com/subject/ejzkvctx.html