文档章节

My java——JVM(垃圾回收)四

tngou
 tngou
发布于 2013/03/20 20:47
字数 968
阅读 309
收藏 11
My java——JVM(内存域) 中讲述了Java在JVM中的内存使用,其实在我们出来java程序时基本上有两个地方的内存处理

一是、二是,JVM会自动回收堆中的内存,也就我们所说的垃圾回收,那JVM怎么实现垃圾回收的呢?

    在说垃圾回收时还是说一下,java在JVM运行的内存处理:
    首先,当JVM程序运行时会在程序计数器里分配一个线程的标记,主要标记线程完成情况,如果线程执行完成,该标记就回收、清空。
    然后,由于程序运行,需要对一些对象引用的保存。JVM就把这些对象的引用保存到里,随着程序计数器的线程的进行或结束,栈中的引用也就会失效回收、清空等。
    最后,由于中保存对象存储是线程共享的,所以线程是不能为堆做出内存回收、清空等机制。那这么回收堆中保存的对象内存,这里就是JVM的垃圾回收机制。它定时比较如果中没有引用指向中的对象,那么就释放该内存空间。

    以上只是我的个人理解,觉得好像JVM的的内存初始和回收就是这样,但也许这是错的,那JVM是如果实现回收
堆中的内存?它有什么机制?什么实现?
    其实我觉得这些事比较难的,JVM不是一两下就清楚了的,垃圾回收的原理其实没有必要知道,JVM本来就是来解决内存的问题。我也看了一些关于垃圾回收的原理的一些知识,不过还是没有懂起,也许水平在哪里,不能做实验,只有理论。但还是说下吧。
    不同的JVM,有着不同的垃圾回收机制。(Garbage Collection ,GC)垃圾收集组要完成一、回收空间;二、让堆中的对象排列更整齐。这两点是GC的主要目的。
    垃圾收集的算法主要有如下:

1、引用计数法
    这个比较古老的算法,简单但速度慢,就是把我们定义在栈中的引用的标记起来,在定时回收标记引用无效的对象。

2、标记—清扫
    sun公司最早就是使用的这种技术,先标记出要回收的对象,然后定时清扫对象。但这样内存就很杂碎,由于回收的内存都是到处分布的。

3、停止—复制
    把内存分成两块,当一块用完了,就把这块需要的对象复制到另外的一块中,然后把这块清除。

自适应/标记—整理
    先标记—清扫,再停止—复制,这就是自适应/标记整理。

5、分代收集算法
    这种算法只是把内存分成适合标记—清扫的就做该操作,适合停止—复制就做该操作。

这里只是简单的描述,如果有兴趣可以去研究一下。


下面介绍一下收集器的发展

1、Serial收集器
    最早的收集器,在JDK1.3以前是唯一的收集器。

2、ParNew收集器
    是Serial的多线程版本。

3、Parallel Scavenge收集器
    采用的复制算法的新生代收集器。

4、Serial Old收集器
    主要是和Parallel Scavenge搭配使用(JDK1.5)

5、Parallel Old收集器
    采用的标记—整理算法(JDk1.6)。

6、CMS收集器
    主要是重视响应速度,基于 标记—清除算法。

7、G1收集器
    整合收集技术发展最前沿的成功。(JDK1.7)英语好的可以看
文档地址http://docs.oracle.com/javase/7/docs/technotes/guides/vm/G1.html

ok就到这来,菜鸟记

© 著作权归作者所有

tngou

tngou

粉丝 91
博文 133
码字总数 53069
作品 8
成都
个人站长
私信 提问
《成神之路-基础篇》JVM——垃圾回收(已完结)

Java内存模型,Java内存管理,Java堆和栈,垃圾回收 本文是[《成神之路系列文章》][1]的第一篇,主要是关于JVM的一些介绍。 持续更新中 Java之美[从菜鸟到高手演变]之JVM内存管理及垃圾回收 ...

2018/05/05
0
0
【Java学习】疯狂Java讲义——Java语言概述与开发环境

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/YYM15732626210/article/details/90744248 这里写自定义目录标题 【背...

Yolanda94
06/04
0
0
Java虚拟机基础——4内存回收机制

Java虚拟机整体篇幅如下: Java虚拟机基础——1Java的内存模型 Java虚拟机基础——2JVM运行时数据区 Java虚拟机基础——3类加载机制 Java虚拟机基础——4内存回收机制 本篇文章的内容如下: ...

隔壁老李头
2018/10/03
0
0
Java finalize方法

《JAVA编程思想》: java提供finalize()方法,垃圾回收器准备释放内存的时候,会先调用finalize()。 (1).对象不一定会被回收。 (2).垃圾回收不是析构函数。 (3).垃圾回收只与内存有关。 (4)....

清风伴月
2017/10/22
42
0
JVM内存分析及导致内存溢出的不健壮代码及解决办法

转自:http://hi.baidu.com/fvsd3/blog/item/9baec09a301bdebcc9eaf4a2.html 一、JVM内存区域组成 java把内存分四种: 1、栈区(stack segment)— 由编译器自动分配释放,存放函数的参数值,...

flynewton
2010/09/11
6.4K
0

没有更多内容

加载失败,请刷新页面

加载更多

使用CSS自定义属性构建骨架屏

写在前面 几天前看到薄荷前端团队分享的《前端骨架屏方案小结》,突然回想起一年前看到的max bock写的《Building Skeleton Screens with CSS Custom Properties》,翻译整理写下出此文,分享...

前端老手
昨天
9
0
Docker常用命令小记

除了基本的<font color="blue">docker pull</font>、<font color="blue">docker image</font>、<font color="blue">docker ps</font>,还有一些命令及参数也很重要,在此记录下来避免遗忘。 ......

程序员欣宸
昨天
9
0
MAT使用-jvm内存溢出问题分析定位

1.MAT简介: MAT 全称 Eclipse Memory Analysis Tools 是一个分析 Java堆数据的专业工具,可以计算出内存中对象的实例数量、占用空间大小、引用关系等,看看是谁阻止了垃圾收集器的回收工作,...

xiaomin0322
昨天
5
0
内网和外网之间的通信(端口映射原理)

首先解释一下“内网”与“外网”的概念: 内网:即所说的局域网,比如学校的局域网,局域网内每台计算机的IP地址在本局域网内具有互异性,是不可重复的。但两个局域网内的内网IP可以有相同的...

Jack088
昨天
6
0
3.深入jvm内核-原理、诊断与优化-4. GC算法和种类

一、GC算法和种类 GC的概念 GC算法 引用计数法 标记清除 标记压缩 复制算法 可触及性 Stop-The-World GC的对象是堆空间和永久区 引用计数法 老牌垃圾回收算法 通过引用计算来回收垃圾 使用者...

hexiaoming123
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部