文档章节

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

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

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

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

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

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

小小庄
2017/08/30
0
0
Java 类加载机制 ClassLoader Class.forName 内存管理 垃圾回收GC

Java之类加载机制 类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行。 研究类加载机制的第二个目的是让程序能动态的控制类加载...

underA
2013/10/24
0
0
JAVA内存管理和JVM运行机制、垃圾回收、内存调优

一、JAVA内存管理 java是跨平台语言,java预编译.class文件放置JVM虚拟机中运行; Java的内存结构,也就是运行时的数据区域 运行时数据区 方法区:常量池、变量等存储地方;(持久区) 堆:实...

盼望明天
08/03
0
0
JDK的命令行工具系列 (一) jps、jstat

概述 在我们进行故障定位和性能分析时, 可以使用Java Dump(也叫Dump文件)来帮助排查问题, 它记录了JVM运行期间的内存占用和线程执行等情况。其中Heap Dump文件是二进制格式, 它保存了某一时刻...

qingshanli
07/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 快捷键

快捷键图标。 官方的下载地址为:https://atlassianblog.wpengine.com/wp-content/uploads/2018/01/keyboard-shortcuts-infographics.pdf...

honeymose
45分钟前
1
0
Apache限定目录解析PHP,限制user_agent,PHP相关的配置

Apache限定目录解析PHP 配置前访问upload/index.php [root@test-a ~]# curl -x192.168.77.139:80 'www.test.com/upload/index.php'This is upload diretory 配置,/usr/local/apache2.4/......

野雪球
48分钟前
1
0
java.util.Concurrent.Exchanger源码

类图 源码: package java.util.concurrent;import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.atomic.AtomicReference;import java.util.concurrent......

狼王黄师傅
今天
5
0
Kubernetes里的secret最基本的用法

Secret解决了密码、token、密钥等敏感数据的配置问题,使用Secret可以避免把这些敏感数据以明文的形式暴露到镜像或者Pod Spec中。 Secret可以以Volume或者环境变量的方式使用。 使用如下命令...

JerryWang_SAP
昨天
4
0
2018-11-20学习笔记

1. python数据类型: 给变量赋值什么样的值,变量就是什么样的类型 给变量赋值整数,变量就是整数类型 给变量赋值字符串,变量就是字符串类型 123 和“123”一样吗? 在python中 单引号 与双...

laoba
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部