博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JVM知识点——其他知识梳理
阅读量:6249 次
发布时间:2019-06-22

本文共 718 字,大约阅读时间需要 2 分钟。

其他知识梳理

详解分代回收

前面提到过,java的堆内存被分代管理,分代管理主要是为了方便垃圾回收,这样做基于2个事实,第一、大部分对象很快就不再使用,第二,还有一部分不会立即无用,但也不会持续很长时间。

虚拟机中划分为年轻代、老年代、和永久代。

1>年轻代:主要用来存放新创建的对象,年轻代分为eden区和两个Survivor区。大部分对象在Eden区中生成。当Eden区满时,还存活的对象会在两个Survivor区交替保存,达到一定次数的对象会晋升到老年代。

2>老年代:用来存放从年轻代晋升而来的,存活时间较长的对象。

3>永久代:主要保存类信息等内容,这里的永久代是指对象划分方式,不是专指1.7的permGen,或者1.8之后的metaspace。

根据年轻代与老年代的特点,jvm提供了不同的垃圾回收算法。垃圾回收算法按类型可以分为引用计数法、复制法和标记清除法。

其中引用计数法是通过对象被引用的次数来确定对象是否被使用,缺点是无法解决循环引用的问题。

复制算法需要from和to两块相同大小的内存空间,对象分配时只在from块中进行,回收时把存活对象复制到to块中,并清空from块,然后交换两块的分工,即把from块作为to块,把to块作为from块。缺点是内存使用率较低。

标记清除算法分为标记对象和清除不在使用的对象两个阶段,标记清除算法的缺点是会产生内存碎片。

jvm中提供的年轻代回收算法Serial、ParNew、Parallel Scavenge都是复制算法,而CMS、G1、zgc都属于标记清除算法。

转载于:https://juejin.im/post/5cf0ca2a51882507266417c1

你可能感兴趣的文章
linux内核中Kconfig和Makefile 详解
查看>>
ASP.NET 使用List<T>.Remove 不生效
查看>>
Nginx的第三方模块ngx-fancyindex安装
查看>>
TCP有限状态机
查看>>
XenServer常用Debug问题的命令介绍
查看>>
算法分析-快速排序QUICK-SORT
查看>>
Web服务基础六之编译安装配置RHEL+Apache+MySQL+PHP+ZendOptimize
查看>>
log4net 使用
查看>>
通过bat文件运行jar包程序
查看>>
关于hive RegexSerDe的源码分析
查看>>
V$INSTANCE视图
查看>>
OpenCart之侧边浮动联系我们表单(Side Contact Us Form)
查看>>
PureWhite OpenCart 商城自适应主题模板 ABC-0009
查看>>
docker整理文档
查看>>
zabbix安装配置
查看>>
Awk练习笔记
查看>>
RAID级别详解,如何在Linux下实现软RAID图文解析。
查看>>
CentOS 配置***客户端
查看>>
线上应用故障排查之二:高内存占用
查看>>
书写「简历」时,需要规避的错误
查看>>