GC:

垃圾回收由JVM中GC线程监控和执行。

参考: http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html

GC算法:

1. 标记清除法

首先从根节点开始遍历所有对象,标记出被引用的对象,然后遍历堆,释放所有未标记的对象,会产生内存碎片。

2.复制法

将内存划分为大小相等的两块,开始只使用其中的一块,当这块耗尽之后,将存活的对象复制到另外一块,重新分配地址,然后全部清理这块。

3.标记整理算法

在标记清除的基础上移动存活对象,并更新引用指针,避免产生内存碎片。

分代回收

虚拟机对内存进行分代管理
MinorGC是对Young Generation内存区的GC,速度较快且频繁。
MajorGC是对Old Generation内存区的GC,速度较慢,会使应用程序挂起,也称FullGC。
大多数对象生命期很短,在Eden区域中创建和销毁。当Eden内存区域耗尽时,GC线程进行一次MinorGC。
MinorGC时将Eden区域的对象移动到一块Survivor区域和Old区。
某些需要大量连续空间的对象会直接在老年代中分配,XX:PretenureSizeThreshold参数可控制这些大对象的阈值。
jvm为每个对象内存定义age,age每经过一次新生代GC便加1。
当对象的age达到一个阈值时,该对象会被移动到Old区,该阈值可由-XX:MaxTenuringThreshold设置,默认15。
 
 
GC种类:
根据不同内存区域,有不同的垃圾回收器。Young区有:Serial Collector,ParNew Collector,Parallel Scanvenge Collector。Old区有:Serial Old Collector,Parallel Old ollector,CMS Collector。

1.serial collector  单线程收集器

使用单线程去完成所有的gc工作
Client模式下默认
可用-XX:+UseSerialGC强制使用

2.parallel collector  并行收集器

使用多线程的方式,利用多CUP来提高GC的效率
主要以到达一定的吞吐量为目标
Server模式下默认
--YGC:PS FGC:Parallel MSC
可用-XX:+UseParallelGC或-XX:+UseParallelOldGC强制指定
--ParallelGC代表FGC为Parallel MSC
--ParallelOldGC代表FGC为Parallel Compacting
优点:高效
缺点:当heap变大后,造成的暂停时间会变得比较长

3.concurrent collector

并发收集器
使用多线程的方式,利用多CUP来提高GC的效率
并发完成大部分工作,full gc pause短
可用-XX:+UseConcMarkSweepGC强制指定
缺点:
1.会产生内存碎片
2.回收的整个耗时比较长
3.和应用争抢CPU

 

Java基础--垃圾回收GC的更多相关文章

  1. 面试题-Java基础-垃圾回收

    1.Java中垃圾回收有什么目的?什么时候进行垃圾回收? 垃圾回收的目的是识别并且丢弃应用不再使用的对象来释放和重用资源. 2.System.gc()和Runtime.gc()会做什么事情? 这两个方 ...

  2. Java 垃圾回收(GC) 泛读

    Java 垃圾回收(GC) 泛读 文章地址:https://segmentfault.com/a/1190000008922319 0. 序言 带着问题去看待 垃圾回收(GC) 会比较好,一般来说主要 ...

  3. 浅析JAVA的垃圾回收机制(GC)

    1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制. 注意:垃圾回 ...

  4. Java虚拟机垃圾回收(三) 7种垃圾收集器

    Java虚拟机垃圾回收(三) 7种垃圾收集器 主要特点 应用场景 设置参数 基本运行原理 在<Java虚拟机垃圾回收(一) 基础>中了解到如何判断对象是存活还是已经死亡?在<Java ...

  5. Java虚拟机垃圾回收:内存分配与回收策略 方法区垃圾回收 以及 JVM垃圾回收的调优方法

    在<Java对象在Java虚拟机中的创建过程>了解到对象创建的内存分配,在<Java内存区域 JVM运行时数据区>中了解到各数据区有些什么特点.以及相关参数的调整,在<J ...

  6. 了解java虚拟机—垃圾回收算法(5)

    引用计数器法(Reference Counting) 引用计数器的实现很简单,对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1,当引用失效时,引用计数器减1.只要对象A的引用计数器的 ...

  7. Java虚拟机垃圾回收(三): 7种垃圾收集器(转载)

    1.垃圾收集器概述 垃圾收集器是垃圾回收算法(标记-清除算法.复制算法.标记-整理算法.火车算法)的具体实现,不同商家.不同版本的JVM所提供的垃圾收集器可能会有很在差别,本文主要介绍HotSpot虚 ...

  8. Java虚拟机垃圾回收(二) :垃圾回收算法(转载)

    1.标记-清除算法 标记-清除(Mark-Sweep)算法是一种基础的收集算法. 1.算法思路 "标记-清除"算法,分为两个阶段: (A).标记 首先标记出所有需要回收的对象: 标 ...

  9. Java虚拟机垃圾回收:基础点(转载)

    1.Java虚拟机垃圾回收 垃圾回收,或称垃圾收集(Garbage Collection,GC)是指自动管理回收不再被引用的内存数据. 在1960年诞生于MIT的Lisp语言首次使用了动态内存分配和垃 ...

随机推荐

  1. Django详解之四、cookie和session

    一.使用背景 思路 简单的后台管理:对人员的管理 1. 登录注册 2. 老师 班级管理 学院管理 3. 增删改查 开发: 1. 定义数据库表结构 a) 表结构关系 i. class classes(m ...

  2. [转载]Runtime详解

      Runtime的特性主要是消息(方法)传递,如果消息(方法)在对象中找不到,就进行转发,具体怎么实现的呢.我们从下面几个方面探寻Runtime的实现机制. Runtime介绍 Runtime消息传 ...

  3. Python的operator.itemgetter函数和sorted函数

    写这篇文章的目的是之前在<机器学习实战>用Python3实现KNN算法时用到的几个函数不太懂, 地址: 1- https://github.com/hitergelei/Self-Lear ...

  4. python编程常见小技巧

    #主要是记录常见的小问题以及解决办法 ##1.复制的代码,经常出现TAB和空格不一致的情况 将tab或者空格删除,然后重新打出空格或者tab就可以了: ##2.python读取文件,经常出现的编码en ...

  5. 关于centos7下/etc/sysconfig/目录没有iptables问题

    在新买的centos7服务器中想打开防火墙,采用传统centos6的方式用service iptables restart/stop/status 之后报错: 而在/etc/sysconfig/目录下 ...

  6. js获取select标签选中的值[转]

    var obj = document.getElementByIdx_x(”testSelect”); //定位id var index = obj.selectedIndex; // 选中索引 va ...

  7. 编写TreeSet类的实现程序,其中相关的迭代器使用二叉查找树

    package com.test.tree; import java.util.Iterator; /** * 编写TreeSet类的实现程序,其中相关的迭代器使用二叉查找树. * 在每个节点上添加一 ...

  8. hibernate学习(2)

    1 实体类编写规则 2 hibernate主键生成策略 3实体类操作 (1)crud操作 (2)实体对象状态 4 hibernate的一级缓存 5 hibernate事务操作 (1)事务代码规则写法 ...

  9. html5笔记(标签)

    1.aside aside字面理解为“旁边”,在html5中范围更广一点,是跟主内容相关,但是又可以独立的内容 ,可以是广告.引用.侧边栏等等. html5站的例子就是新闻的内容页或者列表页,以列表页 ...

  10. App Store下载Mac应用失败的解决办法

    1. 更换DNS服务器 国内可以用alidns: 223.5.5.5 223.6.6.6 也可以用电信的: 114.114.114.114 国外的可以考虑Google 8.8.8.8 8.8.4.4 ...