JAVA回收机制

JAVA内存回收算法,主要采用的方式有两种,一种是标记计数器方式,一种是根目录搜索法。

标记计数器方式,是对每一个对象如果被引用,则标记计数器加1,解除引用,则标记计数器减1。当一个对象标记计数器为0时,则回收此对象。但这种方式存在问题,假如两个对象存在交叉引用,则对象值为null时,则无法回收此对象。

而采用根目录搜索法,是从一个根目录对象开始搜索,如果某个对象不可达,则此对象可以回收。

JAVA回收的时候,采用的算法有两种,一种是标记-清除,一种是复制算法。

标记-清除算法:首先在内存中将需要清除的对象标记出来,然后一次性的将对象释放掉。但这种方法存在的问题是,有可能会导致释放的内存不连续,会导致如果申请需要较大连续的内存时,没有足够的内存。

复制算法:会将内存分为平均的两部分,一部分用来使用,另一部分则不使用。当内存不够时,会将使用的那部分内存标记出来,然后将存活的对象复制到另一部分上。之后将使用的内存清空。(但此种算法会导致浪费大量的内存,内存使用量缩小为原来的一半)

常用的方式是结合以上两种来使用。每次使用将内存分为一块较大的Eden和两块survivor区域,每次使用Eden和其中的一块survivor。当需要清除时,将Eden和其中一块survivor的标记的数据复制到另一块survivor中,最后再清理掉Eden和survivor中的数据。

引用强度:强引用->软引用->弱引用->虚引用

JAVA内存区主要分三个区。年轻代,年老代,持久代。

年轻代分3个区,Eden,Survivor0,Survivor1。当经过无数次的minor gc后,仍然存活下来的对象,则进入年老代。在年老代中,对内存的清理为full gc。持久代主要为存放一些静态文件,类信息,classLoader信息等。垃圾回收对持久代没有显著的影响。

JAVA垃圾回收器主要有CMS,JDK1.8新增了个G1垃圾回收器。

时间: 2024-10-29 19:06:47

JAVA回收机制的相关文章

Java回收机制总结

Java回收机制 如何确定"垃圾" 既然是垃圾回收机制,第一步肯定是要确定垃圾,知道了垃圾便可以进行回收.但是如何确定垃圾呢?什么是垃圾呢? 什么是"垃圾" 首先要明白什么是"垃圾",垃圾回收机制是回收堆内存中的对象(具体的内存划分可以看:),对于栈中的对象是不需要回收机制去考虑的.在Java中堆内存中的对象是通过和栈内存中的引用相互关联,才被利用的.既然是对堆内存的回收,并且堆内存中存储的都是引用对象的实体,所以回收的就是没有被任何一个引用所关

四.GC —JAVA回收机制(Java Garbage Collection)

这里以jdk1.8做讲解.Jdk1.8的分代去掉了永久代,只分为新生代(有的也译为年轻代)和年老代. 名词解释: 系统吞吐量:用于处理应用程序处理事务的线程数与用于GC的线程数的比. pause time:进行GC时,暂停处理应用程序事务线程的时间. JVM运行内存别分为新生代和年老代.新生代包含一个Eden区和两个Survivor区.如图: 个人理解的GC过程: 新生代发生Minor GC,Minor GC在Eden区通过标记-清除算法(上节讲的GC算法),得到存活的对象.如果存活的对象大小小

Java 垃圾回收机制(早期版本)

Java 垃圾回收机制在我们普通理解来看,应该视为一种低优先级的后台进程来实现的,其实早期版本的Java虚拟机并非以这种方式实现的. 先从一种很简单的垃圾回收方式开始. 引用计数 引用计数是一种简单但是速度很慢的垃圾回收技术. 每个对象都含有要给引用计数器,当有引用连接至对象时,引用计数+1. 当引用离开作用域或者被置为null时,引用计数-1. 当发现某个对象的引用计数为0时,就释放其占用的空间.   这种方法开销在整个程序生命周期中持续发生,并且该方法有个缺陷,如果对象之间存在循环引用,可能

Java内存回收机制

深入理解 Java 垃圾回收机制 一:垃圾回收机制的意义 java  语言中一个显著的特点就是引入了java回收机制,是c++程序员最头疼的内存管理的问题迎刃而解,它使得java程序员在编写程序的时候不在考虑内存管理.由于有个垃圾回收机制,java中的额对象不在有"作用域"的概念,只有对象的引用才有"作用域".垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存: 内存泄露:指该内存空间使用完毕后未回收,在不涉及复杂数据结构的一般情况下,java的内存泄露表现为一个

垃圾回收机制汇总

平时在写代码的时候,关注的是写出能实现业务逻辑的代码,因为现在计算机的内存也比较宽裕,所以写程序的时候也就没怎么考虑垃圾回收这一方面的知识.俗话说,出来混总是要还的,所以既然每次都伸手向内存索取它的资源,那么还是需要知道什么时候以及如何把它还回去比较好. Python 垃圾回收机制--->https://blog.csdn.net/cn_wk/article/details/51707206python采用计数引用(Reference Counting)为主,来跟踪和回收垃圾.采用标记清除(Ma

Java性能优化之JVM GC(垃圾回收机制)

Java的性能优化,整理出一篇文章,供以后温故知新. JVM GC(垃圾回收机制) 在学习Java GC 之前,我们需要记住一个单词:stop-the-world .它会在任何一种GC算法中发生.stop-the-world 意味着JVM因为需要执行GC而停止了应用程序的执行.当stop-the-world 发生时,除GC所需的线程外,所有的线程都进入等待状态,直到GC任务完成.GC优化很多时候就是减少stop-the-world 的发生. JVM GC回收哪个区域内的垃圾? 需要注意的是,JV

JavaGC专家(1)—深入浅出Java垃圾回收机制

在学习GC之前,你首先应该记住一个单词:"stop-the-world".Stop-the-world会在任何一种GC算法中发生.Stop-the-world意味着 JVM 因为要执行GC而停止了应用程序的执行.当Stop-the-world发生时,除了GC所需的线程以外,所有线程都处于等待状态,直到GC任务完成.GC优化很多时候就是指减少Stop-the-world发生的时间. 按代的垃圾回收机制 在Java程序中不能显式地分配和注销内存.有些人把相关的对象设置为null或者调用Sy

java——GC回收机制

1. GC是什么? GC(Gabage Collection):java的垃圾回收机制的根本目的就是跟踪正在使用的对象,然后回收那些不再使用(引用)的对象.java的GC回收机制有两个好处: (1) 避免垃圾过多导致的内存耗尽 (2) 避免不恰当的内存释放导致的内存非法引用 GC主要是对JVM中的堆对象进行识别,如果对象正在被引用,就是活对象.否则就是死的,是可以被回收再分配的. 2. java的内存是如何存储的哪? 堆:用来存储java中创建的对象,new新建的对象都存在java的堆中 栈:用

JVM学习(4)——全面总结Java的GC算法和回收机制---转载自http://www.cnblogs.com/kubixuesheng/p/5208647.html

俗话说,自己写的代码,6个月后也是别人的代码--复习!复习!复习!涉及到的知识点总结如下: 一些JVM的跟踪参数的设置 Java堆的分配参数 -Xmx 和 –Xms 应该保持一个什么关系,可以让系统的性能尽可能的好呢?是不是虚拟机内存越大越好? Java 7之前和Java 8的堆内存结构 Java栈的分配参数 GC算法思想介绍 –GC ROOT可达性算法 –标记清除 –标记压缩 –复制算法 可触及性含义和在Java中的体现 finalize方法理解 Java的强引用,软引用,弱引用,虚引用 GC