jvm-垃圾收集器与内存分配策略

感遇 感遇     2022-08-28     587

关键词:

  • 判断对象是否存活
    1. 引用计数法:强引用->软引用(内存溢出异常前第二次回收)->弱引用->虚引用
    2. 可达性分析算法:一个对象到GC Roots没有任何引用链(Reference Chain),则证明此对象不可用
  • 无用的类标准
    1. 该类所有的实例都已回收
    2. 加载该类的ClassLoader已被回收
    3. Class没有在任何地方被引用,及反射
  • 垃圾收集算法:标记-清除算法(CMS)、复制算法(新生代)、标记整理算法
  • HotSpot算法
    1. 枚举根节点:通过一组OopMap,在类加载完成的时候,把对象内什么偏移量是什么类型的数据计算出来,也会在特定位置记录下栈和寄存器中哪些位置是引用
    2. 安全点:
      • 没有为所有指令都生成OopMap,程序并发所有地方都能停下来执行GC,只有到了安全点才能暂停
      • 主动式中断:GC需要中断线程时,设置一个标志,线程执行时主动去轮询这个标志,再中断挂起
  • 垃圾收集器
    1. Young generation:Serial、ParNew、Parallel Scavenge
    2. Tenured generation:CMS、Serial Old、Parallel Old
    3. Serial在Client模式下是很好的选择
    4. ParNew:-XX:ParallelGCThreads来限制垃圾收集的线程数
    5. Parallel Scavenge:达到一定可控制的吞吐量。-XX:GCTimeRatio
    6. Serial Old:在并发收集发生Concurrent Mode Failure时使用
    7. 停顿时间组合:ParNew+CMS
    8. 吞吐量优先:Parallel Scavenge+Parallel Old
    9. CMS:a、默认线程数(CPU数量+3)/4;b、运行期间内存无法满足程序要求会出现Concurrent Mode Failure;c、碎片压缩与频度可以设置
  • 常用参数

    -XX:+PringGCDetails:打印内存回收日志
    -XX:MaxTenuringThreshold=1:晋升到老年代的年龄
    -XX:PretenureSizeThreshold:直接晋升到老年代的对象大小
    -XX:+HandlePromotionFailure:空间分配担保,避免Full GC过于频繁
    -XX:+HeapDumpOnOutOfMemoryError

jvm垃圾收集器与内存分配策略

垃圾收集器与内存分配策略对象存活判断引用计数算法给对象添加一个计数器,每有一个引用+1,当引用失效-1,若为0则不在被使用.可达性分析算法对象是否可到达GCroots或者说GCroots是否是对象的上层节点(祖父节点,父节点)GCroots虚拟... 查看详情

jvm-垃圾收集器与内存分配策略

判断对象是否存活引用计数法:强引用->软引用(内存溢出异常前第二次回收)->弱引用->虚引用可达性分析算法:一个对象到GCRoots没有任何引用链(ReferenceChain),则证明此对象不可用无用的类标准该类所有的实例都已回收... 查看详情

jvm笔记2--垃圾收集器与内存分配策略

垃圾收集器与内存分配策略Java运行时,内存的各个部分中,程序计数器,虚拟机栈,本地方法栈3个区域随线程而生,随线程而灭:栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈的操作。每一个栈帧中分配多... 查看详情

垃圾收集器与内存分配策略(深入理解jvm二)

1.概述垃圾收集(GarbageCollection,GC).当需要排查各种内存溢出、内存泄露问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就需要对这些“自动化”的技术实施必要的监控和调节。Java内存运行时,程序计数器、... 查看详情

jvm垃圾收集器与内存分配策略

  一、垃圾收集的概念  在Java虚拟机运行时数据区中程序计数器、虚拟机栈和本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作,每一个栈帧中分配多少内... 查看详情

jvm之内存分配与回收策略

...是百分之百固定的,其细节决定于当前使用的是哪种垃圾收集器组合,当然还有虚拟机中与内存相关的参数。垃圾收集器组合一般就是Serial+SerialOld和Parallel+SerialOld,前者是Client模式下的默认垃圾收集器组合,后者是Server模式下 查看详情

