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

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

垃圾回收的条件: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. MediaInfo源代码分析 3:Open()函数

    我们来看一下MediaInfo中的Open()函数的内部调用过程 首先open函数封装了MediaInfo_Internal类中的open()函数 //打开文件 size_t MediaInfo::O ...

  2. Java Bean 获取properties文件的读取

    实际的开发过程中,将一些配置属性从java代码中提取到properties文件中是个很好的选择,降低了代码的耦合度.下面介绍两种通过spring读取properties文件的方法,以ip地址配置为例. ...

  3. thinkphp 获取客户端ip地址方法

    /** * 获取客户端IP地址 * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字 * @param boolean $adv 是否进行高级模式获取(有 ...

  4. ELK监控系统nginx / mysql慢日志

    ELK监控系统nginx / mysql慢日志 elasticsearch logstash kibana ELK监控系统nginx日志 1.环境准备 centos6.8_64 mini IP:192 ...

  5. Datagridview 实现二维表头和行合并【转载】

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; u ...

  6. 如何将ER图转换成关系模式集

    在ER图中,主要是实体类型和联系类型. 1.实体类型的转换 (“——”表示对应关系) 实体类型——关系模式 实体的属性——关系模式的属性 实体标识符——关系模式的键 2.联系的转换 一元联系较简单,三 ...

  7. GinWin命令控制台执行指令

  8. B2B,B2C和C2C的区别

    电子商务发展至今,已经有十余年了,但是对于电子商务的概念,还没有一个统一的说法.接触电子商务的人想必脑海中肯定会产生这样的疑问:电子商务和网络购物是一码事,还是两个概念?当下盛行的淘宝,当当之类的网购 ...

  9. shell中trap捕获信号

    信号是一种进程间通信机制,它给应用程序提供一种异步的软件中断,使应用程序有机会接受其他程序活终端发送的命令(即信号).应用程序收到信号后,有三种处理方式:忽略,默认,或捕捉.进程收到一个信号后,会检查 ...

  10. 自定义的插件如何加载到Qt Designer中(详细)

    要想在Qt Designer中使用自定义控件,必须要使Qt Designer能够知道我们的自定义控件的存在.有两种方法可以把新自定义控件的信息通知给Qt Designer:“升级(promotion) ...