什么是java程序中的垃圾?什么这些垃圾又是怎样被回收的?为什么会被回收?不进行回收又会怎样?这些问题都是我们要在这篇博客中要解决的问题!
大家都知道,在c语言中,作为程序员,必须得考虑到去怎样回收已经分配的内存,经常要面临的问题是,什么时候进行垃圾的回收,什么时候进行释放?释放过早了,那些仍然需要用到的对象资源消失了,面临的是系统的奔溃;但是一旦忘记回收无用的内存,就会导致内存的泄露,降低系统的性能。问题很大吧?很让人觉得恼火吧?但是在java编程时,不需要程序员进行一个显式的内存回收,因为jre已经帮我们做好了这些事情,从起初的内存的分配到那些没有被引用对象的回收,它都一首操控了,简直让人觉得很爽啊。jre会分配个自己的小的隶属——一个小的线程进行检测和控制,这个小的线程,一直在程序运行时,跟踪所有的对象的运行状况,特别是那些已经进行内存的分配,但是没有被引用的对象们,它会很灵活机智地把其在堆内存中所指向的数据区置为null,在cpu空闲或者内存不足时,进行一个垃圾的回收。内存占领它回收的空间,更为人性化的是,由于创建对象和垃圾回收器释放丢弃资源的的内存空间时,会出现碎片。这些碎片就是那些,没有被分配的空间,“比上不足,比下有余”的尴尬处境,jvm会将碎片进行收集和整理,将所占用的堆内存从堆的一端,移动到另外一端,jvm整理出的内存分配给新的对象。
简单介绍了,垃圾回收的机制,那么它有什么特点呢?回收没有用的对象的空间,这些空间都是虚拟机堆内存中的内存空间,它只能回收内存资源,对于外设,数据库资源,IO资源,它并不能发挥自己的作用;垃圾回收还是要具体情况,具体说明下的,在不同的虚拟机下,他们所采用的垃圾回收算法也不一定一样的,所以处理回收方式就可能从在一定的差异,有的可能是定时进行回收,有的也可能在cpu空闲时犯什么,甚至也有可能在cpu运行出现极限时,才进行垃圾的回收。
除此,我们在编写java程序时,对于不在需要的对象,不要去引用它们,如果你要保持对这些对象的引用,垃圾回收机制暂时不会回收这些对象,他们会觉得你可能在下个时刻会使用,所以会为你暂时保留,那这样的话,系统的可用的内存会越来越少,这样,垃圾回收机制会被调用的频率变高,系统的性能会降低。
在实际上,目前有几种常见的垃圾回收的算法。
第一种,引用计数法,引用计数法是唯一没有使用根集的垃圾回收的法,该算法使用引用计数器来区分存活对象和不再使用的对象。一般来说,堆中的每个对象对应一个引用计数器。当每一次创建一个对象并赋给一个变量时,引用计数器置为1。当对象被赋给任意变量时,引用计数器每次加1当对象出了作用域后(该对象丢弃不再使用),引用计数器减1,一旦引用计数器为0,对象就满足了垃圾收集的条件。
第二种,标记和清除垃圾收集器,引出根基的概念,从根集开始扫描,识别出那些对象可达和哪些对象不可达,对于不可达的对象,就进行垃圾的收集。
第三种,compacting算法
  为了解决堆碎片问题,在清除的过程中,算法将所有的对象移到堆的一端,堆的另一端就变成了一个相邻的空闲内存区,收集器会对它移动的所有对象的所有引用进行更新,使得这些引用在新的位置能识别原来的对象。在基于Compacting算法的收集器的实现中,一般增加句柄和句柄表。
这里仅仅简单的介绍了三种具体的回收算法,回收算法也随着计算机的发展而不断进行改进和提高。
在具体的编程中,我们也可以向jvm提出强求,即调用方法system.gc().请求垃圾回收,但正如我所说的,仅仅是个请求,jvm在接受到消息时,还会根据垃圾回收算法进行一个加权,使得垃圾回收算法,容易发生,或者容易发生,并不代表,调用后,会直接进行垃圾的回收。对于其中的finalize()方法,该方法,是在真正去回收空间时要执行的的方法,该方法先进行“擦除”,再真正释放空间。

