- 浏览: 92619 次
- 性别:
- 来自: 北京
文章分类
01,垃圾就是无用的对象,无用的对象就是这个存放在堆中的对象的引用,没有任何变量使用它了。没有变量使用它了,当然需要把它所占用的内存给收回来,好重新使用这个对象占用的内存,来创建新的对象。
02,到底如何去识别那个对象是无用的,那个对象是有用的呢?肯定存在很多算法和机制来解决这个问题。
02.01,引用计数法,最原始的方法,也是很容易理解的方法,给每个对象额外添加一个标记计数器,起始为0,当有变量引用它时,这个标记计数器+1,当这个变量的引用改变或脱离自己的作用域时,这个对象的标记计数器-1,当这个对象的的标记计数器为0时,直接调用垃圾回收线程回收。此算法为实时算法,开销较大,而且无法解决相互调用的问题。
02.02,标记-清除算法,不再是实时的垃圾回收处理了,额外的提供一个线程去处理垃圾回收,遍历每个线程栈中的变量,凡是和此变量相关的对象全部标记为可用;遍历完之后,再去遍历堆中的对象,假如此对象没有标记为可用,那么立即回收此对象。此算法解决了引用计数法的问题,但是此法的垃圾回收线程执行时,所有其他的线程必须停下来。而且此法的垃圾回收线程执行后,内存一片碎片,导致大的对象无法创建。
02.03,标记-清除-压缩算法,为解决上面算法引起的内存碎片问题,可以在上面算法的基础加上一个碎片整理,让这些活着的对象重写排列。
02.04,复制收集器,标记-清除-压缩算法,在排列可用对象时,确实是比较繁琐,每个对象都需要相互靠近来排列,消耗时间比较长,于是可以采用用空间来换取时间的方法,将堆空间分为同等大小的两块,同时使用的只有一块,当一块用完需要垃圾回收时,就将这一块采用标记-清除算法,之后将这一块可用对象全部复制到另一块中,再创建新的对象就在这一块了。
02.05,增量收集器
02.06,分代搜集算法,以上对堆中活动对象碎片问题的解决无非压缩和拷贝,但是很多对象的存活时间不同,如果对所有对象都使用压缩和拷贝的话,存活时间长的对象将消耗垃圾回收的时间,因此可以将堆中对象分块,分几块就牵扯到了具体的算法,一般分两块,即新生代和年老代。在新生代对应的堆中创建对象,分配内存,当到了一定的时间或次数或空间(依赖于具体的算法)后,将存活对象放到年老代。新生代和年老代垃圾回收的频率是不一样的,新生代回收频率大。新生代垃圾回收有多重算法,以上算法都可以,但是最为好的是将新生代再次分代,还是分为两个,创建区和存活区,创建区专门负责创建对象,当创建区满时,将此区回收,把存活对象放到存活区中,存活区采用的是复制收集算法,用空间来换取时间,存活区有两个大小相同的区域1和2。
02.07,并发收集器,
02.08,并行收集器,
02,到底如何去识别那个对象是无用的,那个对象是有用的呢?肯定存在很多算法和机制来解决这个问题。
02.01,引用计数法,最原始的方法,也是很容易理解的方法,给每个对象额外添加一个标记计数器,起始为0,当有变量引用它时,这个标记计数器+1,当这个变量的引用改变或脱离自己的作用域时,这个对象的标记计数器-1,当这个对象的的标记计数器为0时,直接调用垃圾回收线程回收。此算法为实时算法,开销较大,而且无法解决相互调用的问题。
02.02,标记-清除算法,不再是实时的垃圾回收处理了,额外的提供一个线程去处理垃圾回收,遍历每个线程栈中的变量,凡是和此变量相关的对象全部标记为可用;遍历完之后,再去遍历堆中的对象,假如此对象没有标记为可用,那么立即回收此对象。此算法解决了引用计数法的问题,但是此法的垃圾回收线程执行时,所有其他的线程必须停下来。而且此法的垃圾回收线程执行后,内存一片碎片,导致大的对象无法创建。
02.03,标记-清除-压缩算法,为解决上面算法引起的内存碎片问题,可以在上面算法的基础加上一个碎片整理,让这些活着的对象重写排列。
02.04,复制收集器,标记-清除-压缩算法,在排列可用对象时,确实是比较繁琐,每个对象都需要相互靠近来排列,消耗时间比较长,于是可以采用用空间来换取时间的方法,将堆空间分为同等大小的两块,同时使用的只有一块,当一块用完需要垃圾回收时,就将这一块采用标记-清除算法,之后将这一块可用对象全部复制到另一块中,再创建新的对象就在这一块了。
02.05,增量收集器
02.06,分代搜集算法,以上对堆中活动对象碎片问题的解决无非压缩和拷贝,但是很多对象的存活时间不同,如果对所有对象都使用压缩和拷贝的话,存活时间长的对象将消耗垃圾回收的时间,因此可以将堆中对象分块,分几块就牵扯到了具体的算法,一般分两块,即新生代和年老代。在新生代对应的堆中创建对象,分配内存,当到了一定的时间或次数或空间(依赖于具体的算法)后,将存活对象放到年老代。新生代和年老代垃圾回收的频率是不一样的,新生代回收频率大。新生代垃圾回收有多重算法,以上算法都可以,但是最为好的是将新生代再次分代,还是分为两个,创建区和存活区,创建区专门负责创建对象,当创建区满时,将此区回收,把存活对象放到存活区中,存活区采用的是复制收集算法,用空间来换取时间,存活区有两个大小相同的区域1和2。
02.07,并发收集器,
02.08,并行收集器,
发表评论
-
Java对象引用类型
2013-05-09 09:55 966Java对象的引用类型分为强引用、软引用、弱引用和虚应用 强引 ... -
JVM调优大纲
2013-05-07 19:07 1774我觉得处理JVM调优问题需要以下五个步骤: ... -
hibernate根据hbm自动生成数据库
2013-04-27 10:26 1064今天碰到一个很老的项目,只有hbm文件没有数据库,想根 ... -
svn分支合并到主线的十大注意事项
2013-04-07 10:39 0svn是java软件工程师常用的版本控制工具,但是对于分支到主 ... -
这几年收集的java相关资料
2013-04-06 14:46 614以下是我搜集的java相关资料,有需要的可以联系我,QQ470 ... -
一种JavaWeb项目开发部署方式
2012-11-16 09:37 1209以前在myeclipse开发Java Web项目的时候 ... -
tomcat支持中文路径图片问题
2012-11-12 14:51 2698今天,上传图片,但是有文件夹是中文的或是图片文件名是中 ... -
已经安装jdk了,运行applet还是提示安装问题解决
2012-11-08 10:57 1298今天,同事的机子已经装了jdk,但是运行带有ap ... -
dojo笔记-初识dojo
2012-11-05 18:29 899dojo,一个js框架或类库,强大的面向对象的功能,强 ... -
集成到项目中web.xml报taglib标签错误
2012-10-31 15:45 854web.xml的报错位置: <taglib> ... -
润乾报表报错
2012-10-31 15:44 15651,runqianReportLogger : [DEBUG] ... -
使用润乾报表工具过程、心得和体会
2012-10-31 15:41 5642现在做的这个项目,需要导出相关报表,正好前几个 ... -
(转)Java开源软件六大帮派
2012-10-25 10:40 788原文链接:http://www.oschina.net/que ... -
windows下查看端口被占用的程序
2012-10-23 18:17 1305今天,莫名其妙,tomcat启动不了,报端口绑定错误, ... -
window.createPopup弹窗
2012-10-23 17:04 849在浏览器中,除了div弹窗、alert弹窗、新窗口弹窗 ... -
Linux安装jdk详解
2012-10-22 16:34 7561,下载JDK,肯定官网下载,有多种类型,源码包、bin包、r ... -
(转)Linux设备命名规则
2012-10-19 15:21 1103在我们使用的计算机中 ... -
(转)js控制IE打印功能
2012-10-19 09:07 1441今天做了个JS控制IE打印功能, 原始链接为:http://h ... -
(转)Java几款性能分析工具的对比
2012-10-18 11:04 775在给客户进行应用程序维护的过程中,我注意到一些关于高负载条件下 ... -
apache软件基金会探究流程
2012-10-17 16:06 9651,简介: Apache软件基金会(也就是Ap ...
相关推荐
本文深入探讨了Java垃圾回收机制的特点及其在Java虚拟机(JVM)中的应用,并详细分析了几种典型的垃圾收集算法。此外,文章还介绍了如何通过命令行参数来调整垃圾回收的行为以及`finalize`方法的作用。通过理解这些...
自己学习总结JVM垃圾回收机制的结构图,一起分享!!!
Java虚拟机(JVM)内存模型和垃圾回收机制是Java开发中至关重要的概念。本文将深入探讨这两个主题,帮助理解JVM如何管理和优化内存。 **一、类加载器和双亲委派机制** 类加载器是JVM的一个组成部分,负责加载Java...
我们通过深入探讨以下几个关键点来理解JVM垃圾回收机制的工作原理: 1. 如何确定某个对象是“垃圾”? JVM垃圾回收机制通过两种主要算法来确定对象是否成为垃圾,即“可达性分析算法”和“引用计数法”。 - 可达性...
Java虚拟机(JVM)的垃圾回收(GC)机制是Java程序高效运行的关键部分,它自动管理内存,释放不再使用的对象以避免内存泄漏。本文主要探讨JVM堆内存的结构和GC的工作原理,以及如何进行性能调优。 JVM堆是Java应用...
### JVM工作原理及垃圾回收机制详解 #### 一、JVM概述及原理 **1.1 JVM概述** Java Virtual Machine (JVM),即Java虚拟机,是一种虚构的计算机,在实际的计算机硬件上仿真模拟出的一套完整的计算机系统,用于执行...
理解并优化JVM的垃圾回收机制对于提升Java应用的性能至关重要。 一、垃圾回收的基本概念 1. 对象生命周期:当一个对象被创建后,它会经历新生、壮年、老年代等阶段。垃圾回收主要关注的是不再被引用的对象,即...
- 垃圾收集器(Garbage Collector, GC):自动回收不再使用的对象,避免内存泄漏。 - 分代收集:根据对象生命周期将堆分为新生代、老年代,使用不同的GC策略。 - 常见的GC算法有:标记-清除、复制、标记-整理、分...
- JVM负责自动管理内存,通过垃圾收集机制回收不再使用的对象所占用的空间。 - 常见的垃圾收集算法有标记-清除、复制、标记-整理和分代收集等。 4. **类加载机制**: - 双亲委派模型:当一个类加载器需要加载类...
Java虚拟机(JVM)是Java程序运行的核心,它的内存管理和垃圾回收机制对于程序的高效运行至关重要。在本文中,我们将深入探讨JVM的类加载子系统及其在内存管理中的作用。 类加载子系统,也被称为Class Loader ...
其中,垃圾回收机制(Garbage Collection, GC)是Java虚拟机(JVM)的一项重要特性,它能够自动检测并回收不再使用的对象占用的内存空间,从而有效避免了内存泄漏问题。本文将详细介绍Java中的垃圾回收机制及其工作原理...
### Java+JVM+垃圾回收机制 #### 一、哪些垃圾是需要回收的? 在Java虚拟机中,垃圾回收机制负责自动管理内存空间,确保不再使用的对象能够被及时释放,以便于新对象的分配。这一过程的核心在于识别哪些对象不再...
垃圾回收是 JVM 中非常重要的一个概念,它是 JVM 用来管理 Java 堆中对象的生命周期的机制。垃圾回收器会定期地对 Java 堆中对象进行扫描,标记出不再使用的对象,并将其回收,以释放出更多的内存空间。 垃圾收集...
Java垃圾回收机制是Java虚拟机(JVM)中的一种自动管理内存的机制,它可以自动地将不再使用的对象从内存中回收,以释放更多的内存空间供其他对象使用。本文将详细介绍Java垃圾回收机制的工作原理、各个阶段的执行...
Java性能调优,特别是关于垃圾回收...总结来说,Java性能调优中的垃圾回收机制分析是一项深度工作,需要深入理解JVM的内存管理,识别并避免内存泄漏,以及合理调整垃圾收集策略,以实现更高效、更稳定的Java应用程序。
JVM虚拟机垃圾回收机制图谱说明
Java垃圾回收机制是Java虚拟机(JVM)中的一种机制,用于防止内存泄露和有效地使用空闲的内存。垃圾回收机制的主要目的是为了回收无用的对象占用的内存空间,使该空间可被程序再次使用。 垃圾回收机制的算法有多种...
在Java编程语言中,内存管理是其核心特性之一,尤其是自动垃圾回收机制,极大地简化了开发人员的工作,避免了C++等语言中常见的内存泄漏问题。本文将深入探讨Java堆的管理,特别是垃圾回收(Garbage Collection, GC...