1、堆与栈
在Java中除堆与栈之外 还有:方法区、常量池、本地方法栈等内存区域,但堆和栈是最重要的两个内存区域。
堆
是JVM启动是统一分配的;而栈
是每一个线程所独有的,而堆是所有线程共享的。
栈:
其实应该叫线程栈。所有原生类型变量的内存分配都是在栈上进行,当程序退出该变量的作用范围时内存会被自动释放;
堆:
所有对象(非原生类型,即通过new关键子创建的对象)需要的内存都是在堆上分配,而堆上的内存回收由GC依据某种算法来进行回收和整理。
2、GC,垃圾收集器(Garbage Collector),其实更准确的说法应该是Java内存管理系统;它是一个独立的线程,在必要时使用某种算法对堆上的内存进行回收和整理。那么Java都提供哪些不同的内存回收算法呢?
3、分代复制收集算法:将堆上的内存进一步细分为年轻代区域(该去被称为edan---伊甸园的意思?
)和年老代区域,并根据对象的生存时间将他们分别置于相应的区域。这一算法基于这样一个假设——即大约95%的对象的生成周期都非常短暂。
分代复制算法将刚刚新创建的对象归类为年轻代,并置入年轻代区域,直到年轻代区域空间已满,该算法将会对年轻代区域进行一次垃圾收集:将还被引用的对象升级为年老代,并copy到年老代区域,然后清空年轻代区域,等到年老代区域空间也满时,则启动其它回收算法(通常是标记算法);如此则进一步提高了内存回收效率。
3、标记收集算法:该算法会从内存区域中找到还被引用的对象,并以此对象为根遍历其它被引用的对象,为它们都打上“存活”标记。未被标记的对象即“死亡”对象,会被清理掉。根据对存活对象处理方式的不同,又会细分为两类:
标记紧缩算法
:将所有存活对象copy到一块连续的内存区域中,有整理内存,减少内存碎片的效果。
标记清除算法
:保留存活对象不动,将死亡对象的内存空间记录下来,准备分配给后面新来的对象,这一算法会导致内存碎片,但却没有copy存活对象的开销。
以上两种收集算法(尤其是标记收集算法)运行是会停止JVM中的其它程序线程,而且会对整合区域进行扫描收集,因此程序停顿的时间不可预测,运行过程有明显停顿。于是就有了以下算法:
4、增量收集算法:该算法是一种被改良的垃圾收集程序运行机制,它以固定时间间隔运行收集程序,每次仅收集很小一部分空间。而且固定时间间隔短到用户不能觉察,因此不会产生明显停顿。
主要垃圾收集和次要垃圾收集
:以上不同的算法被分别用来执行主要和次要的垃圾收集。通常主要是指对年老区执行标记压缩算法,而次要是指对edan区域执行分代复制算法。
分享到:
相关推荐
内存管理简介 内存管理的职责为分配内存,回收内存。 没有自动内存管理的语言/平台容易发生错误。 典型的问题包括悬挂指针问题,一个指针引用了一个已经被回收的内存地址,导致程序的运行完全不可知。 另一个...
NULL 博文链接:https://xdjava.iteye.com/blog/2031254
JAVA内存结构-GC-CLASSLOAD
Java基础[Java基础]--Java GC工作原理
poi读取大量数据会造成gc内存溢出的报错,由于垃圾回收机制无法将大量的对象及时的回收,而这些对象又会保存在内存中,会导致内存不够用的情况,这时候我们就需要使用新的方法,读取为cvs即可.此解决方案可支持千万数据的...
JVM内存管理的介绍,编写GC友好的代码。 本材料主要关心 Sun Hotspot JVM 6的内存管理 Sun Hotspot JVM 6的GC模型 主要针对JVM6的GC模型,但也会简单介绍Java 7的G1 编写GC友好代码的一些技巧
虽然Java中所有对象的存储空间都是在堆中分配的,但是这个对象的引用却是在栈中分配,也就是说在建立一个对象时在堆和栈中都分配内存,在堆中分配的内存实际存放这个被创建的对象的本身,而在栈中分配的内存只是存放...
Java面试题-内存+GC+类加载器+JVM调优
监控工具VisualVM VisualVM 是Netbeans的profile子项目,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的)。...
GC java 手册 kindle格式 GC java 手册 kindle格式 GC java 手册 kindle格式
java 内存泄漏
Java垃圾回收GC机制
让你对java gc 的工作原理有更深的了解 谢谢下载
GChisto及CMS GC相应补丁文件,补丁文件未亲测。 This patch adds the following features and improvements when using CMS GC in incremental mode: detecting Full GCs corrected parsing errors when using -XX:...
气相色谱GC基础知识——基本原理分析PPT学习教案.pptx
java常用分析工具
java7 GC 参数配置说明文档,详细介绍了每个参数的作用
Java内存区域与内存溢出 Java虚拟机中的内存分配图: 各个区域的特性总结如下表: 补充说明: 当多线程情形下,可能多个线程要在堆上分配内存,那么可能出现内存分配的同步问题,解决方案有两个...
会被gc回收掉 -》 零引用内存回收 属性:对象有什么 方法:对象会什么 5: 动态更新 对于Sun公司官方提供的一些核心方法 值保留一个指向的关系 当若干年后核心类库升级了 我们的程序还是可以正常执行 这是挤兑...
Java垃圾回收GC.xmind