JVM的垃圾回收机制(GC)

1.什么是垃圾回收
                程序运行会产生各种各种的数据,那么这些数据存在于内存当中,这些数据不可能是永久存在的,无效的资源对象需要进行垃圾回收,释放内存
            2.不同的编程语言都有GC垃圾回收
                java语言自带GC垃圾回收器,并且有JVM自动进行垃圾回收,程序员主要关注代码实现,不关注垃圾回收 System.gc();
                C/C++语言当中,程序员new一个对象,相当于申请了一块内存,如果需要释放资源得手动通过delete关键字进行内存的释放
            3.垃圾回收算法
                如果使用的算法不合理,反倒会造成资源的浪费,垃圾回收常见算法
                3.1 引用计数法
                    原理:假如有一个对象A,任何对象对A对象的引用,计数器就+1,当引用失效或者失败时计数器-1,如果对象A的计数器为0,GC就会当成对象没有
                            引用了,就会将该对象回收
                3.2 标记清除法
                    标记:从根节点开始标记引用对象
                    清除:未被标记的对象就是垃圾对象,可以清除
                    

      

      

原理:初始状态下所有对象的标记都为0,当内存不足的情况下,
                          标记阶段:GC先会进行标记阶段,从根节点开始,凡是引用的对象都标记为1,其他没有引用的对象标记为0
                          清除阶段:凡是对象标记为1代表该对象存在引用不清除,对象标记为0则清除,清除完毕之后所有对象重新标记为0
                    
                    缺点:    
                        1.效率较低,标记和清除两个动作都需要遍历所有的对象,并且在GC时,需要停止应 用程序,对于交互性要求比较高的应用而言这个体验是非常差的。
                        2.碎片化较为严重,可能导致大数据没有办法存储,小数据存储浪费空间
                            
                    
                    
                3.3 标记压缩算法
                    同标记清除法相同,标记过程相同,在清除过程中,先将垃圾对象压缩到内存末尾,然后再清除
                    缺点:对象需要移动,效率有一些影响

      

3.4 复制算法
                    内存被分为大小相同两块区域,一块为From,一块为To,程序向From区域存放数据,当from数据即将满了的情况下,进行垃圾回收:首先标记垃圾对象,

      然后将没有标记的对象复制到To当中,然后回头将From所有区域清空,然后角色交换,From和To交换,保证To永远为空
                    1.年轻代当中分为Eden去和From和To区,其中From和To区的大小时相同的,程序向Eden去和From区存放数据,当数据即将满了的情况下
                    2.Eden区会将活跃对象存放到To区,From区会将年龄小的对象存放到To区,那么年龄大的存放到Old年老代区域当中
                    3.清空Eden去和Old区的所有数据,然后将From区角色和To区角色互换,这样保证To区为空
                    4.当垃圾回收机制反复运行时,那么To区可能数据饱和,如果数据饱和则将所有对象转移到Old年老区
                    
                    

3.5 分代算法

    前面介绍了多种回收算法,每一种算法都有自己的优点也有缺点,谁都不能替代谁,所以根据垃圾回收对象的特点进行选择,才是明智的选择。

    分代算法其实就是这样的,根据回收对象的特点进行选择,在jvm中,年轻代适合使用复制算法,老年代适合使用标记清除或标记压缩算法。

原文地址:https://www.cnblogs.com/chx9832/p/12419569.html

时间: 2024-10-11 07:57:56

JVM的垃圾回收机制(GC)的相关文章

Java虚拟机(JVM)与垃圾回收机制(GC)的详解

