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

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

垃圾回收的条件: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. OpenCV 中 IplImage、CvMat、Mat中的type是怎么回事?

    在使用opencv的过程中,无论使用原始的IplImage和CvMat类型,还是用最新C++版本的Mat类型,在创建和使用过程中,经常会遇到CV_8UC1.CV_8UC3.CV_32FC3等声明,我以 ...

  2. php环境下ckeditor和ckfinder的配置详解

    摘要:老牌编辑器FCK的升级版CKEditor(http://ckeditor.com/) 经过重写,提供了丰富而强大的集成和互动的API.新版编辑器是完全基于插件,它可以扩展所有部件以符合需求.FC ...

  3. Dubbo xml配置 和注解配置 写法

    <?xml version="1.0" encoding="UTF-8"?><!-- - Copyright 1999-2011 Alibab ...

  4. TreeComboBox控件范例

    本文转载:http://www.cnblogs.com/hoodlum1980/archive/2008/01/30/1058140.html 在我印象中有很多各种各样的自定义控件(例如TreeLis ...

  5. Bluetooth 4.0之Android 解说

     Android平台包括了对蓝牙网络协议栈的支持,它同意一个蓝牙设备跟其它的蓝牙设备进行无线的数据交换.应用程序通过Android蓝牙API提供訪问蓝牙的功能. 这些API会把应用程序无线连接到其 ...

  6. HDOJ 4696 Answers 乱搞

    乱搞: rt.有1就能输出全部的数,否则仅仅能输出偶数 Answers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/1 ...

  7. 一款很不错的html转xml工具-Html Agility Pack

    之前发个一篇关于实现html转成xml的劣作<实现html转Xml>,受到不少网友的关心.该实现方法是借助htmlparser去分解html内容,然后按照dom的结构逐个生成xml字符串. ...

  8. Android-自己定义图像资源的使用(1)

    Android-自己定义图像资源的使用 2014年4月28日 周一 天气晴朗 心情平静 本篇博文给大家介绍一下,在Android开发中经经常使用到的一些图像资源,具体内容麻烦请各位认真查看官网,下面附 ...

  9. 【Spring五】AOP之使用注解配置

    AOP使用注解配置流程: 1.当spring容器启动时候.    < context:component- scan base-package= "cn.itheima03.sprin ...

  10. LINUX 内核调试基础+编程基础

    http://blog.chinaunix.net/uid-20564848-id-73208.html 内核文档:[root@localhost Documentation]# pwd /usr/s ...