一、在垃圾收集器对堆进行回收前,首先需要判断对象是否“存活”,对已经“死去”的对象进行回收
判断对象是否存活:引用计数法和可达性分析法
引用计数法:给对象添加一个引用计数器,每当有地方引用它时,计数器加1;当引用失效时减1,任何时候计数器为0则表示没有引用。
可达性分析法:通过称为“GC Roots”的对象作为起始点,从这些节点往下搜索,当一个对象无法连接到“GC Roots”说明此对象是可回收的。
二、垃圾收集算法:
1标记清除算法【不足:标记和清除的效率都不高;标记清除后会产生大量不连续的内存碎片】
2复制算法【为了解决效率问题。将内存分为大小相等的两块,每次使用其中一块,满了,把第一块中存活的对象复制到另一块上,然后把使用过的内存一次清理掉。不足:内存缩小为原来的一半】ps:现在的商业虚拟机都采用这种算法回收新生代,只是未按1:1来分割,熟悉的Eden和survivor就是这种算法。
3.标记整理算法【复制算法在对象存活率较高的时候就会进行更多的复制操作效率会变低所以不适用于老年代,标记整理是指把存活的对象向一端移动,然后直接清除端边界以外的内存】
4.分代收集算法【本质是标记清除算法、复制算法、标记整理算法的联合,把内存分为新生代和老年代,然后在新生代用复制算法,在老年代用标记清除或标记整理】
三、内存分配与回收策略
1对象优先分配在eden区
2大对象直接进入老年代
3长期存活的对象将进入老年代【虚拟机给每个对象定义了一个年龄计数器,每经历过一次minor GC年龄就增加1岁,超过一定程度移动到老年代】
4.动态对象年龄判定【虚拟机并不是永远要求对象的年龄必须达到一定的程度才能晋升老年代,如果survivor空间中相同年龄的所有对象大小之和大于survivor空间的一半,则把大于等于该年龄的对象移动到老年代】
5.空间分配担保【在发生minor GC之前,虚拟机会检查老年代最大可用的连续空间是否大于新生代所有对象总空间,如果大于那么可以确保minor GC是安全的;如果不大于,则判断是否允许担保失败,如果允许,检查老年代最大可用连续空间是否大于历次晋升到老年代对象的平均大小,如果大于则进行minor GC,如果小于或者不允许担保失败,则进行一次Full GC】
java 垃圾回收及内存分配策略的更多相关文章
-
【java虚拟机序列】java中的垃圾回收与内存分配策略
在[java虚拟机系列]java虚拟机系列之JVM总述中我们已经详细讲解过java中的内存模型,了解了关于JVM中内存管理的基本知识,接下来本博客将带领大家了解java中的垃圾回收与内存分配策略. 垃 ...
-
Java的垃圾回收和内存分配策略
本文是<深入理解Java虚拟机 JVM高级特性与最佳实践>的读书笔记 在介绍Java的垃圾回收方法之前,我们先来了解一下Java虚拟机在执行Java程序的过程中把它管理的内存划分为若干个不 ...
-
[jvm]垃圾回收与内存分配策略
一.垃圾回收算法 概述 JVM中,当创建的对象不再被使用的时候,此时我们认为他是无用的“垃圾”:在现代主流的商用jvm中,都是通过可达性分析来判断对象是否存活的.这个算法的基本思想是通过一系列“GCR ...
-
Java垃圾回收以及内存分配
http://www.cnblogs.com/ggjucheng/p/3977384.html http://www.blogjava.net/qcyycom/archive/2012/04/14/3 ...
-
Java垃圾回收机制(GC策略)
Java垃圾回收机制(GC策略) 核心:1,哪些是垃圾?[怎么确定这个是垃圾]:2,如何回收垃圾?[怎么更好收垃圾]. Java语言相对于C++等语言有一个自动垃圾回收机制,只用管使用[实例化对象], ...
-
JVM学习02:GC垃圾回收和内存分配
JVM学习02:GC垃圾回收和内存分配 写在前面:本系列分享主要参考资料是 周志明老师的<深入理解Java虚拟机>第二版. GC垃圾回收和内存分配知识要点Xmind梳理 案例分析1-(G ...
-
NET的堆和栈04,对托管和非托管资源的垃圾回收以及内存分配
在" .NET的堆和栈01,基本概念.值类型内存分配"中,了解了"堆"和"栈"的基本概念,以及值类型的内存分配.我们知道:当执行一个方法的时 ...
-
Java自动内存管理机制学习(二):垃圾回收器与内存分配策略
备注:本文引自<深入理解Java虚拟机第二版>仅供参考 图片来自:http://csdn.net/WSYW126 垃圾收集器与内存分配策略 概述 GC要完成3件事: 哪些内存需要回收? 什 ...
-
Java GC 垃圾回收算法 内存分配
垃圾回收(Garbage Collection, GC)是Java不同于c与c++的重要特性之一. 他帮助Java自动清空堆中不再使用的对象. 由于不需要手动释放内存,程序员在编程中也可以减少犯错的机 ...
随机推荐
-
java内存泄漏的几种情况
转载于http://blog.csdn.net/wtt945482445/article/details/52483944 Java 内存分配策略 Java 程序运行时的内存分配策略有三种,分别是静态 ...
-
A. Writing Code 完全背包
http://codeforces.com/contest/543/problem/A 一开始这题用了多重背包做,结果有后效性. 就是如果6,这样拆分成 1 + 2 + 3的,那么能产生3的就有两种情 ...
-
checkbox的相关知识点
1.获取单个checkbox选中项(三种写法)$("input:checkbox:checked").val()或者$("input:[type='checkbox']: ...
-
Java Day 11
异常 Throwable 子类 Error.Exception Error - 不可以处理 Exception - 针对性处理 原理 自定义异常 异常类的抛出throws 先检查语法错误,后检查逻辑 ...
-
ArcMap自定义脚本工具制作
原文 ArcMap自定义脚本工具制作 在制图的前期,一般需要做一些数据的整理,如图层合并.裁剪等工作.虽然在ArcMap中也有提供对应的工具,但使用起来需要点技巧.如批量裁剪,虽然可以实现,但出来的结 ...
-
Yii2项目实现Markdown功能 在线Markdown编辑器
版权声明:本文为博主原创文章,欢迎扩散,扩散请务必注明出处. Yii中添加MarkDown编辑器 主要使用了两个网页Markdown编辑器,都带预览功能. 1,ijackua/yii2-lepture ...
-
阿里云CentOS搭建系统
1.在阿里云网站上购买申请服务器. 2.通过Xshell连接服务器,并用root账户登入. 3.配置java开发环境:(也可以使用阿里云一键部署,自动配置并部署服务器) 一.安装jdk 1.查看Lin ...
-
java实现http的post和get
前话说一句:conn.setDefaultRequestProperty(key, value);这个函数是设置属性的,其实可以没有! 自己写了一个简单的get,容易控制 public stati ...
-
ESXI的安装和部署
1. 实验拓扑图: 2. 实验要求 (1) 新建一台exsi主机,安装exsi5.5系统. 步骤: 1)新建虚拟机,导入光盘. 2)安装esxi系统 (2)在exsi主机中,配置IP地址为1 ...
-
Postgre Sql获取最近一周、一月、一年日期函数
使用Postgre Sql获取近一周.一年.一月等系统函数调用如下,使用方面相对于Ms Sql server 容易了许多. --当前时间 select now(); --current_timesta ...