首页
学习
活动
专区
圈层
工具
发布

码仔漫画:“你是什么垃圾?”(下)

作者:iMononoke 博客:https://juejin.im/user/5c629a3051882562191755d8 前几天发了上篇:《码仔漫画:来自JVM的灵魂拷问:“你是什么垃圾?”...引用的作用: 方便Jvm进行垃圾回收 方便开发人员使用 ? 几种类型的继承关系: ? 再比较下 ? ? ? 怎么回收? 1. 标记清除法 这是GC算法的思想基础。将垃圾分为两个阶段: 标记阶段。...通过根节点,标记所有从根节点开始的可达对象,未标记过的对象就是未被引用的垃圾对象。 清除阶段。 清除所有未被标记的对象。 ? 2. 复制算法 为了解决效率问题而出现的。...在垃圾回收时,将正在使用的内存中存活对象复制到未使用的内存块,然后清除使用的内存块中所有的对象。 ? 3....分代收集算法 现代商用虚拟机基本都采用分代收集算法来进行垃圾回收。其实是上面几种算法的结合。 垃圾回收主要是在Young(年轻代)和 Old(老年代)工作。 堆内存空间主要是这样分配的: ? ? ?

37410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    .NET Core 配置GC工作模式与内存的影响

    Workstation GC : 主要应用于单处理器系统,Workstation GC尽可能地通过减少垃圾回收过程中程序的暂停次数来提高性能。...低负载且不常在后台(如服务)执行任务的应用程序,可以在禁用并发垃圾回收的情况下使用工作站垃圾回收。特点是会频繁回收,来阻止一次较长时间的回收。...正是由于有Segment的概念所以回出现内存碎片的问题,所以GC在垃圾回收过程中会进行内存整理,以减少内存碎片提高内存使用率。...Segment的大小取决于系统是32位还是64位,以及它正在运行的垃圾收集器的类型,下表列出了分配时系统所使用的默认值: ?...GC性能, GC Heap数量为1,background GC线程与工作线程有相同优先级,但都低于前台GC线程 ,工作线程(非GC线程)会因为GC工作过程中短暂多次挂起,较并发性能更加(针对Gen2的

    1.7K30

    讨论.NET Core 配置对GC 工作模式与内存的影响

    Workstation GC : 主要应用于单处理器系统,Workstation GC尽可能地通过减少垃圾回收过程中程序的暂停次数来提高性能。...低负载且不常在后台(如服务)执行任务的应用程序,可以在禁用并发垃圾回收的情况下使用工作站垃圾回收。特点是会频繁回收,来阻止一次较长时间的回收。...正是由于有Segment的概念所以回出现内存碎片的问题,所以GC在垃圾回收过程中会进行内存整理,以减少内存碎片提高内存使用率。...Segment的大小取决于系统是32位还是64位,以及它正在运行的垃圾收集器的类型,下表列出了分配时系统所使用的默认值: GC Model 32-bit 64-bit Workstation GC 16...GC性能, GC Heap数量为1,background GC线程与工作线程有相同优先级,但都低于前台GC线程 ,工作线程(非GC线程)会因为GC工作过程中短暂多次挂起,较并发性能更加(针对Gen2的

    3.4K31

    .net 奇葩问题调试经历之3——使用了grpc通讯类库后,内存一直增长......

    工作站垃圾回收既可以是并发的,也可以是非并发的。 并发(或后台 )垃圾回收使托管线程能够在垃圾回收期间继续操作。 后台垃圾回收替换 .NET Framework 4 及更高版本中的并行垃圾回收。...Segment的大小取决于系统是32位还是64位,以及它正在运行的垃圾收集器的类型,下表列出了分配时系统所使用的默认值: [表格] .NET Core GC的几种配置模式: 并发 Workstation...ServerGarbageCollection> false 特点:最大化吞吐量并优化gen2...GC性能, GC Heap数量为1,background GC线程与工作线程有相同优先级,但都低于前台GC线程 ,工作线程(非GC线程)会因为GC工作过程中短暂多次挂起,较并发性能更加(针对Gen2的...每个处理器都有一个专职的GC background线程,background GC线程与工作线程有相同优先级,但都低于前台GC线程,工作线程(非GC线程)会因为GC工作过程中短暂多次挂起,较并发性能更加(针对Gen2

    12700

    ZGC初体验——新一代低延迟收集器

    可能有人不知道ZGC是什么,他是新一代实验性质的垃圾收集器,我们知道GC的评价标准有三个:内存占用、吞吐量、延迟,没有哪个收集器能三者兼备,只能根据场景选择合适的收集器,而ZGC最大的特点就是超低的延迟...,引用官方的说法,无论你的堆有多大,几百G还是几个T,都能在10ms以内完成垃圾回收,远远超越了G1、cms(延迟方面),代价是吞吐量的下降(约10%)和额外的内存占用。...SerialGC ,这个回收器是最历史悠久的回收器了,单线程工作,gc时会挂起用户线程,但也不是没优点,那就是“简单而高效”,内存消耗小,在单核、少核的情景下性能也很好(无上下文切换开销),这也提示我们没有万能的收集器...serialGc:内存占用16% 使用jmeter压测文章页面(模拟20s内共20个用户,每个用户请求10次): 看看压测前后gc信息: 因为内存很小,这次压测直接触发了2次YGC,耗时78ms...总结 其实这次测试算是失败了,原因还是出在服务器上,单核体现不出zgc并行收集的优势,反而有利于serial这样的单线程收集器,内存也比较紧缺,没办法,没钱用配置好的服务器测试…… zgc的初次体验就这样了

    1.4K30

    Java内存泄漏和垃圾收集器是什么样的关系呢

    由于根据JVM规范,每个堆都必须有一个垃圾收集器,这也意味着它不能再清空任何内存,堆被“活动”对象完全占用。 为了更好地理解这种情况是如何产生的,我首先要描述什么是Java中的“活动”对象。...垃圾收集器在GC阶段检查对象是否仍然被引用,如果没有,垃圾收集器会将其标记为“垃圾”,并在稍后进行清理(还有其他GC算法,例如复制收集器或垃圾优先方法,但这些方法与理解无关)。...垃圾收集器根是未详细引用的对象,负责将引用的对象保留在内存中。如果一个对象没有被GC根直接或间接引用,它将被标记为“不可访问”并被释放到垃圾收集。...垃圾收集根有三种类型: 线程堆栈上的临时变量 类的统计变量 JNI中的特殊本机引用 这个具体的例子是最好的方式来说明这一点: public class MyFrame extends javax.swing.JFrame...性能也受到垃圾收集器的负面影响,因为越来越满的“终身生成”意味着GC必须经历更多的对象,“标记”阶段需要越来越多的时间,随着大量堆,要分析的对象的数量变得更大。

    54540

    .NET内存性能分析指南

    为了在垃圾收集器和框架的其他部分获得最新的内存改进,我强烈建议你使用.NET Core,如果你还没有的话,因为那是应该尽快去升级的地方。 本文档的状态 这是一份正在完善的文档。...GC基础 垃圾收集器提供了内存安全的巨大好处,使开发人员不必手动释放内存,并节省了可能是几个月或几年的调试堆损坏的时间。如果你不得不调试堆损坏,你就会知道这有多难。...· % Time paused for Garbage Collection 暂停垃圾收集的时间这是 "GC中暂停时间的%"指标。...· % CPU Time spent Garbage Collecting 花在垃圾收集上的CPU时间%这是 "GC中的CPU时间%"指标。它是NaN%,除非你收集CPU样本。...那些几乎总是引起危险信号的事件是 "Induced",因为它们意味着一些代码实际上是自己触发了GC。我们有一个GCTriggered事件,专门用于发现什么代码用其调用栈触发了GC。

    86830

    C#垃圾回收机制(GC)

    什么是GC GC如其名,就是垃圾收集,当然这里仅就内存而言。...Garbage Collector(垃圾收集器,在不至于混淆的情况下也成为GC)以应用程序的root为基础,遍历应用程序在Heap上动态分配的所有对象[2],通过识别它们是否被引用来确定哪些对象是已经死亡的哪些仍需要被使用...如果Gen 1的内存达到阀值,则进行1代GC,1代GC将Gen 0 heap和Gen 1 heap一起进行回收,幸存的对象进入Gen2。...2代GC将Gen 0 heap、Gen 1 heap和Gen 2 heap一起回收 Gen 0和Gen 1比较小,这两个代龄加起来总是保持在16M左右;Gen2的大小由应用程序确定,可能达到几G,...private Component Components; // 跟踪是否调用.Dispose方法,标识位,控制垃圾收集器的行为 private bool disposed = false

    84310

    GC的前世与今生

    什么是GC   GC如其名,就是垃圾收集,当然这里仅就内存而言。...Garbage Collector(垃圾收集器,在不至于混淆的情况下也成为GC)以应用程序的root为基础,遍历应用程序在Heap上动态分配的所有对象[2],通过识别它们是否被引用来确定哪些对象是已经死亡的...如果Gen 1的内存达到阀值,则进行1代GC,1代GC将Gen 0 heap和Gen 1 heap一起进行回收,幸存的对象进入Gen2。   ...2代GC将Gen 0 heap、Gen 1 heap和Gen 2 heap一起回收,Gen 0和Gen 1比较小,这两个代龄加起来总是保持在16M左右;Gen2的大小由应用程序确定,可能达到几G,因此0...private IntPtr handle; // 此类使用的其它托管资源. private Component Components; // 跟踪是否调用.Dispose方法,标识位,控制垃圾收集器的行为

    65530
    领券