一.JVM结构 根据<java虚拟机规范>规定,JVM的基本结构一般如下图所示: 从左图可知,JVM主要包括四个部分: 1.类加载器(ClassLoader):在JVM启动时或者在类运行时将需要的class加载到JVM中.(右图表示了从java源文件到JVM的整个过程,可配合理解. 关于类的加载机制,可以参考http://blog.csdn.net/tonytfjing/article/details/47212291) 2.执行引擎:负责执行class文件中包含的字节码指令(执行引擎的工作机

垃圾回收机制GC知识再总结兼谈如何用好GC(其他信息: 内存不足)

来源 一.为什么需要GC 应用程序对资源操作,通常简单分为以下几个步骤: 1.为对应的资源分配内存 2.初始化内存 3.使用资源 4.清理资源 5.释放内存 应用程序对资源(内存使用)管理的方式,常见的一般有如下几种: 1.手动管理:C,C++ 2.计数管理:COM 3.自动管理:.NET,Java,PHP,GO- 但是,手动管理和计数管理的复杂性很容易产生以下典型问题: 1.程序员忘记去释放内存 2.应用程序访问已经释放的内存 产生的后果很严重,常见的如内存泄露.数据内容乱码,而且大部分时候,

垃圾回收机制GC知识再总结兼谈如何用好GC

一.为什么需要GC 应用程序对资源操作,通常简单分为以下几个步骤: 1.为对应的资源分配内存 2.初始化内存 3.使用资源 4.清理资源 5.释放内存 应用程序对资源(内存使用)管理的方式,常见的一般有如下几种: 1.手动管理:C,C++ 2.计数管理:COM 3.自动管理:.NET,Java,PHP,GO… 但是,手动管理和计数管理的复杂性很容易产生以下典型问题: 1.程序员忘记去释放内存 2.应用程序访问已经释放的内存 产生的后果很严重,常见的如内存泄露.数据内容乱码,而且大部分时候,程序的

JVM的垃圾回收机制详解和调优

JVM的垃圾回收机制详解和调优 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm都有gc,而且大多数gc都使用类似的算法管理内存和执行收集操作. 1.JVM的gc概述 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm都有gc,而且大多数gc都使用类似的算法管理内存和执行收集操作. 在充分理解了垃圾收集算法和执行

Java垃圾回收机制(GC)详解

Java垃圾回收机制(GC)详解 简介: 垃圾回收GC(Garbage Collection)是Java语言的核心技术之一,之前我们曾专门探讨过Java 7新增的垃圾回收器G1的新特性,但在JVM的内部运行机制上看,Java的垃圾回收原理与机制并未改变.垃圾收集的目的在于清除不再使用的对象.GC通过确定对象是否被活动对象引用来确定是否收集该对象.GC首先要判断该对象是否是时候可以收集.两种常用的方法是引用计数和对象引用遍历. 垃圾收集的算法分析: Java语言规范没有明确地说明JVM使用哪种垃圾

03 JVM的垃圾回收机制

1.前言 理解JVM的垃圾回收机制(简称GC)有什么好处呢?作为一名软件开发者,满足自己的好奇心将是一个很好的理由,不过更重要的是,理解GC工作机制可以帮助你写出更好的Java程序. 在学习GC前,你应该知道一个技术名词:"stop-the-world" ,无论你选择哪种GC算法,"stop-the-world"都会发生."stop-the-world"意味着JVM停止应用程序,而去进行垃圾回收.当"stop-the-world&quo

JVM的垃圾回收机制 总结(垃圾收集、回收算法、垃圾回收器)

如果想了解Java内存模型参考:jvm内存模型-和内存分配以及jdk.jre.jvm是什么关系(阿里,美团,京东) 相信和小编一样的程序猿们在日常工作或面试当中经常会遇到JVM的垃圾回收问题,有没有在夜深人静的时候详细捋一捋JVM垃圾回收机制中的知识点呢?没时间捋也没关系,因为小编接下来会给你捋一捋. 一. 技术背景你要了解吧 二. 哪些内存需要回收? 2.1 引用计数算法 2.1.1 算法分析 2.1.2 优缺点 2.1.3 是不是很无趣,来段代码压压惊 2.2 可达性分析算法 2.3 Jav

JVM:垃圾回收机制和调优手段

转载请注明出处: jiq?钦's technical Blog - 季义钦 引言: 我们都知道JVM内存由几个部分组成:堆.方法区.栈.程序计数器.本地方法栈 JVM垃圾回收仅仅针对公共内存区域即:堆和方法区进行. 本文主要讨论两点,一是垃圾回收策略,二是调优的方法. 一.垃圾回收机制 1.1 分代管理 将堆和方法区按照对象不同年龄进行分代: u  堆中会频繁创建对象,基于一种分代的思想,按照对象存活时间将堆划分为新生代和旧生代两部分,我们不能一次垃圾回收新生代存活的对象就放入旧生代,而是要经过

JVM 及 垃圾回收机制原理

JVM Java 虚拟机 Java 虚拟机(Java virtual machine,JVM)是运行 Java 程序必不可少的机制.JVM实现了Java语言最重要的特征:即平台无关性.原理:编译后的 Java 程序指令并不直接在硬件系统的 CPU 上执行,而是由 JVM 执行.JVM屏蔽了与具体平台相关的信息,使Java语言编译程序只需要生成在JVM上运行的目标字节码(.class),就可以在多种平台上不加修改地运行.Java 虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行.因此实