JVM

作者: 你比大笨钟还笨 | 来源:发表于2018-10-31 17:03 被阅读0次

一、JAVA虚拟机区分:

  1. 堆内存:年轻代(eden(对象优先分配在此处)、存活区)、老年代;
  2. 非堆内存:持久代,存放方法、动态的变量/常量、线程栈

二、分区目的

  1. 为什么要分为年轻代和老年代?
    减少FGC的出现频率。
  2. 年轻代为什么要分为eden和存活区?
    减少垃圾回收到老年代的速度。

三、YGC和FGC

  1. YGC:只会在eden区满时触发YGC
    eden区满时,触发YGC(垃圾回收),这时JVM会判断eden中的对象是否还有引用指向它,没有引用的回收掉,有引用的挪到存活区。
    存活区:大小相等,位置互换。
    第二次YGC时会把还在引用的对象挪到S1,然后判断S0里的对象是否已经引用完。如果引用完,则回收掉;若未引用完,则从S0挪到S1.
  2. FGC触发条件
    • 老年代满了,会触发FullJC,这时触发FullJC是对整个堆内存(年轻代、老年代)和非堆内存(持久代)进行垃圾回收;
    • 持久代(非堆内存)满了也会触发fullgc;
    • 代码调用,人工执行system.gc runtime.cn 也会调用fullgc;
    • 执行了悲观策略(基于一些框架的时候会触发悲观策略),例如 jmap -dump
  3. FGC可以关闭手动调用。
    注:JVM调优时,尽量减少FGC的出现频率。因为FGC的时候会暂停线程引用,影响用户体验。YGC同

四、老年代

  1. 堆对象什么时候进入老年代?
    • 长期存活的进入老年代:触发15次YGC还存活的对象,进入老年代;
    • 大对象(存活区放不下)直接进入老年代。
  2. 老年代满了怎么办?
    • 如果多次FGC后,FGC残留把老年代空间占满了,这时只能重启服务。
    • 老年代满后会提示堆内存溢出。

相关文章

  • 深入JVM内核 目录

    深入JVM内核 目录 深入JVM内核1 初识JVM深入JVM内核2 JVM运行机制深入JVM内核3 常用JVM配置...

  • JVM内存模型(jvm 入门篇)

    概述 jvm 入门篇,想要学习jvm,必须先得了解JVM内存模型,JVM内存模型,JVM内存模型,JVM内存模型,...

  • Jvm(一)-Java虚拟机的内存管理

    [toc] JVM JVM回顾 1. 什么是 JVM JVM是Java Virtual Machine(Java虚...

  • JVM介绍系列文章

    知晓JVM系列(一):对JVM总览知晓JVM系列(二):JVM内存管理机制与优化初探知晓JVM系列(三) :常用的...

  • 科普

    1.JVM/JRE/JDK关系JVM

  • JVM

    JVM之内存模型JVM之对象定位与访问JVM之Java垃圾回收机制JVM之类加载

  • JVM

    栈容量由-Xss指定深入理解JVM—JVM内存模型 JVM内存模型和JVM参数的关系

  • JVM基础知识系列

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

  • (过时、作废)android 多线程 — GC

    简单解析下JVM 先说下 JVM,虽然上篇文章在讲内存时介绍了 JVM ,但是我在这里还是以 JVM 开头,JVM...

  • 技术文章罗列

    JVM JVM知识点详解JVM初步诊断JVM内存模型 Java Api java8 stream Api讲解(上)...

网友评论

      本文标题:JVM

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