浅析java垃圾回收机制
什么是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垃圾回收机制的更多相关文章
- 【转载】Java垃圾回收机制
原文地址:http://www.importnew.com/19085.html Java垃圾回收机制 说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联 ...
- 【转】深入理解 Java 垃圾回收机制
深入理解 Java 垃圾回收机制 一.垃圾回收机制的意义 Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再 ...
- 深入理解java垃圾回收机制
深入理解java垃圾回收机制---- 一.垃圾回收机制的意义 Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再 ...
- Java垃圾回收机制_(转载)
Java垃圾回收机制 说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联系起来.在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给 ...
- 成为Java GC专家(3)—如何优化Java垃圾回收机制
为什么需要优化GC 或者说的更确切一些,对于基于Java的服务,是否有必要优化GC?应该说,对于所有的基于Java的服务,并不总是需要进行GC优化,但前提是所运行的基于Java的系统,包含了如下参数或 ...
- java 垃圾回收机制 引用类型
Java语言的一个重要特性是引入了自动的内存管理机制,使得开发人员不用自己来管理应用中的内存.C/C++开发人员需要通过malloc/free 和new/delete等函数来显式的分配和释放内存.这对 ...
- 【Java】Java垃圾回收机制
Java垃圾回收机制 说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联系起来.在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给 ...
- Java垃圾回收机制的工作原理
Java垃圾回收机制的工作原理 [博主]高瑞林 [博客地址]http://www.cnblogs.com/grl214 获取更多内容,请关注小编个人微信公众平台: 一.Java中引入垃圾回收机制的作用 ...
- Java 垃圾回收机制(早期版本)
Java 垃圾回收机制在我们普通理解来看,应该视为一种低优先级的后台进程来实现的,其实早期版本的Java虚拟机并非以这种方式实现的. 先从一种很简单的垃圾回收方式开始. 引用计数 引用计数是一种简单但 ...
随机推荐
- MSIL实用指南-数据类型转换
一.类的强制转换1.转换成某个类用Castclass指令.实例代码:ilGenerator.Emit( OpCodes.Castclass , typeof(ClassA) ); 2.转换成某个值类型 ...
- springboot-vue前后端分离session过期重新登录
springboot-vue前后端分离session过期重新登录 简单回顾cookie和session cookie和session都是回话管理的方式 Cookie cookie是浏览器端存储信息的一 ...
- ssh延迟加载问题的解决方案
1. 什么是延迟加载问题 ? 业务层查询的数据 关闭session 之后...web层获取延迟加载的数据失败. 例如:查询订单没有查询客户,需要显示客户,session已经关闭,无法查询 2. 如何解 ...
- P1963 [NOI2009]变换序列 倒叙跑匈牙利算法
题意 构造一个字典序最小的序列T,使得 Dis(i, Ti) = di,其中i是从0开始的,Dis(x,y)=min{∣x−y∣,N−∣x−y∣} ,di由题目给定. 思路 二分图匹配,把左边的看成i ...
- Rikka with Prefix Sum(组合数学)
Rikka with Prefix Sum 题目描述 Prefix Sum is a useful trick in data structure problems. For example, giv ...
- codeforces 264 B. Good Sequences(dp+数学的一点思想)
题目链接:http://codeforces.com/problemset/problem/264/B 题意:给出一个严格递增的一串数字,求最长的相邻两个数的gcd不为1的序列长度 其实这题可以考虑一 ...
- github 授权登录教程与如何设计第三方授权登录的用户表
需求:在网站上想评论一篇文章,而评论文章是要用户注册与登录的,那么怎么免去这麻烦的步骤呢?答案是通过第三方授权登录.本文讲解的就是 github 授权登录的教程. 效果体验地址:http://biao ...
- AOE工程实践-NCNN组件
作者:杨科 NCNN是腾讯开源的一个为手机端极致优化的高性能神经网络前向计算框架.在AOE开源工程里,我们提供了NCNN组件,下面我们以SqueezeNet物体识别这个Sample为例,来讲一讲NCN ...
- 新手学习FFmpeg - 通过API完成filter-complex功能
本篇尝试通过API实现Filter Graph功能. 源码请参看 https://andy-zhangtao.github.io/ffmpeg-examples/ FFmpeg提供了很多实用且强大的滤 ...
- yum rpm apt-get wget 辨析
1)wget: 类似于迅雷,是一种下载工具,通过HTTP.HTTPS.FTP三个最常见的TCP/IP协议下载,并可以使用HTTP代理名字是World Wide Web”与“get”的结合.类似于cur ...