Java学习之垃圾回收机制

  垃圾回收机制,依赖JRE和JVM,涉及操作系统中内存的分配与回收。依据所学,我猜想这种机制需要的数据结构是堆内存分配表(链),管理已分配和未分配的堆内存,对于已分配堆内存,需要知道由栈内存中的哪些变量引用。知道了这些,依赖垃圾检测和回收算法,把长期未得到栈变量引用的堆内存块回收,挂到未分配内存表中。清理完成后可能会进行碎片整理,相应地修改分配表。

  垃圾检测和回收算法,会随着Java版本、操作系统不同而不同。而且垃圾检测和回收算法可以手动选择。

原文地址:https://www.cnblogs.com/Luck-365/p/11684733.html

时间: 2024-11-12 02:57:35

Java学习之垃圾回收机制的相关文章

java中存在垃圾回收机制,但是还会有内存泄漏的问题,原因是

答案是肯定的,但不能拿这一句回答面试官的问题.分析:JAVA是支持垃圾回收机制的,在这样的一个背景下,内存泄露又被称为"无意识的对象保持".如果一个对象引用被无意识地保留下来,那么垃圾回收器不仅不会处理这个对象,而且也不处理被这个对象引用的其它对象."内存泄露"就是内存中某些内存不可被回收. 举个例子:如果对一个栈(Stack类)先是进行入栈操作,之后再进行出栈操作,那么弹出来的对象将不会被当做垃圾回收,即使使用栈的客户程序不再引用这些对象,因为栈内部存在着对这些已

java基础学习之垃圾回收机制

回收过程: 1.发现无用的对象 2.回收无用对象占用的内存的空间. 垃圾回收相关算法: 1.引用计数法 堆中每个对象都有一个引用计数.被引用一次,计数加一.被引用变量值变为null,则计数减一. 到计数变为0,则表示为无用对象. 优点:算法简单 缺点:无法识别循环引用(相互引用对方,导致计数器不为0,但实际上已经不用它们了) 2.引用可达法(根搜索算法) 通过一系列的GC Roots的对象作为起始点,从这些根节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对

java基础之 垃圾回收机制

1. 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象:而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾.JVM的一个系统级线程会自动释放该内存块.垃圾回收意味着程序不再需要的对象是"无用信息",这些信息将被丢弃.当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用.事实上,除了释放没用的对象,垃圾回收也可以清除内存记录碎片.由于创建对象和垃圾回收器释放丢弃对象所占的内存空间,

java语言及其垃圾回收机制简单概述

 一.java 语言概述 Java 语言是一门纯粹的面向对象编程语言,它吸收了c++语言的各种优点.又摈弃了c++里难以理解的多继承,指针等概念因此Java语言具有功能强大和简单易用两个特征. Java语言的几个重要概念如下: J2ME:主要用于控制移动设备和信息家电等有限存储设备 J2SE:整个java技术的核心和基础, J2EE:java技术中应用最最广泛的部分,它提供了企业应用开发相关的完整的解决方案. API: 核心类库 JRE:运行Java程序所必须的环境的集合,包含JVM标准实现及J

Java程序的垃圾回收机制

显示回收垃圾分析? 传统的C,C++语言 都是需要程序员负责回收已经分配的内存. 这个事情由程序员来做,会导致问题,因为程序员并不是总是知道内存该何时被释放,如果一些分配出的内存得不到及时回收,就会引起系统运行速度的下降,甚至程序瘫痪,这叫做内存泄漏. 缺点:1)程序忘记及时回收无用内存,从而导致内存泄漏,降低系统性能. 2)程序错误地回收系统核心的类库的内存,从而导致系统崩溃. Java程序的内存分配都是由Java运行环境JRE在后台自动进行的.JRE负责回收那些不再使用的内存,这种机制被称为

java有自动垃圾回收机制

当垃圾收集器判断已经没有任何引用指向对象的时候,会调用对象的finalize方法来释放对象占据的内存空间~ java中垃圾回收以前听老师讲好像是内存满了他才去做一次整体垃圾回收,在回收垃圾的同时会调用finalize方法.你在构造一个类时可以构造一个类时覆盖他的finalize方法以便于该类在被垃圾回收时执行一些代码,比如释放资源. 1.JVM的gc概述 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm

Java中的垃圾回收机制&内存管理

1. Java在创建对象时,会自动分配内存,并当该对象引用不存在的时候,释放这块内存. 为什么呢? 因为Java中使用被称为垃圾收集器的技术来监视Java程序的运行,当对象不再使用时,就自动释放对象所使用的内存. 垃圾收集器是自动运行的,无须显式地请求垃圾收集器,程序运行时,垃圾收集器会不时检查对象的各个引用,并回收无引用对象所占用的内存. 可以调用System类中的静态gc()方法来运行垃圾收集器. 2. Java语言并不要求JVM有gc,也没有规定gc如何工作. Java垃圾回收机制是为所有

02 java 简单了解 垃圾回收机制

程序运行时,一些分配出去的内存得不到及时回收,就会引起系统运行速度下降,甚至导出程序瘫痪,这种现象被称为内存泄漏 java 程序里的 内存分配和回收都是由 jre 在后台自定进行的, jre 会负责回收那些不在使用的内存, 这种机制被称为 垃圾回收 Garbage Collection   --GC 通常 jre 会提供一个后台线程来进行检测和控制,一般都是在 CPU 空闲或者内存不足的时候进行 垃圾回收, 而陈序员 无法精确控制垃圾回收的时间和顺序 在java 中 当没有引用变量指向原先分配给

初步学习-----C#垃圾回收机制

原文地址:http://mp.weixin.qq.com/s?__biz=MzAwNTMxMzg1MA==&mid=206721898&idx=1&sn=dfaee0ae6fa092b1a6db5779d75c0a2d&scene=5#rd 下面是本菜鸟对上述大神文章简单总结,当然还有许多不足之处,希望大家还是看上面链接中的文章较好! 一基本原理: 计算机内存大致分为两种:栈和堆.C#中分为两种类型:值类型和引用类型.其中值类型主要存储在栈区(栈的机制实际通过类似链表实现的