文档章节

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

tngou
 tngou
发布于 2013/03/20 20:47
字数 968
阅读 285
收藏 9
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

粉丝 86
博文 131
码字总数 50242
作品 8
成都
个人站长
《成神之路-基础篇》JVM——垃圾回收(已完结)

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

05/05
0
0
My java——JVM(内存)二

续 My java——JVM(java 虚拟机)一 http://my.oschina.net/mynote/blog/113572 这里继续对java做深入的理解。 从(一)中说明了JVM就等同于操作系统,我们在学习操作系统的时候就会理解内存...

tngou
2013/03/14
0
0
这可能是新手最容易入门的JVM讲解(不过是一场恋爱)

  作者:请叫我红领巾,转载请注明出处http://www.cnblogs.com/xxzhuang/p/7453746.html,简书地址:http://www.jianshu.com/p/b963b3c0ad53 一.写在前面   首先,本篇文章并没有涉及原理...

小小庄
2017/08/30
0
0
Java finalize方法

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

清风伴月
2017/10/22
0
0
《成神之路-基础篇》JVM——JVM参数及调优(已完结)

Java内存模型,Java内存管理,Java堆和栈,垃圾回收 本文是[《成神之路系列文章》][1]的第一篇,主要是关于JVM的一些介绍。 持续更新中 JVM参数及调优 JVM实用参数系列 成为Java GC专家(5)...

05/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

nginx模块学习六 add_header 跨域访问

语法 Syntax: add_header name value [always];Default: --Context:http,server,location,if in location 例:/etc/nginx/conf.d/default.conf server {    listen       80; ......

Romanceling
今天
0
0
SpringBoot初探

#SpringBoot初探 三种创建SpringBoot项目的方式: 第一种:使用IDEA创建maven项目,选择maven-archetype-quickstart; 第二种:使用IDEA创建Spring Initializer,选择web组件; 第三种:使用...

向码而生
今天
2
0
IO

JAVA中IO技术:BIO、NIO、AIO 1、同步异步、阻塞非阻塞概念 同步和异步是针对应用程序和内核的交互而言的。 阻塞和非阻塞是针对于进程在访问数据的时候,根据IO操作的就绪状态来采取的不同方...

DemonsI
今天
0
0
org.apache.commons 常用工具类

一. org.apache.commons.io.IOUtils closeQuietly 关闭一个IO流、socket、或者selector且不抛出异常。通常放在finally块。 toString 转换IO流、 Uri、 byte[]为String。 copy IO流数据复制,...

sprouting
今天
0
0
linux使用Inotify监控目录或者文件状态变更

基本概念: Inotify 是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。 需求: 1.有一个文件采集进程,...

mickelfeng
今天
0
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部