上一篇我们介绍了常见的垃圾回收算法,不同的算法各有各的优缺点,在JVM中并不是单纯的使用某一种算法进行垃圾回收,而是将不同的垃圾回收算法包装在不同的垃圾回收器当中,用户可以根据自身的需求,使用不同的垃圾回收器,以便让自己的java程序性能到达最佳. 在介绍垃圾回收器之前,我们先回顾一下java堆的结构. 一.堆内存回顾 java堆内存结构包括:新生代和老年代,其中新生代由一个伊甸区和2个幸存区组成,2个幸存区是大小相同,完全对称的,没有任何差别.我们把它们称为S0区和S1区,也可以称为from区…
上篇文章我们了解到哪些内存区域和哪些对象可以被回收,这篇文章我们就来了解一下具体的垃圾回收算法的思路,不讨论具体的实现. 一 最基础算法 标记-清除(Mark-Swap) 为什么说他是最基础的算法,因为这之后的算法思路都是基于此来进行.如同他的名字一样,回收分为两个步骤,标记和清除,但是这种方式有两个缺陷,一是效率问题,标记和清除两个过程的效率都不高:二是空间问题,回收后可能产生大量的内存碎片,当需要给大对象分配内存空间的时候,有可能会导致提前触发一次垃圾回收: 二 复制算法(Copying)…
七种垃圾回收器类型 GC的约定参数 DefNew——Default New Generation Tenured——Serial Old ParNew——Parallel New Generation PSYoungGen——Parallel Scavenge ParOldGen——Parallel Old Generation 适用范围:只需要掌握Server模式,Client模式基本不会用. 操作系统:32位windows不论硬件如何默认使用Client模式.32位其他OS,2G内存同时2个…
上一篇我们介绍了常见的垃圾回收算法,不同的算法各有各的优缺点,在JVM中并不是单纯的使用某一种算法进行垃圾回收,而是将不同的垃圾回收算法包装在不同的垃圾回收器当中,用户可以根据自身的需求,使用不同的垃圾回收器,以便让自己的java程序性能到达最佳. 在介绍垃圾回收器之前,我们先回顾一下java堆的结构. 堆内存回顾 java堆内存结构包括:新生代和老年代,其中新生代由一个伊甸区和2个幸存区组成,2个幸存区是大小相同,完全对称的,没有任何差别.我们把它们称为S0区和S1区,也可以称为from区和t…
我们都知道java语言与C语言最大的区别就是内存自动回收,那么JVM是怎么控制内存回收的,这篇文章将介绍JVM垃圾回收的几种算法,从而了解内存回收的基本原理. 一.stop the world 在介绍垃圾回收算法之前,我们需要先了解一个词“stop the world”,stop the world会在执行某一个垃圾回收算法的时候产生,JVM为了执行垃圾回收,会暂时java应用程序的执行,等垃圾回收完成后,再继续运行.如果你使用JMeter测试过java程序,你可能会发现在测试过程中,java程…
关于垃圾回收 仿佛来自上海居委会大妈的灵魂拷问:“你是什么垃圾?” 不 今天我们要说的是JVM的垃圾回收 假如我是一个“人”类的“对象”,也和人的生命一样必有一死,可是“我真的还想再活500年~~”,面临着GC(垃圾回收器)这个“死神”,我可以逃脱命运的摆布吗?我应该如何逃脱呢? 其实是可以的,就是有名的finalize 大法(以前黑客常用的方法之一),下面代码演示一下: /** 此代码演示: 1.对象可以在被GC时自救 2.这种自救的机会只有一次,因为一个对象的finalize()方法最多只会…
G1回收器:区域化分代式 既然我们已经有了前面几个强大的GC,为什么还要发布Garbage First (G1)GC?  原因就在于应用程序所应对的业务越来越庞大.复杂,用户越来越多,没有GC就不能保证应用程序正常进行,而经常造成STW的GC又跟不上实际的需求,所以才会不断地尝试对GC进行优化.G1 (Garbage一First) 垃圾回收器是在Java7 update4之后引入的一个新的垃圾回收器,是当今收集器技术发展的最前沿成果之一.  与此同时,为了适应现在不断扩大的内存和不断增加的处理器…
今天去看牙医,他问我年级轻轻牙齿怎么磨损这么严重?我说,没有人点赞的这些年,我都是咬着牙过来的. Java中的垃圾回收器几乎是面试中的必考点,无论是面试初级,中级还是高级,总免不了要问一问垃圾回收器的一些知识点.不管在实际开发中你使用程度怎么样,为了面试不被压价,还是非常有必要对它做一个较深入的理解. 本篇对JVM中常用的几种垃圾回收器的主要特点,使用场景及优化建议做一个简单介绍,希望起到抛砖引玉的效果,对你入门有所帮助. 新生代回收器 Serial ParNew parallel 老年代回收器…
文章内容摘自:深入理解java虚拟机 第三章   对象已死? 1. 引用计数算法: 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1:当引用失效时,计数器值就减1:任何时刻计数器为0的对象就是一个不可能再被使用的. 优点:实现简单,判定效率高 缺点:很难解决相互对象间相互循环引用的问题 2. 可达性分析法: 通过一系列的称为 “GC Roots” 的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当到达一个对象没有任何引用链时,则证明此对象是不可用的. 3.…
一.Serial收集器 新生代收集器,在垃圾回收时,必须暂停其他所有的工作线程.即Stop-The-World. 评价:老而无用,食之无味,弃之可惜. 二.ParNew收集器 新生代收集器,serial多线程的版本. ParNew收集器和serial在控制参数.收集算法.Stop The World.对象分配原则.回收策略都保持一致.     paramllel:并行,指多条垃圾收集线程并行工作,但此时用户线程仍处于等待状态. concurrent:并发,指用户线程与垃圾回收同时执行,(但不一定…