Java jvm 内存回收机制
源代码下载地址:http://www.zuidaima.com/share/1782298898271232.htm
把上面Test.java中main方面里面的对象引用画成一个从main方法开始的对象引用图的话就是这样的(顶点是对象和引用,有向边是引用关系):
当程序运行起来之后,把它在内存中的状态看成是有向图后,可以分为三种:
1)可达状态:在一个对象创建后,有一个以上的引用变量引用它。在有向图中可以从起始顶点导航到该对象,那它就处于可达状态。
4)虚引用 :不能单独使用,主要是用于追踪对象被垃圾回收的状态。通过PhantomReference类和引用队列ReferenceQueue类联合使用实现,eg :
其实Java垃圾回收主要做的是两件事:1)内存回收 2)碎片整理
①支持压缩的垃圾回收器(标记-压缩 = 标记清除+压缩)会把所有的可达对象搬迁到一起,然后将之前占用的内存全部回收,减少了内存碎片。
②不同代采取不同的垃圾回收策略:新(生存时间短)老(生存时间长)对象之间很少存在引用
Ⅲ对象来源 :绝大多数对象先分配到Eden区,一些大的对象会直接被分配到Old代中。
Ⅳ回收频率 :因为Young代对象大部分很快进入不可达状态,因此回收频率高且回收速度快
Ⅲ回收频率 :因为很少对象会死掉,所以执行频率不高,而且需要较长时间来完成。
Ⅰ用 途 :用来装载Class,方法等信息,默认为64M,不会被回收
1)串行回收器(只使用一个CPU):Young代采用串行复制算法;Old代使用串行标记压缩算法(三个阶段:标记mark—清除sweep—压缩compact),回收期间程序会产生暂停,
2)并行回收器:对Young代采用的算法和串行回收器一样,只是增加了多CPU并行处理; 对Old代的处理和串行回收器完全一样,依旧是单线程。
3)并行压缩回收器:对Young代处理采用与并行回收器完全一样的算法;只是对Old代采用了不同的算法,其实就是划分不同的区域,然后进行标记压缩算法:
③ summary阶段(串行执行),从最左边开始检验知道找到某个达到数值(可达对象密度小)的区域时,此区域及其右边区域进行压缩回收,其左端为密集区域
④ compact阶段(多线程并行),识别出需要装填的区域,多线程并行的把数据复制到这些区域中。经此过程后,Old代一端密集存在大量活动对象,另一端则存在大块空间。
4)并发标识—清理回收(CMS):对Young代处理采用与并行回收器完全一样的算法;只是对Old代采用了不同的算法,但归根待地还是标记清理算法:
① 初始标识(程序暂停):标记被直接引用的对象(一级对象);
③ 再标记(程序暂停):多线程并行的重新标记之前可能因为并发而漏掉的对象(简单的说就是防遗漏)
1)尽量使用直接量,eg:String javaStr = "小学徒的成长历程";
2)使用StringBuilder和StringBuffer进行字符串连接等操作;
5)缓存常用的对象:可以使用开源的开源缓存实现,eg:OSCache,Ehcache;
7)在必要的时候可以考虑使用软引用SoftReference。
Java jvm 内存回收机制相关推荐
- JAVA的内存回收机制(快速入门版)
java内存回收机制 内存回收,是JVM中垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制 引用 : java中什么是引用? Person xiaoi =new ...
- Java的内存回收机制
在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方面工作都是由JVM自动完成的,降低了Java程序员的学习难度,避免了像C/C++直接操作内存的危险.但是,也正 ...
- JVM内存回收机制及回收器-一目了然
一.概述 内存回收,分析出所以然,为什么如此设计,内存回收,如整理屋子.用户就是系统,其实和普通的系统没有大区别. 需求: 正确 高效(不能对用户线程有较大的影响) 二.设计 我来设计的话,一些基本的 ...
- Java技术专题之JVM逻辑内存回收机制研究图解版
一.引言 JVM虚拟机内存回收机曾迷惑了不少人,文本从JVM实现机制的角度揭示JVM内存回收的原理和机制. 一.Java平台逻辑架构 二.JVM物理结构 通过从JVM物理结构图我们可以看到: 1.JV ...
- Java进阶3. 内存回收机制
Java进阶3. 内存回收机制 20131029 前言: 学过C++的都知道,C++中内存需要程序员自己维护.说道这里,很多开发的同学就感觉很痛苦,当他转向Java的时候,就会说你看Java多好啊,程 ...
- JVM内存区域(Java内存区域)、JVM垃圾回收机制(GC)初探
一.JVM内存区域(Java内存区域) 首先区分一下JVM内存区域(Java内存区域)和Java内存模型(JMM)的概念.Java线程之间的通信采用的是共享内存模型,这里提到的共享内存模型指的就是Ja ...
- JVM内存管理机制和垃圾回收机制
JVM内存管理机制和垃圾回收机制 JVM结构 图片描述: java源码编译成class文件 class文件通过类加载器加载到内存 其中方法区存放的是运行时的常量.静态变量.类信息等,被所有线程共享 堆 ...
- jvm gc垃圾回收机制和参数说明amp;amp;Java JVM 垃圾回收(GC 在什么时候,对什么东西,做了什么事情)
jvm gc(垃圾回收机制) Java JVM 垃圾回收(GC 在什么时候,对什么东西,做了什么事情) 前言:(先大概了解一下整个过程) 作者:知乎用户 链接:https://www.zhihu.c ...
- 2.Java内存回收机制
一.Java对象在内存引用状态 内存泄露:程序运行过程中,会不断分配内存空间,那些不再使用的内存空间应该即时回收它们,从而保证系统可以再次使用这些内存,如果存在无用的内存没有被回收回来,这就是内存泄漏 ...
最新文章
- WINCE开机显示logo之前先显示白屏的问题
- 区别聚焦索引和非聚集索引
- 通过相似性或相异指数的数值分布比较群落Beta多样性高低
- android 如何终止线程
- css3 仿aero,让Qt支持Win7的Aero和毛玻璃效果
- python基础(正则表达式)
- SharePoint Server 2016 PWA(Project web app) 被变为只读模式
- 20145209 2016-2017-2 《Java程序设计》第9周学习总结
- RocketMQ源码学习
- asp.net 获取计算机配置_智能制造中的计算机视觉应用瓶颈问题
- java 多列 统计_java – 如何计算多列(colspan)HTML表的宽度?
- 数据库实体表的关系学习
- JAVA对字符串进行32位MD5加密
- 二元一次方程有唯一解的条件_一个二元一次方程的一个解是
- 如何在ps软件中查看图片的透明度
- springMVC3.0后台验证信息不显示的原因初探
- java将英文字符(无论大小写)转化为小写
- 【淘宝API开发系列】获取商品详情,商品评论、卖家订单接口
- 中国的漫威,还很遥远么
- 【kindle】使用Typora+Calibre自制电子书
热门文章
- Axure 9 实战案例,母版的应用 1,使用母版绘制APP导航菜单
- abaqus形状记忆聚合物结构的热-力学有限元
- linux下安装云锁
- Apollo 应用与源码分析:Monitor监控-软件监控-进程存活监控-process_monitor
- python_网络和网络通信
- matlab基于遗传算法的多目标优化算法(附代码获取方法)
- BigTable读后感
- 数据存储之——Android文件存储系统及文件系统(Android Q)
- php用户第三方登录失败,php 实现网站端qq第三方登录接口及一些注意事项【原创】...
- Robotframework+Ride环境搭建