堆分区:所有new的对象都会存放在堆中

     > 新生代(Young Generation):存放生命周期短的对象,具体还分为Eden和Survivor两个区,其中Survivor分为From Space和To Space;
     > 旧生代(Old Generation):存放生命周期长的对象
     > 持久代(Permenent Generation):用于存放class字节码等

 
JVM使用的GC算法是:分代收集
     > 频繁的收集新生代
     > 较少的收集旧生代
     > 基本不收集持久代

 
JVM的GC机制分为:Minor GC 和 Full GC
     > Minor GC: 即普通GC,负责收集新生代里所有对象,会把Eden里所有活着的对象复制到Survivor里,如果Survivor放不下,则把Survivor里活着的对象放入旧生代里
     > Full GC:会对新生代和旧生代进行收集,算法不同效率会低于GC。显式调用System.gc()时,就是进行Full GC。
     > 触发条件:Eden满了触发Minor GC;有新对象进入旧生代时,旧生代空间不足则进行Full GC

 
JVM的清理算法:
     > 引用计数法(早期JVM):JVM会为对象的引用数进行计数,创建则添加,引用超出范围则删减,当计数为0时,则可以收集
     > 对象引用遍历:JVM会遍历所有根对象,根据对象图递归确定可到达对象,如果某对象实例可以从根对象到达,则将其标记,称为标记对象;在执行收集阶段,只需要简单的扫描堆栈,删除所有未标记对象即可。一般在之后还会进行压缩,以便为新的对象腾出空间。
  > 复制清理法

 
JVM如何清理一个对象:
     > 新生代:采用复制清理法,扫描后把可到达的对象复制到未使用的区域,如survivor里,然后清楚Eden里所有对象
     > 旧生代:采用标记清理然后压缩,内容见对象引用遍历。
     > 机制:串行和并行两种,串行使用于单线程,单cpu;并行使用于多线程,多核cpu。
 

调优:
     >使用调优:尽早将不用的对象赋值null,而不是等到退出生命周期自动赋值;少用finalize(),会增大GC工作量;当程序等待时,手动执行system.gc();
     >虚拟机优化选项:网上查询

JVM GC笔记的更多相关文章

  1. JVM & GC 笔记

    0. 说明 转载并修改自JVM 1. JVM 1.1 什么是JVM JVM为Java虚拟机(Java Virtual Machine) Runtime data area,运行时数据区. 包含5个区域 ...

  2. 【Java虚拟机】JVM学习笔记之GC

    JVM学习笔记二之GC GC即垃圾回收,在C++中垃圾回收由程序员自己来做,例如可以用free和delete来回收对象.而在Java中,JVM替程序员来执行垃圾回收的工作,下面看看GC的详细原理和执行 ...

  3. JVM学习笔记(四)------内存调优【转】

    转自:http://blog.csdn.net/cutesource/article/details/5907418 版权声明:本文为博主原创文章,未经博主允许不得转载. 首先需要注意的是在对JVM内 ...

  4. JVM学习笔记(四)------内存调优

    首先需要注意的是在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提 ...

  5. java之jvm学习笔记十三(jvm基本结构)

    java之jvm学习笔记十三(jvm基本结构) 这一节,主要来学习jvm的基本结构,也就是概述.说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完全有信心,让概念在你的脑子里变成 ...

  6. jvm内存JVM学习笔记-引用(Reference)机制

    在写这篇文章之前,xxx已经写过了几篇关于改jvm内存主题的文章,想要了解的朋友可以去翻一下之前的文章 如果你还不了解JVM的基本概念和内存划分,请阅读JVM学习笔记-基础知识和JVM学习笔记-内存处 ...

  7. JVM学习笔记-JVM模型

    JVM学习笔记 == 标签(空格分隔): jvm 学习笔记全部来自于<深入理解java虚拟机>总结 jvm内存示意图 虚拟机栈(Java Virtual Machine Stacks): ...

  8. JVM 学习笔记记录

    JVM 学习笔记记录 Sun JDK 监控和故障处理工具 名称 主要作用 jps JVM Process Status Tool, 显示指定系统内所有的HotSpot虚拟机进程 jstat JVM S ...

  9. JVM学习笔记-第三章-垃圾收集器与内存分配策略

    JVM学习笔记-第三章-垃圾收集器与内存分配策略 tips:对于3.4之前的章节可见博客:https://blog.csdn.net/sanhewuyang/article/details/95380 ...

随机推荐

  1. WPF项目学习.一

    WPF项目搭建 版权声明:本文为博主初学经验,未经博主允许不得转载. 一.前言 记录在学习与制作WPF过程中遇到的解决方案. 使用MVVM的优点是 数据和视图分离,双向绑定,低耦合,可重用行,相对独立 ...

  2. latex编辑器

    \prod \left ( a b c \right ) http://latex.codecogs.com/eqneditor/editor.php

  3. Python报错:IndentationError: expected an indented block

    sum = 0 for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]: sum = sum + x print(sum) 代码如上,但是运行报错: 发现是因为少了缩进,改正 ...

  4. ubuntu:通过封装验证码类库一步步安装php的gd扩展

    我相信很多人的lamp环境都是直接复制一堆参数安装进去的,这里有可能成功,也有可能失败,如果是新手,估计要碰到各种错误,就算安装成功,也未必知道那些参数是干嘛的,反正装进去能用就行. 我当初开始的时候 ...

  5. C/C++语言简介之编程开发

    一.编译器 GCC:GNU组织开发的开源免费的编译器. MinGW:Windows操作系统下的GCC. Clang:开源的BSD协议的基于LLVM的编译器. Visual C++:Microsoft ...

  6. kvm的安装使用技巧

    KVM参考网址 http://www.server110.com/kvm/201403/8321.html http://www.2cto.com/os/201511/451650.html http ...

  7. windows 如何编译 Openssl ?

    windows 如何编译 Openssl ? 编译环境 VS2015 Openssl 1.0.2 ActivePerl 5.24.3 x64 编译步骤 安装 ActivePerl 期间,勾选添加至环境 ...

  8. nyoj137 取石子(三) 楼教主男人八题之一

    思路:一堆时,N态.两堆时,当两堆数量相同,P态,不同为N态.三堆时,先手可以变成两堆一样的,必胜N态. 此时可以总结规律:堆数为偶数可能且石子数都是两两相同的,为P态.分析四堆时,当四堆中两两数量一 ...

  9. 校验Linux程序是否被黑客修改

    一个黑客突破你的层层防御后,修改你的程序或者覆盖了你的工具时.确定一个已安装程序的所有文件,有没有被修改过的途径之一就是使用RPM包校验功能 如果图片排版有任何错误,欢迎访问我的简书www.jians ...

  10. .net core 部署到 iis 步骤及报错解决方法

    我写了一个Asp.net core mvc项目,但是部署在iis发生了502.5的问题一直解决不了. 环境 系统:最强Win10; 工具:轻巧VS Code; 各种百度bing都没有我要的解决方案,说 ...