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清理,越来越多,占用内存,最后导致无法申请到新的空间
随机推荐
- C++之queue模板类
1.queue常用成员函数 ①size() 返回队列中元素的个数 ②empty() 如果队列空则返回真 ③back() 返回最后一个元素引用即队尾. ④front() 返回第一个元素引用即队首. ⑤ ...
- CSS多列布局Multi-column、伸缩布局Flexbox、网格布局Grid详解
新css属性为我们提供了更加便捷的网页布局方式.来自微软的thomas lewis将带你认识去Grid Alignment,Flexibox Box以及Multi-column Layout这三大领域 ...
- typeof用法
typeof的运算数未定义,返回的就是 "undefined". 运算数为数字 typeof(x) = "number" 字符串 typeof(x) = &qu ...
- 23.通过MS17_010来学习msf对渗透的利用
Metersploit 集成了渗透阶段的全部利用,从漏洞探测,到漏洞利用,最后到后渗透阶段.本次博客主要抛砖引玉,通过对MS17_010漏洞的复现,来学习Metasploit. 漏洞环境: 靶机:wi ...
- UVaLive 11525 Permutation (线段树)
题意:有一个由1到k组成的序列,最小是1 2 … k,最大是 k k-1 … 1,给出n的计算方式,n = s0 * (k - 1)! + s1 * (k - 2)! +… + sk-1 * 0!, ...
- Android常见内存泄露,学会这六招优化APP性能
很多开发者都知道,在面试的时候会经常被问到内存泄露和内存溢出的问题. 1.内存溢出(Out Of Memory,简称 OOM),通俗理解就是内存不够,即内存占用超出内存的空间大小. 2.内存泄漏(Me ...
- jquery对css操作
1.css取得p的颜色:$(document).ready(function(){ var p= $("p").css("color"); alert(p);} ...
- neutron负载均衡高可用测试
对工作中,实验环境的一个小总结 1.创建高可用负载均衡器------创建高可用的时候,添加上ha-mode参数即可 neutron lb-pool-create --lb-method ROUND_R ...
- 796D(bfs)
题目链接: http://codeforces.com/problemset/problem/796/D 题意: 给出一颗 n 个节点树, 树枝连接的两个定点距离为 1, 树中有 k 个特殊点, 问最 ...
- 洛谷P1378 油滴扩展
P1378 油滴扩展 题目描述 在一个长方形框子里,最多有N(0≤N≤6)个相异的点,在其中任何一个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界.必须等一个油滴扩展完 ...