JVM虚拟机 - 内存
在JVM虚拟机中,内存部分大致可以分为以下几类:
- Heap:堆
- NonHeap:非堆
- CodeCache:缓存编辑后的机器码的内存区域
- CompressedClassSpace:类压缩空间
- MetaSpace:元空间(其实就是永久代,1.7之前叫永久代,1.8之后叫元空间)
- HeapedEnSpace:Eden区
- HeapOldGen:老年代
- HeapSurvivorSpace:S0和S1区
- Direct:直接内存
贴上示意图:

这张图其实画的有些不对,在Heap区,Old和Young的比例应该是2:1,然后Eden和S0、S1的比例应该是8:1:1。
接下来主要来讨论下新生代,老年代和元空间(永久代)。
1. 新生代
新生代有Eden、From、To区域(From、To即S0、S1区域)。
Eden主要用于存放新创建的对象,它会在第一次GC发生时,将对其内部的存活的对象放入到From或者To区域。
From和To区域都是Survivor区域,主要用于GC时,在对象复制时提供作用(复制算法),以及承担新生代和老年代之间的缓冲作用。
也就是说,对于整个新生代而言,会发生频繁的GC操作(Young GC)。
2. 老年代
有以下几种情况,可以使对象进入到老年代中:
大对象:指一个占用大量连续存储空间的对象
生命周期较长的对象
新生代中的每个对象都有一个年龄计数器,当新生代发生一次MinorGC后,存活下来的对象的年龄就加一,当年龄超过一定值时,就将超过该值的所有对象转移到老年代中去。
相同年龄的对象内存超过Survior内存一半的对象
如果当前新生代的Survior中,年龄相同的对象的内存空间总和超过了Survior内存空间的一半,那么所有年龄相同的对象和超过该年龄的对象都被转移到老年代中去。无需等到对象的年龄超过MaxTenuringThreshold才被转移到老年代中去。
Full GC 是发生在老年代的垃圾收集动作,所采用的是标记-清除算法。老年代如果频繁GC,那肯定是存在问题,需要去排查。
3. 元空间
JDK1.8和1.7最大的区别就是:元空间取代了永久代(在1.7的时候,常量池从永久代移至了堆空间中)。
元空间本质和永久代类似,都是对方法区的实现,两者的区别在于:元空间并不在虚拟机中,而是使用本地内存。所以此时的JVM运行时内存区域应该是这样的(摘自别人的图):

JVM虚拟机 - 内存的更多相关文章
- 设置TOMCAT的JVM虚拟机内存大小
你知道如何设置TOMCAT的JVM虚拟机内存大小吗,这里和大家分享一下,JAVA程序启动时JVM都会分配一个初始内存和最大内存给这个应用程序.这个初始内存和最大内存在一定程度都会影响程序的性能. 设置 ...
- JVM 虚拟机内存深入探究
[<深入理解java虚拟机>-整理笔记] by lijun JVM虚拟机内存逻辑模型: 方法区(全局变量 静态数据 常量等) 线程共享 堆栈区(对象实例 数组数据 new generat ...
- java中JVM虚拟机内存模型详细说明
java中JVM虚拟机内存模型详细说明 2012-12-12 18:36:03| 分类: JAVA | 标签:java jvm 堆内存 虚拟机 |举报|字号 订阅 JVM的内部结构 ...
- jvm 虚拟机内存模型
来源:https://blog.csdn.net/A_zhenzhen/article/details/77917991?locationNum=8&fps=1 https://blog ...
- 面试官:别的我不管,这个JVM虚拟机内存模型你必须知道
前言 说jvm的内存模型前先了解一下物理计算机的内存处理. 物理计算器上用户磁盘和cpu的交互,由于cpu读写速度速度远远大于磁盘的读写速度速度,所以有了内存(高速缓存区).但是随着cpu的发展,内存 ...
- JVM 虚拟机 内存说明
Java虚拟机所管理的内存图: 1程序计数器: 该模块作用是记录线程执行字节码的位置,记录程序执行状态,以便该线程下次获得CPU时继续执行.程序里的每个线程程序计数器相互独立,互不影响,该内存区也称“ ...
- JVM虚拟机内存模型以及GC机制
JAVA堆的描述如下: 内存由 Perm 和 Heap 组成. 其中 Heap = {Old + NEW = { Eden , from, to } } JVM内存模型中分两大块,一块是 NEW Ge ...
- JVM虚拟机内存溢出垃圾收集及类加载机制总结
1.Java内存区域与内存溢出异常 虚拟机栈:为虚拟机执行Java方法服务 本地方法栈:为虚拟机使用到的native方法服务. Java堆:是Java虚拟机所管理的内存中最大的一块,被所有线程共享的一 ...
- 对jvm虚拟机 内存溢出的思考
java内存溢出:当新产生对象时,新生代空间不够,导致无法申请到足够的空间,报内存溢出 内存泄漏:一些静态集合,静态常量没有被gc清理,越来越多,占用内存,最后导致无法申请到新的空间
随机推荐
- 洛谷-铺地毯-NOIP2011提高组复赛
题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...
- zookeeper相关知识的总结:
一.分布式协调技术 在给大家介绍ZooKeeper之前先来给大家介绍一种技术——分布式协调技术.那么什么是分布式协调技术?那么我来告诉大家,其实分布式协调技术 主要用来解决分布式环境当中多个进程之间的 ...
- mongodb 修改操作
$addToSet与$each结合完成批量数组更新 db.text.update({_id:1000},{$addToSet:{books:{$each:["js","d ...
- Pig Flatten 解包操作,解元组
Flatten Operator The FLATTEN operator looks like a UDF syntactically, but it is actually an operator ...
- 【vue2.X+iview2.x】iView在非 template/render 模式下标签的转化
iView在非 template/render 模式下标签的转化. 以下组件,在非 template/render 模式下组件名要分隔: DatePicker:date-picker FormItem ...
- Linux包管理
1.yum(Yellow dog Updater, Modified) yum是一个在Fedora(基于Linux的操作系统)和RedHat(基于Linux的操作系统)以及SUSE(基于Linux的操 ...
- NPM run start使用本地的http-server
在项目开发过程中,Visual Studio 2015 一个Solution中有一个前端项目 Myproject.FrontEnd,我们使用node.js, npm来进行管理 在这个项目中,有一个pa ...
- invalid loc header的解决办法
eclipse 运行程序,报invalid loc header,网上一查,删除maven仓库(默认位于%USERPROFILE%\.m2\repository\org)中的下载包,然后重新下载.
- 如何修改html中列表项li所显示的圆点的颜色?,以及相关样式的设定
这是li标签自带的圆点的颜色改变,代码如下: .centerbt li{ content:"."; color:gray; } 在标签li后面加入“@”符号,这里都会使用posit ...
- HTTP协议格式及基础
HTTP请求数据: HTTP请求信息由3部分组成: ① 请求方法 URI 协议/版本 ② 请求头(Request Header) ③ 请求正文 HTTP 请求 数据 例子举例: GET/sam ...