第一个大家都应该知道的概念就是应用程序中不断的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. JS小记

    好记性不如烂笔头. 1.document.ElementFromPoint:根据坐标获得元素 2.有时候要操作DOM页面,但是得不到预期结果,很可能是因为页面还没加载完成,在console控制台可以看 ...

  2. unity 全屏乱影 BlitMultiTap

    http://m.blog.csdn.net/blog/stalendp/40859441 官方例子AngryBots的链接地址:http://u3d.as/content/unity-technol ...

  3. Java基础之理解Annotation(与@有关,即是注释)

    Java基础之理解Annotation 一.概念 Annontation是Java5开始引入的新特征.中文名称一般叫注解.它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata) ...

  4. 通过pypyodbc使用SQL server

    通过pypyodbc使用SQL server 不像pyodbc需要C, pypyodbc是纯python的实现, 安装起来非常方便. 创建连接: #在操作系统上先配odbc, 然后在代码中指定odbc ...

  5. JSP 容易弄混的几点总结

    最近在做Java Web方面的整理,遇到些问题,发现自己印象也不是很深刻了,这里作下整理,以后遇到问题再更新. 一.<%@include file="页面名称"%>和& ...

  6. 错误 1 未知的服务器标记“asp:ScriptManager”。

    如题 ... 解决方案 :将 <%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=ne ...

  7. Internet信息服务找不到

    最近我的电脑也出现了Internet信息服务找不到的情况,在网络上查了很多方法都没一个正确的,后面通过下面的方法我成功了,故此我把这个经历也分享给大家,希望能够帮到您. 控制面板里“->添加/删 ...

  8. Vim的使用方法

    导读 Vim是从vi发展出来的一个文本编辑器.代码补全.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器. 一.vi.vim介绍 ...

  9. DButils实现查询和新增

             public static Adttendance DBSql(String data) throws SQLException {     String url = "j ...

  10. HDU 4435 charge-station () bfs图论问题

    E - charge-station Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u ...