JDK1.7 JVM的垃圾收集算法有

1. 标记-清除算法;
2. 复制算法;在商业虚拟机都是使用这种算法来回收新生代的
3. 标记-整理算法;
4、分代收集算法;

JDK1.7 JVM的垃圾收集器有

1. Serial收集器 -- 复制算法
2. parNew收集器 -- 复制算法
3. parallel scavenges收集器 -- 复制算法
4. serial old收集器 -- 标记整理算法
5. parallel old收集器-- 标记整理算法
6. CMS收集器-- 标记-清除算法
7. G1收集器 -- 标记整理算法

垃圾收集的过程:

  HosSpot JVM要判断对象的是"活的" 还是 "死的" 用的是“可达性分析算法”, 如果经过 “可达性分析算法” 发现没有与 GC Roots 相连接的引用链,那就会被第一次标记并且进行筛选,筛选的条件是次对象是否有必要执行 finalize() 方法。当对象没有覆盖finalize()方法,或者finalize()方法已经被虚拟机调用过,就被视作 “没有必要执行”。
  如果这个对象被判定为有必要执行finalize()方法,那么这个对象将被放置在F-Queue队列中,GC将会对F-Queue中的对象进行第二次小规模的标记(如果在调用finalize()方法时重新与引用链上的任何对象建立关联,那么在第二次标记时就会被移除 “即将回收” 的集合),当被两次标记后,就认定这个对象是 “死了”
  下面就来看看"对象死了"后 内存分配与回收策略
  对象的内存分配就是往堆上分配 ,主要分配在Eden区,当Eden区没有足够的空间时,会发起一次MinorGC,如果对象在Eden出生并经过第一次MinorGC后仍然存活,并且能够被Survivor容纳的话,将被移动到Survivor空间中,并且对象年龄设为1,对象在Survivor区中每“熬过”一次MinorGC,年龄就加1岁,当年龄(默认15岁)增加到一定程度就将被晋升到老年代中。

Survivor区的作用是什么?

   Survivor分为两块,一块是From区,GC日志中是S1。一块是To区,GC日志中是S2(From区和To区的大小是一致的)。Survivor的作用是为了减缓对象进入老年代。对象最活跃的地方应该就是在新生代。

方法区什么时候被回收?

  永久代的垃圾收集主要回收两部分内容:废弃常量和无用类。会搜狐废弃常量与回收Java堆中的对象非常类似。以常量池中字面量回收为例,如果一个字符串 “abc” 已经进入了常量池中,但是当前系统没有任何一个String对象是叫做“abc”的,也就是没有任何String的对象引用常量池中的“abc”常量,也没有其他地方引用了这个字面量,如果这时发生内存回收,而且必要的话,这个“abc”常量就会被系统清理出常量池。常量池中其他类(接口)、方法、字段符号引用也与此类似。

  类满足了下面三个条件就算是无用类:

    ★该类所有的实例都已经被回收,也就是Java堆中不存在该类的任何实例。

    ★加载该类的ClassLoader已经被回收

    ★该类对应的java.lang.Class 对象没有再任何地方被引用,无法在任何地方通过反射访问该类的方法。

  虚拟机“可以”对满足上面三个条件的无用类进行回收(注意是“可以”而不是和对象一样,不使用了就必然会回收)。是否对无用类进行回收,HotSpot虚拟机提供了 -Xnoclassgc 参数进行控制,还可以使用 -verbpse:class 以及 -XX:+TraceClassLoading-XX:+TraceClassUnLoading 查看类加载和卸载信息,其中 -verbpse:class 和  -XX:+TraceClassLoading 可以再Product版的虚拟机中使用,-XX:+TraceClassUnLoading 参数需要FastDebug版的虚拟机支持

参考:

  【1】《深入理解Java虚拟机》,周志明

