GC简介
Java堆内存
在运行时,java的实例被存放在堆内存区域。当一个对象不在被引用,满足条件就会从堆内存移除并且内存空间被回收。堆内存由三个主要区域
1.新生代
    Eden空间(任何实例都通过Eden空间进入运行时内存区域)
    S0 Survivor(存在时间久的实例将会从Eden空间移动到S0 Survivor空间)
    S1 Survivor空间(存在时间更长的实例将会从S0 Survivor空间移动到S1 Survivor)
2.老年代
    实例将从S1提升到Tenured(终身代)
3.永久代(现已被删除,元信息存放在方法区)
    包含类、方法等细节的元信息
 
Java垃圾回收过程
Java垃圾回收是一项自动化的过程,用来管理程序所使用的运行时的内存。通过GC,JVM解除了程序员在程序中分配和释放内存资源的开销
1.启动垃圾回收
    作为自动化过程,程序员不需要在代码中显示地启动垃圾回收过程。System.gc()和Runtime.gc()用来请求JVM启动垃圾回收。
    启动由JVM负责,JVM可以拒绝这个请求,主要取决于堆内存中Eden是否可用。
    
2.Java垃圾回收过程
    垃圾回收是一种回收无用内存空间并使其对未来实例可用的过程。
    新生代(Eden-->S0-->S1)-->老年代(老年代是实例生命周期的最后阶段,如果实例不再被引用,那么它们会被标记为回收)
 
垃圾回收中实例的终结
在释放一个实例和回收内存空间之前,GC会调用实例各自的finlize()方法,从而该实例有机会释放所持有的资源    
    
对象什么时候符合垃圾回收的条件?
  • 所有实例都没有活动线程访问
  • 没有被其它任何实例访问的循环引用实例
在编译过程中,java编译器能选择给实例赋null值,从而标记实例为可回收    
 
垃圾回收的类别
java中有四种类型的垃圾回收器
1.串行垃圾回收器
2.并行垃圾回收器
3.并发标记扫描垃圾回收器
4.G1垃圾回收器
 
1.串行垃圾回收器
    它只使用一个单独的线程进行垃圾回收,通过冻结所有应用程序线程进行工作,所有可能不适合服务器环境。它最适合的是简单的命令行程序。
    JVM参数 -XX:+UseSerialGC可以使用串行垃圾回收器
    
2.并行垃圾回收器
    它是JVM默认的垃圾回收器,它使用多线程进行垃圾回收。它也会冻结所有的应用程序线程当执行垃圾回收的时候。
 
3.并发标记扫描垃圾回收器
    多线程进行。只会在下面两种情况下持有应用程序所有线程
    1)当标记的引用对象在老年代
    2)在进行垃圾回收的时候,堆内存的数据并发改变。
    相比并行垃圾回收器,并发标记扫描垃圾回收器使用更多的CPU来确保程序的吞吐量。如果我们可以为了更好的程序性能分配更多的CPU,那么并发标记上扫描垃圾回收器是更好的选择。
    JVM参数 XX:+UseParNewGC
    
4.G1垃圾回收器
    适用于堆内存很大的情况,它将堆内存分割成不同的区域,并发的进行垃圾回收,它会优先选择垃圾最多的区域。
    JVM参数 -XX:+UseG1GC
    
GC优化配置(下一章详解)
    -Xms             初始化堆内存大小
    -Xmx             堆内存最大值
    -Xmn             新生代大小
    -XX:PermSize     初始化永久代大小
    -XX:MaxPermSize    永久代最大容量

