`
JAVA那点事
  • 浏览: 17408 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类

JAVA垃圾回收器学习笔记

阅读更多

 

JAVA垃圾回收器学习——稻草人

(文章学习内容来自课本书籍和互联网,并在不断完善中)

 

JAVA的一个重要特点就是具有一个垃圾回收器,能够实现垃圾的自动回收,而不需要程序员去考虑。Java解释器在为一个实例对象分配完存储空间后,便开始记录该实例对象所占用的内存空间的使用,直至使用完毕便将其回收。 在Java的运行过程中,一个垃圾回收器会不定时的被唤醒来检查是否有不再被使用的对象,并释放它们占用的内存空间。垃圾回收器的启用不由程序员控制,无规律可循。

不同Java虚拟机有不同的垃圾回收机制,一般有两种比较常用:复制式回收机制和“自省式”回收机制。

1.1.复制式回收机制:

这种策略的执行模式是现将正在运行的程序暂停,然后把正在被使用的所有对象复制一份到另一块堆内存中,那些 不再被使用的对象所占的内存空间被释放。此方式需要的内存空间是所需维护的两倍,而且当程序只产生了少量甚 至没有垃圾时,就会导致效率低下。

1.2.“自省式”回收机制:

检测所有正在使用的对象,并为他们标注,完成这项工作后再将所有不再被使用的对象所占据的内存空间一次释放 掉。尽管此种方式速度很慢,但在只有少量的垃圾或者没有垃圾时,就极具优势。

 

这两种方式颇具互补性,所以在一些JVM中结合的运用。如果程序中的对象长期的使用,JVM就换至“自省式”,而当产生大量垃圾或所占的内存不连续情况严重时,又会换至“复制式”。

 

垃圾收集的目的在于清除不再使用的对象。gc(即是垃圾回收机制)通过确定对象是否被活动对象引用来确定是否收集该对象。gc首先要判断该对象是否是时候可以收集。两种常用的方法是引用计数和对象引用遍历。

2.1.引用计数

引用计数存储对特定对象的所有引用数,也就是说,当应用程序创建引用以及引用超出范围时,jvm必须适当增减引用数。当某对象的引用数为0时,便可以进行垃圾收集。

2.2.对象引用遍历

早期的jvm使用引用计数,现在大多数jvm采用对象引用遍历。对象引用遍历从一组对象开始,沿着整个对象图上的每条链接,递归确定可到达(reachable)的对象。如果某对象不能从这些根对象的一个(至少一个)到达,则将它作为垃圾收集。在对象遍历阶段,gc必须记住哪些对象可以到达,以便删除不可到达的对象,这称为标记(marking)对象。 为此,gc需要停止其他的活动活动。这种方法意味着所有与应用程序相关的工作停止,只有gc运行。结果,在响应期间增减了许多混杂请求。另外,更复杂的gc不断增加或同时运行以减少或者清除应用程序的中断。有的gc使用单线程完成这项工作,有的则采用多线程以增加效率。

 

*另外网上还看到几种垃圾回收机制,如下:

(1)增量收集器

增量收集器把堆栈分为多个域,每次仅从一个域收集垃圾。这会造成较小的应用程序中断。

(2)分代收集器

这种收集器把堆栈分为两个或多个域,用以存放不同寿命的对象。jvm生成的新对象一般放在其中的某个域中。过一段时间,继续存在的对象将获得使用期并转入更长寿命的域中。分代收集器对不同的域使用不同的算法以优化性能。

(3)并发收集器

并发收集器与应用程序同时运行。这些收集器在某点上(比如压缩时)一般都不得不停止其他操作以完成特定的任务,但是因为其他应用程序可进行其他的后台操作,所以中断其他处理的实际时间大大降低。

(4)并行收集器

并行收集器使用某种传统的算法并使用多线程并行的执行它们的工作。在多cpu机器上使用多线程技术可以显著的提高java应用程序的可扩展性。

 

 

分享到:
评论

相关推荐

    java学习笔记资源合集

    Java 的三种核心机制为虚拟机机制、代码安全机制、垃圾回收机制。 Java 最大的特点是平台无关性(可移植性好),通过不同的虚拟机与各类操作系统无缝 结合。虚拟机实例是指:执行一个应用程序的时候,虚拟机产生一个...

    Java 虚拟机学习笔记:Java 内存区域,垃圾收集,内存分配与回收策略,JVM 调优,文件结构,类加载机制,Java 程序

    Java 虚拟机学习笔记: Java 内存区域, 垃圾收集, 内存分配与回收策略, JVM 调优, 文件结构, 类加载机制, Java 程序 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,...

    java基础学习笔记 java整合技术 java工具类.rar

    健壮性:java的健壮性与自动垃圾回收机制有关,自动垃圾回收机制简称GC机制,java语言运行过程中产生的垃圾是自动回收的,不需要程序员关心。 可移植性:java程序可以做到一次编译,到处运行。在Windows操作系统上...

    Java 学习笔记极其详细版(包括一些个人色彩不仅仅是纯笔记)

    本Jva(Java)学习笔记是一份深入且详尽的教程,不仅包括Java的基础知识,还融入了作者的个人见解和实际编程经验。内容涵盖: Java基础:数据类型、控制流、异常处理。 面向对象编程:类与对象、继承、多态、封装。...

    记录各种学习笔记(算法、Java、数据库、并发.zip

    Java是一种高性能、跨平台的面向...自动内存管理(垃圾回收): Java具有自动内存管理机制,通过垃圾回收器自动回收不再使用的对象,使得开发者不需要手动管理内存,减轻了程序员的负担,同时也减少了内存泄漏的风险。

    记录各种学习笔记(算法、Java、数据库、并发......).zip

    Java是一种高性能、跨平台的面向...自动内存管理(垃圾回收): Java具有自动内存管理机制,通过垃圾回收器自动回收不再使用的对象,使得开发者不需要手动管理内存,减轻了程序员的负担,同时也减少了内存泄漏的风险。

    关于学习笔记整理,包括Linux、Java、数据结构和算法,和一些IT工具的使用.zip

    Java是一种高性能、跨平台的面向...自动内存管理(垃圾回收): Java具有自动内存管理机制,通过垃圾回收器自动回收不再使用的对象,使得开发者不需要手动管理内存,减轻了程序员的负担,同时也减少了内存泄漏的风险。

    java虚拟机学习笔记之垃圾收集

    java程序是运行在java虚拟机当中的,在java虚拟机的堆中运行着程序所创建的对象。可以使用new,newarray,anewarray,multianewarray指令来创建对象,但是没有明确的代码来释放...垃圾收集器必须能断定哪些对象是不再

    学习深入理解Java虚拟机的前几章笔记

    包括jvm 的内存模型 对象的创建过程 垃圾回收算法 垃圾回收器 内存分配和回收策略

    java7rt.jar源码-Java_JVM:这是我的JavaJVM学习笔记

    一:上篇——内存与垃圾回收器 二:中篇——字节码与类的加载 三:下篇——性能监控与调优篇 一: 上篇——内存与垃圾回收器 架构: jvm依赖的架构: 栈架构/寄存器架构 栈架构 JVM的生命周期: 1.启动 通过引导类加载...

    net学习笔记及其他代码应用

    程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一: System.gc() Runtime.getRuntime().gc() 37.String s = new String(\"xyz\");创建了几个String Object? 答:...

    java8源码-akangaroo:学习笔记,完善中

    学习笔记较长,如果想查看文章的目录,chrome浏览器可以配合简悦插件使用,或者下载到本地使用Typora打开。 :hot_beverage: Java基础 Java容器 Java并发 数据结构和算法 数据结构 树 图 算法 分治 动态规划 回溯 ...

    c#学习笔记.txt

    防止变量被垃圾回收器重定位。 (5) lock lock 关键字将某个语句块标记为临界区。 6. 方法参数 如果为没有 ref 或 out 的方法声明一个参数,则此参数可以具有关联的值。可以在方法中更改该值,但当控制传递回调用过程...

    c#学习笔记——学习心得

    当某个类的实例被认为不再有效并符合析构条件时,.NET Framework类库的垃圾回收功能就会调用该类的析构函数实现垃圾回收,一个类只能有一个析构函数。一般准则是,除非有迫不得已的原因,不要使用析构函数,而应把...

    深入理解Java虚拟机---学习感悟以及笔记

    曾经的我经常害怕处理内存溢出的问题,因为不知道他为什么会出现这个问题,当我在看了这本书以后明白了垃圾回收算法,以及JVM是如何帮助我们处理GC的,这个时候当出现这个问题的时候我就明白需要查找GC Root,或者...

    leetcode下载-study:学习笔记

    垃圾回收器 锁 Lock 与 Sychronized 区别 Redis 分布式锁 Zookeeper 分布式锁 死锁产生原因 如何解决死锁 数据库死锁例子 JAVA 并发 AQS 源码 ReentrantLock 源码 Condition 源码 ConcurrentHashMap 源码 Java 线程...

    细粒度jvm学习xmind

    思维导图 主要包括:jvm学习笔记,包含示例,JIT,类加载机制,垃圾回收机制等等,站在全局的角度思考问题

Global site tag (gtag.js) - Google Analytics