JVM复习--新生代GC
在复习Java内存机制的过程中有一些新问题,自问自答,做个记录。
新生代是java堆内存的一部分。堆内存分新生代和老生代两大块,也有把堆内存分为新生代老生代永久代(持久代)三块的说法。(不过这种说法应该逐渐被淘汰,因为从java7开始永久代就已经被移除了。)
新生代继续细分,可以划分出Eden,SurvivorFrom,SurvivorTo三块,Eden区和Survivor的两个区大小的比例默认为8:1:1,新创建的对象如果不是特别大都分配在Eden区和SurvivorFrom,在新生代GC后,这两块内存中仍然存活的对象会被复制到SurvivorTo中或复制到老年代。
1、什么时候触发新生代GC?
在Eden区空间不足时会触发新生代的GC。
2、为什么Survivor区要空出一块?
典型的空间换时间,用10%的新生代内存的浪费,换取新生代GC时更高的效率。由于新生代的对象大多存活时间短,因此时间上更高效的复制算法是更合适的选择,空出一块用于复制存活对象也就是自然而然的选择。
3、新生代的GC用什么回收算法?
上文提到,复制算法。复制算法将还存活的对象直接复制到另一块内存上,再将被复制的内存清空。优点是不会产生内存碎片,实现简单高效,缺点也显而易见,总是会有一部分的内存处于空闲状态。
4、GC的过程的怎样的?
GC触发时,Eden区中存活的对象会被直接复制到SurvivorTo区,SurvivorFrom区中年龄超过配置的对象会复制到老年代,年龄没有达到配置值的对象也被复制到SurvivorTo中。
5、GC时SurvivorTo内存不够怎么处理?
研究表明98%情况下对象都是很快消亡,Survivor区分为两块,而不是三块四块也是为了避免Survivor区过于碎片化的权衡结果,因此在大多数情况下不会出现复制时Survivor区大小不足的情况。如果真的频繁出现,可能需要更改配置,增大Survivor区的内存占比。
6、GC之前如何判断对象是否存活?
主流的实现都是使用可达性分析算法来判断。可达性分析算法是指,以一系列被定义为GC Roots的对象为起点,开始向下搜索引用链,可以到达的对象判断为存活,不可到达的标记为可回收。GC Roots对象包括本地变量表中引用的对象,类静态属性引用的对象(例如一些public static的String对象),方法区中常量引用的对象等。可达性分析算法相比于引用计数算法最大的优势是很好的解决了循环引用的两个对象不能被回收的问题。
JVM复习--新生代GC的更多相关文章
- JVM内存管理------GC算法精解(五分钟教你终极算法---分代搜集算法)
引言 何为终极算法? 其实就是现在的JVM采用的算法,并非真正的终极.说不定若干年以后,还会有新的终极算法,而且几乎是一定会有,因为LZ相信高人们的能力. 那么分代搜集算法是怎么处理GC的呢? 对象分 ...
- 浅析JVM中的GC日志
目录 一.GC日志的格式分析 二.运行时开启GC日志 一.GC日志的格式分析 在讲述GC日志之前,我们先来运行下面这段代码 package com.example; public class Test ...
- 【转】JVM 分代GC策略分析
我们以Sun HotSpot VM来进行分析,首先应该知道,如果我们没有指定任何GC策略的时候,JVM默认使用的GC策略.Java虚拟机是按照分代的方式来回收垃圾空间,我们应该知道,垃圾回收主要是针对 ...
- JVM学习之GC常用算法
出处:博客园左潇龙的技术博客--http://www.cnblogs.com/zuoxiaolong,多谢分享 GC策略解决了哪些问题? 既然是要进行自动GC,那必然会有相应的策略,而这些策略解决了哪 ...
- jvm系列:Java GC 分析
Java GC就是JVM记录仪,书画了JVM各个分区的表演. 什么是 Java GC Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之 ...
- JVM基础系列第14讲:JVM参数之GC日志配置
说到 Java 虚拟机,不得不提的就是 Java 虚拟机的 GC(Garbage Collection)日志.而对于 GC 日志,我们不仅要学会看懂,而且要学会如何设置对应的 GC 日志参数.今天就让 ...
- jvm参数与GC
一.JVM的新生代.老年代.与永久代 JVM中的堆,一般分为三大部分:新生代.老年代.永久代: 1.新生代:主要是用来存放新生的对象,一般占据堆的1/3空间.由于频繁创建对象,所以新生代会频繁触发Mi ...
- 什么是新生代 GC 和老年代 GC
GC 经常发生的区域是堆区,堆区还可以细分为新生代.老年代 jvm堆示意图 新生代 一个 Eden 区 两个 Survivor 区 老年代 默认 新生代(Young)与老年代(Old)的比例的值为 1 ...
- 触发JVM进行Full GC的情况及应对策略
堆内存划分为 Eden.Survivor 和 Tenured/Old 空间,如下图所示: 从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC,对老年代GC称为M ...
随机推荐
- BZOJ 3940--[Usaco2015 Feb]Censoring(AC自动机)
3940: [Usaco2015 Feb]Censoring Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 723 Solved: 360[Subm ...
- Python 生成器的使用(yield)
一. 生成器就是一个特殊的迭代器, 使用关键字yield就可以生成一个生成器 def func(): for i in range(10): yield i item = func() yield i ...
- 前端基础-html 介绍和head标签 ( 1 )
主要内容 web标准 浏览器介绍 开发工具介绍 HTML介绍 HTML颜色介绍 HTML规范 HTML结构详解 写在前面: 前端 后端 C(client) S ...
- underscore.js源码研究(8)
概述 很早就想研究underscore源码了,虽然underscore.js这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以 ...
- 在MySQL Workbench查看表,表结构,索引,函数,存储过程,触发器,重连
表 表结构 索引 触发器 存储过程 函数 重新连接 出现Error Code: 2006 MySQL server has gone away时
- web 基础
web服务器和应用服务器以及web应用框架: web服务器:负责处理http请求,响应静态文件,常见的有Apache,Nginx以及微软的IIS. 应用服务器:负责处理逻辑的服务器.比如php.pyt ...
- FireFox浏览器-xpath快速定位插件:Xpath Checker
FireFox浏览器-xpath快速定位插件:Xpath Checker 插件截图:
- idea自己用得到的命令
1.注释 Ctrl + / 单行注释 . 取消注释 Ctrl + Shift + / 多行注释 .取消注释 2.查找 Ctrl + N 通过输入类名打开类(标准说法是查找类文件) Ctrl + Shi ...
- 计划任务crond服务
什么是计划任务:后台运行,到了预定的时间就会自动执行的任务,前提是:事先手动将计划任务设定好.这就用到了crond服务 crond服务相关的软件包[root@MiWiFi-R3-srv ~]# rpm ...
- sparkshell运行sql报错: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
下载msyql的连接driver https://download.csdn.net/download/xz360717118/10662304 把其中一个: mysql-connector-java ...