JVM(二)GC的更多相关文章

  1. JVM之GC(二)

    昨天总结了GC之前要做的事情,今天介绍一下主流的GC算法. 先介绍一下几个名词: Stop The World(STW):JVM进行GC的时候总不能一边清理垃圾一边制造垃圾把,那么垃圾鉴定的准确性根本 ...

  2. JVM的GC概述

    JVM的GC概述 GC即垃圾回收,是指jvm用于释放那些不再使用的对象所占用的内存.在充分理解了垃圾收集算法和执行过程后,才能有效的优化它的性能. 有些垃圾收集专用于特殊的应用程序.比如,实时应用程序 ...

  3. JVM之GC算法的实现(垃圾回收器)

    上一节:<JVM之GC算法> 知道GC算法的理论基础,我们来看看具体的实现.只有落地的理论,才是真理. 一.JVM垃圾回收器的结构 JVM虚拟机规范对垃圾收集器应该如何实现没有规定,因为没 ...

  4. 聊一聊 JVM 的 GC

    原文链接:https://www.changxuan.top/?p=1457 引言 JVM 中的 GC 在技术博客中应该算是个老生常谈的话题,网络上也存在着许多质量参差不齐的文章,可以看出来大都是&q ...

  5. Linux使用jstat命令查看jvm的GC情况

    Linux使用jstat命令查看jvm的GC情况 http://www.open-open.com/lib/view/open1390916852007.html http://www.aiuxian ...

  6. poptest老李谈jvm的GC

    poptest老李谈jvm的GC   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:90882 ...

  7. Linux使用jstat命令查看jvm的GC情况(转)

    B. jstack jstack主要用来查看某个Java进程内的线程堆栈信息.语法格式如下: 1 jstack [option] pid 2 jstack [option] executable co ...

  8. JVM(二) 对象存活判断和垃圾回收算法

    对象的创建 概述 下面简要介绍创建对象的几个重要步骤 : 检查能否在常量池定位到一个类的符号引用,并检查这个符号代表的类是否已被加载,解析和初始化过.如果没有则执行类加载的操作.(即是说对象的引用放在 ...

  9. jvm的GC日志分析 [转]

      jvm的GC日志分析 标签: jvm内存javagc 2015-06-22 16:37 1566人阅读 评论(1) 收藏 举报  分类: Java(4)  JVM的GC日志的主要参数包括如下几个: ...

  10. JVM(二):Java中的语法糖

    JVM(二):Java中的语法糖 上文讲到在语义分析中会对Java中的语法糖进行解糖操作,因此本文就主要讲述一下Java中有哪些语法糖,每个语法糖在解糖过后的原始代码,以及这些语法糖背后的逻辑. 语法 ...

随机推荐

  1. SpaceVim 语言模块 lua

    原文连接: https://spacevim.org/cn/layers/lang/lua/ 模块简介 启用模块 快捷键 交互式编程 运行当前脚本 模块简介 这一模块为在 SpaceVim 中进行 l ...

  2. Touch table

    On this page I present the results of my touch action research. I concentrated on the few basic acti ...

  3. Java设计模式(12)——结构型模式之门面模式(Facade)

    一.概述 概念 简要示意图(没有一个统一的UML图) 角色 门面角色:门面模式核心,它被客户端调用,并且熟悉子系统   子系统角色:子系统,子系统并不知道门面的存在,门面对它来说只不过是另外一个客户端 ...

  4. 20154327 EXP8 Web基础

    基础问题回答 (1)什么是表单? 表单:表单在网页中主要负责数据采集功能.一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法. 表单域:包 ...

  5. 洛谷P2252 取石子游戏(威佐夫博弈)

    题目背景 无 题目描述 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后 ...

  6. 北京Uber优步司机奖励政策(2月24日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  7. 用label实现横向瀑布流的方法

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXcAAAKxCAIAAAAn+3udAAAKqWlDQ1BJQ0MgUHJvZmlsZQAASImVlg

  8. C++中的引用常见用法

    1.引用的内涵 引用就是给变量取外号而已. 2.四种不能使用引用的情况 void &r=x; //不能建立void类型引用 int &&r=x; //不能建立引用的引用 int ...

  9. android 学习十四 探索安全性和权限

    1.部署安全性:应用程序必须使用数字证书才能安装到设备上. 2.执行期间的安全性:    2.1 使用独立进程    2.2 使用固定唯一用户ID    2.3  申明性权限模型   3数字证书   ...

  10. tensorflow学习一

    1.用图(graph)来表示计算任务 2.用op(opreation)来表示图中的计算节点,图有默认的计算节点,构建图的过程就是在其基础上加节点. 3.用tensor表示每个op的输入输出数据,可以使 ...