浅析java垃圾回收机制的更多相关文章

  1. 【转载】Java垃圾回收机制

    原文地址:http://www.importnew.com/19085.html Java垃圾回收机制 说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联 ...

  2. 【转】深入理解 Java 垃圾回收机制

    深入理解 Java 垃圾回收机制   一.垃圾回收机制的意义 Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再 ...

  3. 深入理解java垃圾回收机制

    深入理解java垃圾回收机制---- 一.垃圾回收机制的意义 Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再 ...

  4. Java垃圾回收机制_(转载)

    Java垃圾回收机制 说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联系起来.在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给 ...

  5. 成为Java GC专家(3)—如何优化Java垃圾回收机制

    为什么需要优化GC 或者说的更确切一些,对于基于Java的服务,是否有必要优化GC?应该说,对于所有的基于Java的服务,并不总是需要进行GC优化,但前提是所运行的基于Java的系统,包含了如下参数或 ...

  6. java 垃圾回收机制 引用类型

    Java语言的一个重要特性是引入了自动的内存管理机制,使得开发人员不用自己来管理应用中的内存.C/C++开发人员需要通过malloc/free 和new/delete等函数来显式的分配和释放内存.这对 ...

  7. 【Java】Java垃圾回收机制

    Java垃圾回收机制 说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联系起来.在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给 ...

  8. Java垃圾回收机制的工作原理

    Java垃圾回收机制的工作原理 [博主]高瑞林 [博客地址]http://www.cnblogs.com/grl214 获取更多内容,请关注小编个人微信公众平台: 一.Java中引入垃圾回收机制的作用 ...

  9. Java 垃圾回收机制(早期版本)

    Java 垃圾回收机制在我们普通理解来看,应该视为一种低优先级的后台进程来实现的,其实早期版本的Java虚拟机并非以这种方式实现的. 先从一种很简单的垃圾回收方式开始. 引用计数 引用计数是一种简单但 ...

随机推荐

  1. HDU2767Proving Equivalences tarjan缩点,如何求入度和出度最大值

    给定一个有向图,问最少增加多少条边后变成强连通图    tarjan求求强连通分量并缩点,如果强连通分量个数为1,则需要边数为0,  否则为缩点后点入度和出度的最大值,  证明:当入度或者出度不为0时 ...

  2. poj 1984 Navigation Nightmare(带权并查集+小小的技巧)

    题目链接:http://poj.org/problem?id=1984 题意:题目是说给你n个线,并告知其方向,然后对于后面有一些询问,每个询问有一个时间点,要求你输出在该时间点a,b的笛卡尔距离,如 ...

  3. CF982C Cut 'em all! DFS 树 * 二十一

     Cut 'em all! time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  4. Docker笔记(十):使用Docker来搭建一套ELK日志分析系统

    一段时间没关注ELK(elasticsearch —— 搜索引擎,可用于存储.索引日志, logstash —— 可用于日志传输.转换,kibana —— WebUI,将日志可视化),发现最新版已到7 ...

  5. Netty源码分析 (四)----- ChannelPipeline

    netty在服务端端口绑定和新连接建立的过程中会建立相应的channel,而与channel的动作密切相关的是pipeline这个概念,pipeline像是可以看作是一条流水线,原始的原料(字节流)进 ...

  6. 2018 Multi-University Training Contest 2(部分题解)

    Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  7. XML的相关基础知识分享

    XML和Json是两种最常用的在网络中数据传输的数据序列化格式,随着时代的变迁,XML序列化用于网络传输也逐渐被Json取代,前几天,单位系统集成开发对接接口时,发现大部分都用的WebService技 ...

  8. 第四篇 跟踪过程以及openvslam中的相关实现详解

    在成功初始化之后,会创建地图以及局部地图. 创建地图 在初始化正常过后,紧接着会创建地图 // src/openvslam/module/initializer.cc:67 // create new ...

  9. ie表单提交提示下载文件

    使用jquery的ajaxform提交form表单 如果在html中多了   enctype ="multipart/form-data"   属性值 提交时就会在ie8中提示下载 ...

  10. 如何完美激活pycharm2019.2.2

    本号持续关注pycharm的更新,这不本月11号迎来新版本,为防走丢,请关注公众号,让我们携手并行!有道是"予人玫瑰手留余香",分享的确是件令人愉快的事,这也是我创建公众号的初心. ...