Java虚拟机内存分配和回收策略
1 对象优先分配在Eden区
对象优先在Eden进行分配,大多数情况下,对象在新生代Eden区进行分配。当Eden区没有足够的空间进行分配时,虚拟机会发起一次Minor GC。
新生代GC(Ninor GC)指发生在新生代的垃圾收集动作,因为Java对象大多都具备朝生夕死的特征,因此Minor GC非常频繁,一般回收速度也比较快
老年代GC(Major GC / Full GC)指发生在老年代的GC,出现在Major GC,经常会伴随至少一次的Minor GC。Major GC的速度一般会比Minor GC慢至少十倍。
2 大对象直接进入老年代
所谓大对象是指需要大量连续内存的Java对象,最典型的大对象就是那种很长的字符串以及数组,因为出现大对象对于内存来说是一个很坏的消息,因此一般需要放到老年代中进行维护。
3 长期存活的对象将进入老年代
既然虚拟机采用了分代收集的思想来管理内存,那么内存必须能够分辨出那些对象应该放在新生代,哪个放在老年代。因此,虚拟机提出了对象年龄计数器。若对象在 Eden诞生,熬过了一次Minor GC后被Survivor收容,则对象年龄设为1。然后在Survivor中熬过14次Minor GC后,则可以晋升到老年代。
4 动态对象年龄判定
进行年龄判定的时候,未必一定要熬到门限值再进行垃圾回收,如果Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代。
5 空间分配担保
在发生Minor GC之前,虚拟机会先检查老年代中最大可用的连续空间是否大于新生代所有对象总空间,若这个条件成立,那么Minor GC就可以确保是安全的。如果不成立,则查看handlePromotionFailure设置值是否允许担保失败,若允许,则继续检查老年代最大可用的连续空间是否大于历次晋升到老年代的对象的平均大小。若大于则尝试进行一次Minor GC;若小于或者不允许,则尝试进行一次Full GC。
Java虚拟机内存分配和回收策略的更多相关文章
- Java虚拟机内存分配与回收策略
内存分配与回收策略 Minor GC 和 Full GC Minor GC:发生在新生代上,因为新生代对象存活时间很短,因此 Minor GC 会频繁执行, 执行的速度一般也会比较快. Full GC ...
- 深入理解Java虚拟机-内存分配与回收策略
一.内存分配策略 新生代中98%的对象都是"朝生夕死"的,所以并不需要按照1:1的比例来划分内存空间,而是将内存(新生代内存)分为一块较大的Eden(伊甸园)空间和两块较小的Sur ...
- JAVA虚拟机内存分配与回收机制
Java虚拟机(Java Virtual Machine) 简称JVM Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现.Java虚拟机有自己想象中的硬件,如处理器.堆栈.寄存器等 ...
- java面试-内存分配与回收策略
1.对象优先在Eden分配 -Xms20M -Xmx20M java堆的大小20M -Xmn10M 新生代10M 老年代10M -XX:SurvivorRatio=8 新生代Eden与一个Surviv ...
- Java虚拟机垃圾回收:内存分配与回收策略 方法区垃圾回收 以及 JVM垃圾回收的调优方法
在<Java对象在Java虚拟机中的创建过程>了解到对象创建的内存分配,在<Java内存区域 JVM运行时数据区>中了解到各数据区有些什么特点.以及相关参数的调整,在<J ...
- Java 对象内存分配与回收
JVM内存区域模型: * 程序计数器,内存区域极小,是当前线程的字节码执行行号指示器: * 虚拟机栈.本地方法栈,即平时所说的“栈”,是虚拟机用来执行方法(包括Java.非Java方法)时,使用的临时 ...
- JVM垃圾回收器、内存分配与回收策略
新生代垃圾收集器 1. Serial收集器 serial收集器即串行收集器,是一个单线程收集器. 串行收集器在进行垃圾回收时只使用一个CPU或一条收集线程去完成垃圾回收工作,并且会暂停其他的工作线程( ...
- JVM学习十 -(复习)内存分配与回收策略
内存分配与回收策略 对象的内存分配,就是在堆上分配(也可能经过 JIT 编译后被拆散为标量类型并间接在栈上分配),对象主要分配在新生代的 Eden 区上,少数情况下可能直接分配在老年代,分配规则不固定 ...
- Java虚拟机内存分配详解
简介 了解Java虚拟机内存分布的好处 1.了解Java内存管理的细节,有助于程序员编写出性能更好的程序.比如,在新的线程创建时,JVM会为每个线程创建一个专属的栈 (stack),其栈是先进后出的数 ...
随机推荐
- linux正则表达式(一)
正则表达式是一种字符串模式匹配,使用灵活.功能强大,使用简单的方式对字符串进行控制. 1.使用grep进行字符串匹配 测试文本 1.txt helloworld haa !@#$%^&*( A ...
- python tornado对接权限中心的sdk封装
# -*- coding: utf-8 -*- import json import requests import logging as logger from python.akskapp.scr ...
- mac 安装 mysql 配置
前言:下面主要介绍2种安装方法以及后续的配置,希望对大家有帮助.(推荐通过安装包的形式安装) 1. 使用安装包安装 mysql 双击打开安装文件 双击pkg文件安装 一 ...
- eclipse块编辑
1. Windows > Preferences然后键入keys或浏览到General > Keys.根据该键输入filter text的block selection快速找到快捷方式上市 ...
- 配置wpa_supplicant调试wifi linux下命令行连接wifi
调试wpa_supplicant先读一下对应的README.txt文件.根据README.txt修改编译配置. wpa_supplicant需要打开以下开关进行编译CONFIG_DRIVER_NL80 ...
- Python基础-迭代器&生成器&装饰器
本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 我现在有个需求,看 ...
- 通过字典传递django orm的filter功能
class AppRightManageListView(ListView): template_name = 'rightmanage/list_apprightmanage.html' # mod ...
- linq连接sqlite数据库(linq to sqlite) .net3.5
http://www.cnblogs.com/xianyin05/archive/2012/12/23/2829905.html using Models; using System; using S ...
- Activator常用方法
1.获取图片 public static Image getImage(String key) { Image img = getDefault().getImageRegistry() ...
- 《JAVA与模式》之观察者模式(转载)
<JAVA与模式>之观察者模式(转载) 原文链接:http://www.cnblogs.com/java-my-life/archive/2012/05/16/2502279.html ...