垃圾回收器始终以一个较低优先级的后台进程进行垃圾的回收工作,这样不会影响程序的正常工作。

通常只有当内存到达用尽的边缘而程序需要分配新的内存空间时,垃圾回收器才会执行。

垃圾回收的条件:1,垃圾回收器只回收不可再用的内存;2,只回收内存资源,比如通过new在堆上创建的对象。

java中进行清理内存的方法是finalize(),object类中声明了他。垃圾回收器回收对象内存时就会调用该对象的finalize方法,拉进行一些清理工作。

finalize方法的特点:1、执行的不确定性,通常只有当内存到达用尽的边缘而程序需要分配新的内存空间时,垃圾回收器才会执行。可以通过system类或runtime类的gc()方法来加快垃圾的回收。但是gc()只是建议垃圾回收器回收垃圾,不是命令。2、执行顺序不确定;3、没有连锁性;4、方法的执行次数,最多只会执行一次。

java垃圾回收机制

垃圾回收的方式有引用计数:引用计数是一种简单的垃圾回收方式,每个对象都带有一个计数器,当引用连接至对象时,对象的计数器加一。当离开引用域时,被置为null,计数器减一。垃圾回收器在还有对象的链表上进行遍历,发现计算器为0的,进行释放对象。这种方法存在着缺陷,存在着对象应该释放但是计数器不为零的情况。

有一种较快的方式能够解决对象交互引用问题,这种垃圾回收方式的思想是:对任何活着的对象,一定能够追溯到其存活在堆栈或静态存储区的引用。因此通过遍历堆栈和静态存储区的引用,就能够找到所有“活”的对象。这就解决了对象的交互引用问题。在这种方式下,java虚拟机采用一种自适应的垃圾回收机制。为了能够找到活的对象,有一种做法“停止-复制”,先暂停程序的运行,然后将所有存活的对象复制到另一个堆上,没有被复制的都是垃圾,当存活的对象被复制到新的堆上,他们一个个紧凑排列。这种“复制式回收器”存在两个问题,其一、对象在两个堆上复制,会需要较大的空间;其二,在程序稳定运行后,垃圾产生的较少,在这种情况下进行复制,会造成很大的浪费。在这种情况下,java虚拟机会转换到另一种模式“标记-清扫”,这种方式比较慢,先从堆栈和静态存储区开始遍历,当遍历到一个活着的对象时,就给他一个标记。当标记工作完成时,才开始清理工作。“标记-清扫”必须在程序暂停的情况下进行。

java学习之 垃圾回收的更多相关文章

  1. Java学习之垃圾回收

    垃圾回收(GC) GC需要完成的三件事情: 哪些内存需要回收? 什么时候回收? 如何回收? 为什么"GC自动化"之后还要研究GC?当需要排查各种内存溢出.内存泄漏问题时,当GC成为 ...

  2. Java学习之垃圾回收机制

    垃圾回收机制,依赖JRE和JVM,涉及操作系统中内存的分配与回收.依据所学,我猜想这种机制需要的数据结构是堆内存分配表(链),管理已分配和未分配的堆内存,对于已分配堆内存,需要知道由栈内存中的哪些变量 ...

  3. Java编程思想学习笔记_1(Java内存和垃圾回收)

    1.Java中对象的存储数据的地方: 共有五个不同的地方可以存储数据. 1)寄存器.最快,因为位于处理器的内部,寄存器按需求分配,不能直接控制. 2)堆栈.位于通用RAM,通过堆栈指针可以从处理器那里 ...

  4. 高吞吐低延迟Java应用的垃圾回收优化

    高吞吐低延迟Java应用的垃圾回收优化 高性能应用构成了现代网络的支柱.LinkedIn有许多内部高吞吐量服务来满足每秒数千次的用户请求.要优化用户体验,低延迟地响应这些请求非常重要. 比如说,用户经 ...

  5. 每日一问:讲讲 Java 虚拟机的垃圾回收

    昨天我们用比较精简的文字讲了 Java 虚拟机结构,没看过的可以直接从这里查看: 每日一问:你了解 Java 虚拟机结构么? 今天我们必须来看看 Java 虚拟机的垃圾回收算法是怎样的.不过在开始之前 ...

  6. JVM学习笔记——垃圾回收篇

    JVM学习笔记--垃圾回收篇 在本系列内容中我们会对JVM做一个系统的学习,本片将会介绍JVM的垃圾回收部分 我们会分为以下几部分进行介绍: 判断垃圾回收对象 垃圾回收算法 分代垃圾回收 垃圾回收器 ...

  7. Java虚拟机之垃圾回收详解一

    Java虚拟机之垃圾回收详解一 Java技术和JVM(Java虚拟机) 一.Java技术概述: Java是一门编程语言,是一种计算平台,是SUN公司于1995年首次发布.它是Java程序的技术基础,这 ...

  8. 【java虚拟机序列】java中的垃圾回收与内存分配策略

    在[java虚拟机系列]java虚拟机系列之JVM总述中我们已经详细讲解过java中的内存模型,了解了关于JVM中内存管理的基本知识,接下来本博客将带领大家了解java中的垃圾回收与内存分配策略. 垃 ...

  9. java中存在垃圾回收机制,但是还会有内存泄漏的问题,原因是

    答案是肯定的,但不能拿这一句回答面试官的问题.分析:JAVA是支持垃圾回收机制的,在这样的一个背景下,内存泄露又被称为“无意识的对象保持”.如果一个对象引用被无意识地保留下来,那么垃圾回收器不仅不会处 ...