jvm-垃圾收集器与内存分配策略-20200705

垃圾收集前的判断1:判断对象“死活”引用计数算法:定义略,主流的Java虚拟机并没有选用引用计数算法来管理内存,因为此算法很难解决对象之间的相互循环引用的问题可达性分析算法:定义略,可作为GCRoots的对象包... 查看详情

jvm之垃圾收集器(gc)与内存分配策略

1.为什么要学习GC?GC(GarbageCollection)早于java出现,60年代出现的Lisp中最早使用了GC。当需要排查各种内存溢出、内存漏斗问题时,当垃圾回收成为系统达到更高并发量的瓶颈时,就需要用到gc了。总之,写出高性能的Java程序需要... 查看详情

jvm笔记-02-垃圾收集器与内存分配策略

[TOC]对象的生存与死亡如何判定一个对象的生与死引用计数法ReferenceCounting给对象中添加一个引用计数器,被引用加1,引用失效减1,计数器为0则对象可以被回收。缺点:很难解决对象之间互相循环引用的问题。可达性分析法Reach... 查看详情

jvm笔记-02-垃圾收集器与内存分配策略

[TOC]对象的生存与死亡如何判定一个对象的生与死引用计数法ReferenceCounting给对象中添加一个引用计数器,被引用加1,引用失效减1,计数器为0则对象可以被回收。缺点:很难解决对象之间互相循环引用的问题。可达性分析法Reach... 查看详情

深入理解jvm-垃圾收集器与内存分配策略

在上面一篇文章中,介绍了java内存运行时区域,其中程序计数器、虚拟机栈、本地方法栈3个区域随线程生灭;栈中的栈帧随着方法的进入和退出而有条不紊的执行着进栈出栈的操作,每一个栈帧中分配着多少内存基本上是在类... 查看详情

深入理解jvm:垃圾收集器与内存分配策略

堆里面存放着Java世界差点儿全部的对象实例,垃圾收集器在对堆进行回收前。第一件事情就是要确定这些对象之中哪些还存活,哪些已经死去。推断对象的生命周期是否结束有下面几种方法引用计数法详细操作是给对象加入一... 查看详情

jvm初探-内存分配gc原理与垃圾收集器

JVM初探-内存分配、GC原理与垃圾收集器标签:JVMJVM内存的分配与回收大致可分为如下4个步骤:何时分配->怎样分配->何时回收->怎样回收.除了在概念上可简单认为new时分配外,我们着重介绍后面的3个步骤:I.怎样分配-JVM内存分... 查看详情

深入理解jvm读书笔记二:垃圾收集器与内存分配策略

3.2对象已死吗?3.2.1引用计数法给对象添加一个引用计数器,每当有一个地方引用它的地方,计数器值+1;当引用失效,计数器值就减1;任何时候计数器为0,对象就不可能再被引用了。它很难解决对象之间相互循环引用的问题。3.... 查看详情

jvm之gc日志分析与对象内存分配回收策略(代码片段)

...🐬GC日志分析的重要性:阅读分析虚拟机和垃圾收集器的日志是处理Java虚拟机内存问题必备的基础技能。🐟垃圾收集日志面临的问题:垃圾收集器日志是一系列人 查看详情

jvm--垃圾回收

...有一定了解的基础上,接下来进行JVM垃圾收集的学习垃圾收集器与内存分配策略1.概述  内存的动态分配与内存回收技术已经很成熟了,了解GC和内存分配:一方面为了当出现内存溢出,内存泄漏的时候排查问题,另一方面垃... 查看详情

垃圾收集器与内存分配策略之内存分配与回收策略

垃圾收集器与内存分配策略(六)——内存分配与回收策略对象的内存分配,一般来说就是在堆上的分配(但也可能经过JIT编译后被拆散为标量类型并间接地栈上分配),对象分配的细节取决于当前使用的是哪一种垃圾收集器组合... 查看详情

jvm-垃圾收集算法垃圾收集器内存分配和收集策略

 对象已死么?  判断一个对象是否存活一般有两种方式:  1、引用计数算法:每个对象都有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1。计数为0时可以回收。  2、可达性分析算法(ReachabilityAnal... 查看详情