第一个大家都应该知道的概念就是应用程序中不断的new 分配了内存,却没有显式的代码去清理内存,而执行这个清理过程的自动垃圾回收的过程就叫做GC。

但是,JVM 说明并没有要求一定要有GC,JVM 说明压根没规定一点需要GC。但是目前来说内存并非是无限的,所以目前的JVM 实现一般都自带了GC功能。

GC 的优点:

1 减轻了程序员维护对象内存的麻烦

2 增加了JVM 的内存安全,不会因为一些学生习作的问题而崩溃.

缺点:

1 性能的损失.

2 无法控制GC 的cpu.

GC 原则

1 必须能够识别垃圾对象

2 必须能够回收利用内存

怎么识别垃圾?

从根不可达的就是垃圾。

关于根的定义,各个虚拟机实现是不同的。根的范围比较的广,

这里主要区分的是垃圾回收的算法:

引用计数和跟踪。

引用计数:

这个是比较古老的垃圾回收方法。

优点是反应很快。

缺点是无法识别循环引用,当然加加减减本身也是耗费资源的。

正是因为如此,引用计数这种技术已经升天了!

tracing algorithm

最基本的算法叫做 标记和清除. 扫一轮下来,没能扫到的都标记为可达,没扫到的自然都是不可达了.

当然扫除以后,自然还需要压缩空间,将对象移动,更新对象引用的指针.

压缩空间也有一些算法,这里就不关注了.

按代回收

因为不知道GC 什么时候启动,什么时候完成,而且GC 开动时候程序基本就不好动了,所以增量回收的概念产生了为了减轻这种副作用。

按代回收就是增量回收的一种实现。

这里是一种很有意思的train 算法,具体下次再展开。

Finalization

由于jvm 实现是多种多样的,所以不要依赖于任何的终结器中的资源释放,天知道什么时候里面的代码会被执行。

对象可能在finalizer 里面复活,所以导致了软reachable, 弱reachable, 幻觉reachable 三种状态。

Note

GC 的优缺点?

常见的GC 算法?

常见的compact 算法?

关于object 的三个状态,下回分解。

Java Hour 60 逃不开的GC的更多相关文章

  1. Java虚拟机笔记(二):GC垃圾回收和对象的引用

    为什么要了解GC 我们都知道Java开发者在开发过程中是不需要关心对象的回收的,因为Java虚拟机的原因,它会自动回收那些失效的垃圾对象.那我们为什么还要去了解GC和内存分配呢? 答案很简单:当我们需 ...

  2. Java中9种常见的CMS GC问题分析与解决

    1. 写在前面 | 本文主要针对 Hotspot VM 中"CMS + ParNew"组合的一些使用场景进行总结.重点通过部分源码对根因进行分析以及对排查方法进行总结,排查过程会省 ...

  3. 到头来还是逃不开Java - Java13核心类

    Java13核心类 没有特殊说明,我的所有学习笔记都是从廖老师那里摘抄过来的,侵删 引言 兜兜转转到了大四,学过了C,C++,C#,Java,Python,学一门丢一门,到了最后还是要把Java捡起来 ...

  4. 到头来还是逃不开Java - Java13程序基础

    java程序基础 没有特殊说明,我的所有学习笔记都是从廖老师那里摘抄过来的,侵删 引言 兜兜转转到了大四,学过了C,C++,C#,Java,Python,学一门丢一门,到了最后还是要把Java捡起来. ...

  5. 到头来还是逃不开Java - Java13面向对象基础

    面向对象基础 没有特殊说明,我的所有学习笔记都是从廖老师那里摘抄过来的,侵删 引言 兜兜转转到了大四,学过了C,C++,C#,Java,Python,学一门丢一门,到了最后还是要把Java捡起来.所以 ...

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

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

  7. java面试题之----JVM架构和GC垃圾回收机制详解

    JVM架构和GC垃圾回收机制详解 jvm,jre,jdk三者之间的关系 JRE (Java Run Environment):JRE包含了java底层的类库,该类库是由c/c++编写实现的 JDK ( ...

  8. AJPFX浅谈Java 性能优化之垃圾回收(GC)

    ★JVM 的内存空间 在 Java 虚拟机规范中,提及了如下几种类型的内存空间: ◇栈内存(Stack):每个线程私有的.◇堆内存(Heap):所有线程公用的.◇方法区(Method Area):有点 ...

  9. java中将对象引用设置为null对于GC有没有帮助

    相信,网上很多java性能优化的帖子里都会有这么一条: 尽量把不使用的对象显式得置为null.这样有助于内存回收 可以明确的说,这个观点是基本错误的.sun jdk远比我们想象中的机智.完全能判断出对 ...

随机推荐

  1. Java初学(八)

    一.图解String类创建对象及赋值 面试题: 二.String.StringBuffer.StringBuilder区别 1.String内容不可变,而StringBuffer.StringBuil ...

  2. struts2使用注解--ACTION中的应用

    1.在类中指定包:@ParentPackage("system").其中system是在struts.xml中定义的包名.2.配置文件--->注解2.1配置文件方式(返回js ...

  3. XSS 探索

    1. 什么是XSS攻击? 正常的页面被渗出了攻击者的js脚本,这些脚本可以非法地获取用户信息,然后将信息发送到attacked的服务端. XSS是需要充分利用输出环境来构造攻击脚本的 2. 危害 非法 ...

  4. $key 的用法

    <?php $attr=array("a","b","c","d"); //$key,默认是主键值,$value, ...

  5. The Pilots Brothers' refrigerator(dfs)

    The Pilots Brothers' refrigerator Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 19718 ...

  6. js实现把网页table导成Excel

    //导出excel function exportExcel(DivID,strTitle){ if(DivID==null) { return false; } var jXls, myWorkbo ...

  7. Centos优化Hadoop

    导读 Hadoop是一个能够让用户轻松架构和使用的分布式计算平台,用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序,本节讲安装并且优化centos 6.7 系统下的Supper Hado ...

  8. poj2568

    Y2K Accounting Bug Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11275   Accepted: 56 ...

  9. HDU3344(小广搜+小暴力

    Kakuro Extension Extension Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  10. 【ERROR】使用jquery的ajax出现error:readyState=4,status=500

    使用jquery的ajax出现error:readyState=4,status=500,ajax代码如下: $.ajax({ url : "../toBeFinMisManage/show ...