JVM-垃圾收集过程的内存管理的更多相关文章

  1. JVM的组成部分与内存管理

    JVM的组成部分与内存管理 JVM区域划分 由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM内存区域划分.在讨论JVM内存区域划分之前,先来看一下Java程序 ...

  2. JVM学习笔记三:垃圾收集器及内存管理策略

    垃圾收集器 上文说到了垃圾收集算法,这次我们聊一下HotSpot的具体垃圾收集器的实现,以JDK1.7为例,其包含的可选垃圾收集器如下图: 不同收集器之间的连线,代表它们可以搭配使用,收集器所属的区域 ...

  3. JVM垃圾收集器与内存分配策略(一)

    在前面的Java自动内存管理机制(上)和Java自动内存管理机制(下)中介绍了关于JVM的一些基础知识,包括运行时数据区域划分和一些简单的参数配置,而其中也谈到了GC,但是没有深入了解,所以这里开始简 ...

  4. JVM读书笔记之内存管理

    对于从事C.C++程序开发人员来说,在内存管理领域,他们既是拥有最高权力的“皇帝”又是从事最基础工作的“劳动人民”--既拥有每一个对象的“所有权”,又负责每一个对象生命开始到终结的维护责任. 对于Ja ...

  5. 深入理解JVM - 垃圾收集器与内存分配策略 - 第三章

    引用计数算法——判断对象是否存活的算法 很多教科书判断对象是否存活的算法是这样的:给对象添加一个引用计数器,每当一个地方引用它时,计数器值就加1:当引用失效时,计数器值就减1:任何时刻计数器为0的对象 ...

  6. 深入理解JVM虚拟机-2自动内存管理机制

    java虚拟机所管理的内存将会包括一下几个运行时数据区域. 程序计数器: 程序计数器是一块较小的内存空间.字节码解析式工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支.循环.跳转 ...

  7. JVM笔记2-Java虚拟机内存管理简介

    java虚拟机内存管理图如下图所示: 1.线程共享区,是所有的线程所共用的,线程共享区有一下几个组成: 1.方法区: 1.运行时常量池,已经被虚拟机加载的类信息(1.类的版本信息,2.字段,3.方法, ...

  8. jvm垃圾收集器与内存分配策略

    一.垃圾回收 1.对象是否已经变为垃圾 1.1.引用计数法:给对象添加一个引用计数器,每当有地方引用它时,计数器就加1:当引用失效时,计数器值就减1:任何时刻计数器为0的对象就是不可能再被使用的. 这 ...

  9. jvm系列(二)jvm垃圾收集器与内存分配策略

    众所周知,在java语言中,内存分配和回收是由jvm自动管理的.因此内存的分配和回收也是jvm三大功能之一.垃圾收集器(GC)需要完成三件事情: 哪些内存需要回收? 什么时候进行回收? 如何回收? 本 ...

随机推荐

  1. 与table有关的布局

    当IE8发布时,它将支持很多新的CSS display属性值,包括与表格相关的属性值:table.table-row和table-cell,它也是最后一款支持这些属性值的主流浏览器.它标志着复杂CSS ...

  2. Python之模块和包学习

    模块简介 python是由一系列的模块组成的,每个模块就是一个py为后缀的文件,同时模块也是一个命名空间,从而避免了变量名称冲突的问题.模块我们就可以理解为lib库,如果需要使用某个模块中的函数或对象 ...

  3. 用Swift实现一款天气预报APP(二)

    这个系列的目录: 用Swift实现一款天气预报APP(一) 用Swift实现一款天气预报APP(二) 用Swift实现一款天气预报APP(三) 上篇中主要讲了界面的一些内容,这篇主要讨论网络请求,获得 ...

  4. [翻译] FastReport Class Hierarchy (FastReport 组件类层次结构)

    "TfrxComponent" is the base class for all FastReport components. Objects of this type have ...

  5. Windbg and resources leaks in .NET applications 资源汇总

    Windows Forms Leaks 1.http://blogs.msdn.com/b/tess/archive/2008/02/04/net-debugging-demos-informatio ...

  6. EJB学习手记

    周末两天,看了两天的ejb知识.公司有个转发消息的程序,里面是根据ejb/jms+cdi/event做的,这些之前没接触过. 总而言之,从中学到了很多东西,从ejb到webservice. jboss ...

  7. solr特点二:Facet

    返回查询集合中指定field的统计情况,例如找到city一样的文档数目: 加入文档 <add> <doc> <field name="id">1 ...

  8. 【Dnc.Api.Throttle】适用于.Net Core WebApi接口限流框架

    Dnc.Api.Throttle    适用于Dot Net Core的WebApi接口限流框架 使用Dnc.Api.Throttle可以使您轻松实现WebApi接口的限流管理.Dnc.Api.Thr ...

  9. C#中Cookies的读取

    C#中Cookies的读取   链接: 一 .写入Cookie 1. Name 和 Value 属性由程序设定,默认值都是空引用. 2. Domain属性的默认值为当前URL的域名部分,不管发出这个c ...

  10. C# winform中listview排序

    本文解决方案是采用下面链接中的解决方案.十分感谢这篇文章的作者bright:http://blog.163.com/shensc@126/blog/static/1312896522010614103 ...