美文网首页
jvm学习笔记

jvm学习笔记

作者: 兮兮码字的地方 | 来源:发表于2021-02-16 16:13 被阅读0次

jvm负责把class文件翻译为对应操作系统的机器码并执行。

jvm分为执行引擎、类加载器、临时数据区(堆,方法区(元空间),虚拟机栈,本地方法栈,程序计数器)。

1.堆

年轻代:Eden,Survivor(s1和s2)。

老年代。

刚new出来的对象放Eden,满了后触发minor gc。存活的对象放入第一个Survivor。

根据可达性算法,没有被gc roots根(比如:线程栈的本地变量、静态变量、本地方法栈的变量)链条引用的对象都会被标记回收。

当Eden再次满了就再次触发minor gc,针对年轻代的Eden,Survivor回收,存活的对象复制到第二个Survivor,然后直接清空Eden和第一个Survivor。

当下次Eden满了就再次触发minor gc,存活对象复制到第一个Survivor,如此反复。每经行一次minor gc,Survivor里对象年龄+1,当年龄达到了15时,就会被移到老年代(或一批计划被移到Survivor的对象大小超过了Survivor空间的一半,或是大对象都会被直接移动到老年代)。

当老年代满了则会触发full gc。

minor gc和full gc都会STW。

minor gc的时间很短,但full gc时间很长。

jvm调优就是减少STW次数,特别是full gc次数,以及full gc时间。

调优举例:电商大促时,每秒都会产生大量对象(生命周期很短),正常这些对象很快就会被回收,但年轻代配置太小,容易导致每次minor gc时都会有一批对象大小超过minor空间的一半而直接被移到老年代,而这些对象本身不应该被放入老年代,很快老年代被占满导致频繁full gc,影响用户体验。

根据业务场景计算对象大小合理配置各分代大小,减少full gc。

2.方法区(元空间)

常量,静态变量(对象地址),类元信息。

3.虚拟机栈

用来存放方法执行时的数据,线程私有。

栈帧(一个方法对应一个栈帧)

-局部变量表:存一些方法内的变量(非对象)。

-操作数栈:存要用来赋值的涉及到计算的数据。

-动态链接:涉及到其他语言的库。

-方法出口:方法执行完返回父方法的位置。

4.本地方法栈

调用其他语言的方法时存放数据的区域。

5.程序计数器

存放线程执行到方法的具体位置。为了线程被挂起后再次执行时找到执行位置。

相关文章

  • JVM学习笔记(3)-垃圾收集算法

    JVM学习笔记(1)-内存管理机制 JVM学习笔记(2)-内存分配与回收 垃圾收集算法 JVM垃圾收集算法有四种:...

  • JVM学习笔记

    JVM学习笔记 JVM简介 JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种...

  • Java笔记之 1. JVM学习

    一、 JVM学习笔记 JVM:Java Virtual MachineJVM总感觉那么的神秘,底层的东西,试着把一...

  • 【JVM篇】【JVM的组成】

    【JAVA】【JVM篇】【JVM的组成】 来自二线的码农笔记,用自己的理解总结知识点,互相学习 1. JVM概念 ...

  • JVM学习笔记

    1. JVM运行时数据区域 1.1. 程序计数器 是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示...

  • JVM学习笔记

    本文所有内容来于:http://stuq.com/a/100ww java代码是如何执行的 java代码是运行于j...

  • JVM学习笔记

    JVM基本结构 PC寄存器 每个线程拥有一个PC寄存器 线程创建时创建PC寄存器 指向下一条指令的地址 执行本地方...

  • JVM 学习笔记

    java虚拟机(JVM)学习笔记,以便日后温习。 1.运行时数据区 1.1 程序计数器 是一块比较小的内存空间,可...

  • JVM学习笔记

    1)Java内存模型 程序计数器:当前执行的字节码行号指示器,字节码指示器就根据这个计数器的值来选取下一条指令,分...

  • JVM学习笔记

    JVM学习笔记 上周观看了圣思园张龙老师所讲的<深入了解JVM>课程,结合自己的理解对有关类加载器的内容(Clas...

网友评论

      本文标题:jvm学习笔记

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