`

JVM学习笔记-引用计数收集器(Reference Counting Collectors)

 
阅读更多

 

Reference Counting Collectors

Reference counting was an early garbage collection strategy. In this approach, a reference count is maintained for each object on the heap. When an object is first created and a reference to it is assigned to a variable, the objectís reference count is set to one. When any other variable is assigned a reference to that object, the object's count is incremented. When a reference to an object goes out of scope or is assigned a new value, the object's count is decremented. Any object with a reference count of zero can be garbage collected. When an object is garbage collected, any objects that it refers to have their reference counts decremented. In this way the garbage collection of one object may lead to the subsequent garbage collection of other objects.

引用计数是垃圾收集的早期策略。在这种方法中,堆中每一个对象都有一个引用计数。一个对象被创建了,并且指向该对象的引用被分配给一个变量,这个对象的引用计数被置为1。当任何其他变量被赋值为对这个对象的引用时,计数加1。当一个对象的引用超过了生存期或者被设置一个新的值时,对象的引用计数减1。任何引用计数为0的对象可以被当作垃圾收集。当一个对象被垃圾收集的时候,它引用的任何对象计数值减1。在这种方法中,一个对象被垃圾收集后可能导致后续其他对象的垃圾收集行动。

 

An advantage of this approach is that a reference counting collector can run in small chunks of time closely interwoven with the execution of the program. This characteristic makes it particularly suitable for real-time environments where the program can't be interrupted for very long. A disadvantage is that reference counting does not detect cycles: two or more objects that refer to one another. An example of a cycle is a parent object that has a reference to a child object that has a reference back to the parent. These objects will never have a reference count of zero even though they may be unreachable by the roots of the executing program. Another disadvantage of reference counting is the overhead of incrementing and decrementing the reference count each time.

这种方法的好处是,引用计数收集器可以很快地执行,交织在程序的运行之中。这个特性对于程序不能被长时间打断的实时环境很有利。坏处就是,引用计数无法检测出循环(即两个或者更多的对象互相引用)。循环的例子如,父对象有一个对子对象的引用,子对象又反过来引用父对象。这些对象永远都不可能计数为0,就算它们已经无法被执行程序的根对象可触及。还有一个坏处就是,每次引用计数的增加或者减少都带来额外开销。

 

 

Because of the disadvantages inherent in the reference counting approach, this technique is currently out of favor. It is more likely that the Java Virtual Machines you encounter in the real world will use a tracing algorithm in their garbage-collected heaps.

 因为引用计数方法固有的缺陷,这种技术现在已经不为人所接受。现实生活中所遇到的Java虚拟机更有可能在垃圾收集堆中使用追踪算法。

 

分享到:
评论

相关推荐

    nginx-upstream-jvm-route-1.15

    【标题】"nginx-upstream-jvm-route-1.15" 涉及的核心知识点是Nginx的upstream模块与JVM路由的整合,特别针对Nginx 1.15版本。这个项目旨在解决在配置Nginx时遇到的特定错误提示“nginx: [emerg] invalid parameter ...

    JVM调优总结 -Xms -Xmx -Xmn -Xss

    JVM 给了三种选择:串行收集器、并行收集器、并发收集器。串行收集器只适用于小数据量的情况,而并行收集器和并发收集器适用于大数据量的情况。 并行收集器主要以到达一定的吞吐量为目标,适用于科学技术和后台...

    metrics-jvm-3.1.5-API文档-中文版.zip

    赠送jar包:metrics-jvm-3.1.5.jar; 赠送原API文档:metrics-jvm-3.1.5-javadoc.jar; 赠送源代码:metrics-jvm-3.1.5-sources.jar; 赠送Maven依赖信息文件:metrics-jvm-3.1.5.pom; 包含翻译后的API文档:...

    jvm 调优笔记-jvm.zip

    《JVM调优笔记》 Java虚拟机(JVM)是Java编程语言的核心组成部分,它负责执行字节码,管理内存,以及优化程序性能。JVM调优是提高Java应用程序性能的关键步骤,涉及到多个方面,包括堆内存设置、垃圾收集器选择、...

    JVM性学习笔记-基本原理,内存模型,JVM参数

    JVM性学习笔记-基本原理,内存模型,JVM参数设置,类加载器原理,JDK自带工具

    metrics-jvm-3.1.5-API文档-中英对照版.zip

    赠送jar包:metrics-jvm-3.1.5.jar; 赠送原API文档:metrics-jvm-3.1.5-javadoc.jar; 赠送源代码:metrics-jvm-3.1.5-sources.jar; 赠送Maven依赖信息文件:metrics-jvm-3.1.5.pom; 包含翻译后的API文档:...

    Android Studio 报错failed to create jvm error code -4的解决方法

    代码如下:failed to create jvm error code -4 这一般应是内存不够用所致,解决方法参考如下。 打开 Android Studio 安装目录下的bin目录,查找并打开文件 studio.exe.vmoptions,修改代码: 代码如下:-Xmx512m 为...

    jvm-full-gc调优-jvm-full-gc.zip

    本资料"jvm-full-gc调优-jvm-full-gc.zip"显然是针对如何减少和优化JVM的Full GC进行深入探讨的。以下将详细介绍JVM Full GC的相关知识点。 1. **理解JVM内存结构**:Java内存主要分为堆内存(Heap)和非堆内存...

    JVM学习笔记(一)

    本篇学习笔记主要介绍如何利用一系列工具来查看和监控JVM的各种运行时信息,包括但不限于JVM进程与参数查看、垃圾收集信息、JVM锁信息等内容。 #### 二、查看JVM进程及参数 ##### 1. JPS - **用途**:列出主机上...

    mini-jvm in rust实现jvm,jvm-rs-main.zip

    项目名为"jvm-rs-main",通过这个项目,我们可以深入学习Rust语言与JVM的交互,以及如何构建一个简化版的JVM。 一、Rust语言的魅力 Rust是一种系统级编程语言,它强调安全、并发和速度。它的内存管理模型避免了空...

    nginx-upstream-jvm-route-0.1.tar.gz

    "nginx-upstream-jvm-route-0.1.tar.gz"正是为了解决这个问题而设计的一个解决方案。 首先,让我们了解一下Nginx的Upstream模块。Upstream模块允许Nginx将接收到的请求转发到一组后端服务器,可以根据配置的策略...

    JVM学习笔记2018-4-151

    本篇JVM学习笔记主要关注对象声明、相关内存分配方法以及虚拟内存的物理和虚拟寻址概念。 首先,我们来看对象声明。在Java中,对象是在堆上创建的。例如,`CHeapObj` 类展示了如何在C++中模拟Java对象在堆上的分配...

    nginx-upstream-jvm-route-1.12.0.tar.gz

    nginx_upstream_jvm_route 是一个 Nginx 的扩展模块,用来实现基于 Cookie 的 Session Sticky 的功能。 安装方法(进入Nginx源码目录): #patch -p0 < /path/to/this/directory/jvm_route.patch # ./configure -...

    java之jvm学习笔记十一(访问控制器)-源码

    本文将深入探讨JVM中的访问控制器,主要基于“java之jvm学习笔记十一(访问控制器)-源码”这一主题,以及相关的源码分析。 首先,我们得了解Java的安全模型。Java安全模型基于一种称为安全管理器(SecurityManager)...

    JVM-MANAGEMENT-MIB,jvm mib库

    JVM,MIB,可通过SNMP协议监控JVM运行情况

    Jvm调优练习-jvm-tuning.zip

    【标题】"Jvm调优练习-jvm-tuning.zip" 提供了一个实践 JVM(Java Virtual Machine)调优的机会,这是一项至关重要的技能,特别是在处理大型、高性能的Java应用程序时。JVM调优涉及到调整一系列参数,以优化应用程序...

    jvm性能调优-垃圾收集器parnew&CMS底层三色标记算-performance-gc-parnew-cms.zip

    本文将深入探讨两个重要的垃圾收集器——ParNew和Concurrent Mark Sweep (CMS) ——以及它们在JVM性能调优中的作用,特别是基于三色标记算法的实现。 首先,ParNew垃圾收集器是新生代(Young Generation)的默认...

    Jvm性能优化-JVM内存结构原理分析03

    Jvm中有多种垃圾收集器,如串行(Serial)垃圾收集器、并行(Parallel)垃圾收集器、并发(Concurrent)垃圾收集器等。其中,串行垃圾收集器是Jvm默认的垃圾收集器,它使用单线程来执行垃圾回收。并行垃圾收集器使用...

    jvm调优学习-optimizeJVM.zip

    "jvm调优学习-optimizeJVM.zip" 文件可能包含了一系列关于JVM调优的学习资料,特别是"optimizeJVM-develop"这个子文件可能涵盖了开发阶段的JVM优化实践。 1. **JVM架构** - 类加载器:负责加载类文件,包括启动类...

    JVM规范--高手总结

    垃圾收集有多种算法,如引用计数法、标记-清除、复制、标记-整理和分代收集等。其中,引用计数法简单但难以处理循环引用;跟踪收集器如MarkSweep和Copy算法适用于新生代;而CMS和G1等并发收集器适用于老年代,以减少...

Global site tag (gtag.js) - Google Analytics