随机推荐

  1. 挣值管理不是搞数字游戏(3)——进阶指标:CV、SV、CPI、SPI、EAC

    摘要: 要考PMP(Project Management Professional ),挣值管理是必考的知识.软件项目有很大的特殊性,不少人认为挣值管理不太适用于软件项目.挣值管理相关资料也比较超多, ...

  2. 没有找到 mspdb100.dll 的解决办法

    直接从Common7\IDE\下复制这个文件到VC\Bin\下即可解决.(D:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE)

  3. iOS 8 设置导航栏的背景颜色和背景图片

    假设是storyboard 直接embed一个导航栏.然后在新出现的导航栏 选属性 选一下颜色就能够了 代码实现背景颜色改动:self.navigationController.navigationB ...

  4. CSU1312:榜单(模拟)

    Description ZZY很喜欢流行音乐,每周都要跟踪世界各地各种榜单,例如Oricon和Billboard,现在给出每周各个单曲的销量请给出每周的TOP5以及TOP5中各个单曲的浮动情况. 量的 ...

  5. Cstyle的UEFI导读:第18.0篇 NVRAM的工作原理(上)

        虽有句话说的好,实用的东西记在脑子里.没有的记在笔记本上. 可是如今的信息量越来越大,并且随着时间的推移记忆力会越来越不可靠,所以仅仅好把近期工作之余看的一些东西记录下来,避免被迅速忘记.这里 ...

  6. CHAR 详解

    CHAR(20):20指的是表中的a字段能存储的最大字符个数 CREATE TABLE `a` ( `a` char(20) DEFAULT NULL) ENGINE=InnoDB DEFAULT C ...

  7. [转] JavaScript中的属性:如何遍历属性

    在JavaScript中,遍历一个对象的属性往往没有在其他语言中遍历一个哈希(有些语言称为字典)的键那么简单.这主要有两个方面的原因:一个是,JavaScript中的对象通常都处在某个原型链中,它会从 ...

  8. mac tips

    1. Mac Terminal color for different types 在 ~ 先建立一个文件  ~/.bash_profile 加入下面的两行:export CLICOLOR=1expo ...

  9. Java中获得程序当前路径的4中方法

    Java中获得程序当前路径的4中方法: 在Application中: import java.util.*; public class TestUserDir { public static void ...

  10. css背景图与html插入img的区别

    一直以来都认为css背景图与直接插入img图片的效果是差不多的,直到最近拜读了一位大神的作品,发现大部分图片都是通过背景图形式显示的,于是通过搜索各相关资料,在此总结了下二者的区别: 1. css中的 ...