JVM系列三:内存分配与回收策略
内存分配策略
1、对象优先分配在新生代Eden区
多数情况下,对象分配在新生代的Eden,若Eden区域内存不够,则引发一次Minor GC
2、大对象直接进入老年代
大对象直接分配在老年代,避免新生代里出现从Eden到Survivor频繁的内存复制
可用-XX:PretenureSizeThreshold设置,大于此值的对象直接分配在老年代
典型的大对象有长字符串或者数组等
3、长久存活的对象进入老年代
有的对象经过几次MinorGC都没有被回收,则可以被移入老年代
可用-XX:MaxTenuringThreshold 用来定义年龄的阈值
4、动态对象年龄判断
有时也不需要存活对象的年龄达到设置的年龄阀值,如果在 Survivor 中相同年龄所有对象大小的总和大于 Survivor 空间的一半,则年龄大于或等于该年龄的对象可以直接进入老年代
5、空间分配担保
在MinorGC之前,检查一下老年代连续可用内存空间是否大于新生代中所有对象大小和,若大于,则可以进行一次MinorGC
若小于,则检查HandlePromotionFailure,若允许担保,则查看老年代连续可用内存大小是否大于上一次MinorGC进入老年代的平均大小
如果大于,则尝试一次MinorGC,若小于或者系统不允许冒险,则进行一次FullGC
内存回收策略
Minor GC
1、回收范围与特点:回收新生代区域的对象,因为新生代对象存活时间短,所以MinorGC会频繁进行,花费的时间短
2、触发条件:当Eden区域内存满了的时候
Full GC
1、回收范围与特点:回收老年代和新生代两块区域,老年代对象存活时间长,所以FullGC进行的不频繁,但是执行速度比MinorGC慢很多
2、触发条件:
- System.gc()
- 只是建议虚拟机进行一次FullGC,并不能控制虚拟机一定执行,不建议这种方式,而是让虚拟机管理内存
- 老年代空间不够
- 空间分配担保失败
- jdk1.7及以前的永久代空间不够
- Concurent Mode Failure
JVM系列三:内存分配与回收策略的更多相关文章
- JVM探秘:内存分配与回收策略
本系列笔记主要基于<深入理解Java虚拟机:JVM高级特性与最佳实践 第2版>,是这本书的读书笔记. 内存分配一般关注的是对象在堆上分配的情况,对象主要分配在新生代的Eden区中,如果启用 ...
- Java虚拟机垃圾回收:内存分配与回收策略 方法区垃圾回收 以及 JVM垃圾回收的调优方法
在<Java对象在Java虚拟机中的创建过程>了解到对象创建的内存分配,在<Java内存区域 JVM运行时数据区>中了解到各数据区有些什么特点.以及相关参数的调整,在<J ...
- JVM垃圾回收器、内存分配与回收策略
新生代垃圾收集器 1. Serial收集器 serial收集器即串行收集器,是一个单线程收集器. 串行收集器在进行垃圾回收时只使用一个CPU或一条收集线程去完成垃圾回收工作,并且会暂停其他的工作线程( ...
- JVM学习十 -(复习)内存分配与回收策略
内存分配与回收策略 对象的内存分配,就是在堆上分配(也可能经过 JIT 编译后被拆散为标量类型并间接在栈上分配),对象主要分配在新生代的 Eden 区上,少数情况下可能直接分配在老年代,分配规则不固定 ...
- Java虚拟机内存分配与回收策略
内存分配与回收策略 Minor GC 和 Full GC Minor GC:发生在新生代上,因为新生代对象存活时间很短,因此 Minor GC 会频繁执行, 执行的速度一般也会比较快. Full GC ...
- jvm内存分配和回收策略
在上一篇中,已经介绍了内存结构是什么样的. 这篇来介绍一下 内存是怎么分配的,和怎么回收的.(基本取自<深入理解Java虚拟机>一书) java技术体系中所提倡的自动内存管理最终可以归结为 ...
- JVM:内存分配与回收策略
Java技术体系中所提倡的自动内存管理最终可以归结为自动化的解决了两个问题:给对象分配内存以及回收分配给对象的内存. 对象的内存分配,往大方向讲,就是在堆上分配(但也可能经过JIT编译后被拆散为标量类 ...
- JVM的内存分配和回收策略
对象的Class加载 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载.解析和初始化过.如果没有,那必须先执行相应 ...
- JVM 内存分配和回收策略
对象的内存分配,主要是在java堆上分配(有可能经过JIT编译后被拆为标量类型并间接地在栈上分配),如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配.少数情况下也是直接分配到老年代,分配规则不 ...
随机推荐
- java程序cpu问题排查
方法一: 转载:http://www.linuxhot.com/java-cpu-used-high.html 1.jps 获取Java进程的PID. 2.jstack pid >> ja ...
- 利用Nginx限制静态页面的访问权限(防盗链、禁止爬虫)
1.限制爬虫配置 if ($http_user_agent ~* "spider|crapy|Sogou web spider|Baiduspider|Googlebot|Bingbot|3 ...
- WXSS选择器
- Appium移动自动化测试-----(八)定位控件
appium 通过 uiautomatorviewer.bat 工具来查看控件的属性.该工具位于 Android SDK 的 /tools/bin/ 目录下. id 定位 通过uiautomatorv ...
- Java后台面试之java基础
经典类概念性问题 1.java支持的数据类型有哪些?什么是自动拆装箱? 12.Java有哪些特性,举个多态的例子. 14.请列举你所知道的Object类的方法. 15.重载和重写的区别?相同参数不同返 ...
- php实现映射
目录 映射 实现 链表实现: 二叉树实现 复杂度分析 映射 映射,或者射影,在数学及相关的领域经常等同于函数.基于此,部分映射就相当于部分函数,而完全映射相当于完全函数. 映射(Map)是用于存取键值 ...
- java通过jasper文件生成jpg图片
iReport资料紧俏,整理好就赶紧传上来: 工具类:JpgExport public class JpgExportUtil { public static String Export(Map< ...
- 通过tushare获取股票价格
# Author llll # coding=utf-8 # ---描述# 完成股票 价格查询和展示# 不直接根据网页进行爬虫获取股票价格,而是通过已有组件查询股票价格,并保存到csv文件或者exce ...
- Scratch编程:多彩的舞台(六)
“ 上节课的内容全部掌握了吗?反复练习了没有,编程最好的学习方法就是练习.练习.再练习.一定要记得多动手.多动脑筋哦~~” 01 — 游戏介绍 这是一款简单的小游戏,实现了一个小女孩在多彩的舞台上进行 ...
- Spring Boot集成Spring Data Jpa完整实例
步骤: 添加依赖: 配置文件: 出了数据库的配置,还要配置jpa相关的: 实体类: Dao接口: 定义一个查询的方法,如果是jpa默认就有也可以不写: 测试: 如果报下面的错误,说明jdk9中缺少相关 ...