1.引用计数法 这是个比较古老而经典的垃圾回收算法,其核心就是在对象被其他所引用的时候计数器加1,而当引用失去时减1.这个方法有非常严重的问题:无法此话有理循环引用的情况,还有就是每次进行加减操作比较浪费系统性能. 2.标记清除法 分为标记和清除两个阶段进行回收内存中的对象,这个方法也有很大的弊端,就是空间碎片问题,垃圾回收后的空间不是连续的,不连续的内存空间的工作效率要低于连续的内存空间. 3.复制算法 其核心思想就是将内存空间分为两块,每次只使用其中一块,在垃圾回收时,将正在使用的内存中的保…
Java虚拟机的内存区域中,程序计数器.虚拟机栈和本地方法栈三个区域是线程私有的,随线程生而生,随线程灭而灭:栈中的栈帧随着方法的进入和退出而进行入栈和出栈操作,每个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这三个区域的内存分配和回收都具有确定性.垃圾回收重点关注的是堆和方法区部分的内存. 常用的垃圾回收算法有: (1).引用计数算法: 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1:当引用失效时,计数器值就减1:任何时刻计数器都为0的对象就是不再被使用的,垃…
标记-清除算法: 这是最基础的,就是之前所讲的两次标记,首先标记出所有 需要回收的对象,然后进行统一清除, 这有两缺点:一是效率低,标记和清除(开启低优先级进行回收)都是低效率的.第二是空间问题,标记清除会产生大量的内存碎片.   复制算法: 可以将内存分为大小相等的两块,每次只使用一块,当一快内存使用完之后,将存活的对象移到另一块, 然后将使用过的一块用垃圾回收器将其回收掉. 这种方式运行简单,效率高.缺点是缩小了内存的实际使用大小. 比如使用20M的内存,每次都只能使用10M. 并且在对象存…
昨天我们用比较精简的文字讲了 Java 虚拟机结构,没看过的可以直接从这里查看: 每日一问:你了解 Java 虚拟机结构么? 今天我们必须来看看 Java 虚拟机的垃圾回收算法是怎样的.不过在开始之前,我们一定得确定哪些是活着的对象,又有哪些是可以进行回收的. 判断对象是否存活方式 引用计数算法 对应判断一个对象是否可以回收,我想引用计数一定是最容易被想到的算法了吧.给每个对象加一个引用计数器,每当有一个地方引用它时,计数器就加 1,引用失效后减 1,当对象的计数器为 0,则说明这个对象可以被回…
Java虚拟机之垃圾回收详解一 Java技术和JVM(Java虚拟机) 一.Java技术概述: Java是一门编程语言,是一种计算平台,是SUN公司于1995年首次发布.它是Java程序的技术基础,这些程序包括:实用程序.游戏.商业应用程序.在全世界范围内,Java运行在超过数十亿台个人计算机上,数十亿台设备上,还包括手机和电视设备.Java由一系列的关键组件作为一个整体构建出了Java平台. Java Runtime Edition 当你下载Java,你就得到了Java运行环境(JRE).JR…
Java 垃圾回收(Garbage Collection,GC) Java支持内存动态分配.垃圾自动回收,而 C++ 不支持.我想这可能也是 为什么 Java 脱胎于 C++ 的一个原因吧. GC 的历史 GC 的历史比 Java 更久远,比如 1960 年诞生的于 MIT 的 Lisp 就是第一门真正使用内存动态分配和垃圾回收的语言. GC 需要考虑的 3 件事情 哪些内存需要回收? 什么时候回收? 如何回收? 我们从这三个问题出发,来更深一层地看看 JVM GC 为我们做了哪些工作. 1.哪…
一.前言   前段时间大致看了一下<深入理解Java虚拟机>这本书,对相关的基础知识有了一定的了解,准备写一写JVM的系列博客,这是第二篇.这篇博客就来谈一谈JVM中使用到的垃圾回收算法. 二.正文  2.1 什么是垃圾回收   在正式介绍垃圾回收算法前,先来说说什么是垃圾回收.这里所说的垃圾主要指的是已经不会再继续使用的对象,当然也有可能是其他,比如不再使用的类以及常量,但主要还是指对象,所以以下算法将介绍对象的回收.所以垃圾回收的含义就是:将内存中已经不会被使用的对象(或类和常量)清除,释…
垃圾回收简介 ​ Java 会对内存进行自动分配与回收管理,使上层业务更加安全,方便地使用内存实现程序逻辑.在不同的 JVM 实现及不同的回收机制中,堆内存的划分方式是不一样的. ​ 简要地介绍下垃圾回收(Garbage Collection,GC).垃圾回收的主要目的是清除掉没有引用/不再使用的对象,自动释放内存.在了解垃圾回收算法之前,首先我们先要理解对象是怎么定义可以用被回收的. 引用计数算法 ​ 那么,GC 判断对象可以回收的依据是什么呢?有一种判断对象是否存活的算法是引用计数算法,该算…
类加载机制 双亲委派模型 垃圾回收算法 CMS G1 类加载机制 双亲委派模型 双亲委派模型: 需要加载一个类,先委托父类加载,父类找父类,依次递归加载;加载不到再由自己加载 垃圾回收算法 JVM的内存结构包括五大区域:程序计数器.虚拟机栈.本地方法栈.堆区.方法区. 程序计数器.虚拟机栈.本地方法栈, 随线程来,随线程去,不用关心 堆区 使用引用计数法.可达分析法进行回收 方法区 需要操作回收 a.标记-清除算法(Mark-Sweep) b.复制算法(Copying) c.标记-整理算法(Ma…
一.如何判断对象已死 垃圾回收器并不是java独有的,垃圾回收器的作用就是回收对象释放内存空间,那么如何判断哪些对象应该被回收呢? 在Java语言中是采用GC Roots来解决这个问题.如果一个对象和GC Roots之间没有链接,那么这个对象也可以被视作是一个可回收的对象. Java中可以被作为GC Roots中的对象有: 虚拟机栈中的引用的对象. 方法区中的类静态属性引用的对象. 方法区中的常量引用的对象. 本地方法栈(jni)即一般说的Native的引用对象. 二.垃圾回收器 Serial收…