发现网上有两个版本的JVM内存划分,一个是按照《深入理解JVM虚拟机》上的版本,包含程序计数器等,按照是否线程共享划分。

另一个我觉得更好记一些,也更适合我自己,在这里记录一下。

首先上思维导图:

一个个来说道吧。

堆内存 heap

堆内存主要被划分为新生代和老年代(叫法不一,差不多的意思)。JVM默认Yong和Old分配比例为1:2,即新生代的内存大小为堆内存的1/3。

(调整参数:–XX:NewRatio)

基本上所有对象实例都在堆中创建,因此堆内存经常发生GC回收操作。新的对象首先分配在Eden区,两个Surviior区仅作为Eden区的缓冲使用。每次GC回收一次,对象的age值就+1,当Survivor区对象age值大于15时,就被转移到老年代。

(age值调整参数:-XX:MaxTenuringThreshold)

新生代下又划分为三个区,即Eden Space,To Survivor ,From Survivor。新生代占用堆内存的1/3,而三个区的内存占用情况如下图:

新生代中,Eden、from、to的默认比例为8:1:1,一般来说,当Eden区内存将要被占满时,才会进入其中一个Survivor区。JVM每次只会使用一块Survivor区来为对象服务。所以,不论何时,都存在一个空闲的Survivor区域

(调整参数:–XX:SurvivorRatio )

老年代存放JVM认为生命周期较长的对象,内存大小也比较大,GC回收相对来说不太频繁,所以分配给老年区的内存大小为堆内存的2/3

堆内存回收规则:

当一个对象小于Eden区内存时,直接放入Eden区,若大于Eden并小于老年代,则直接放入老年代。若大于老年代,则直接内存溢出

如此分区的目的:

新生代由于对象产生的比较多并且大都是朝生夕灭的,所以直接采用标记-清理算法。而老年代生命力强,采用复制算法,针对不同情况使用不同算法

非堆区

转载于:https://www.cnblogs.com/yuan-zhou/p/11311210.html

JVM内存区域划分总结相关推荐

  1. mfc强制局部区域刷新_简述JVM内存区域划分

    我们在Java编程时少不了程序优化,而程序优化的前提是知道JVM的内存是如何划分的,那么我们今天来大体了解下. 在看JVM内存区域划分之前,先来看一下Java程序具体执行的过程: 如上图所示,首先Ja ...

  2. 3、JVM内存区域划分

    内存区域划分图: 方法区: 存储类信息.常量.静态变量.JIT即时编译器编译后的代码.所有线程共享. 当JVM中的类加载器将一个类的.class文件加载到JVM内存时,是把这个.class信息加载到了 ...

  3. JVM内存区域划分及其管理机制

    java 虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,如图.各个区域有各自的用途,以及创建时间和销毁时间,有的区域随着虚拟机进程启动而存在,有些区域则依赖用户线程的启 ...

  4. 3.JVM内存区域划分

    前言 上一节我们详细学习了类加载器,我们接着思考下一个问题: 类加载器将class文件加载到JVM内存的什么位置? JVM内部内存是怎样划分的? 通过本节我们将寻找到答案,并将掌握以下知识: 1. J ...

  5. JVM内存区域划分 EDEN SPACE、SURVIVOR SPACE、TENURED GEN

    JVM区域总体分两类,heap区和非heap区.heap区又分:Eden Space(伊甸园).Survivor Space(幸存者区).Tenured Gen(老年代-养老区). 非heap区又分: ...

  6. JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释

    jvm区域总体分两类,heap区和非heap区.heap区又分:Eden Space(伊甸园).Survivor Space(幸存者区).Tenured Gen(老年代-养老区). 非heap区又分: ...

  7. 2022-04-07 西安 javaSE(04) 方法可变参数、重载、递归,数组、冒泡排序、二分查找、动态操作,二维数组、jvm内存区域划分

    方法 1.方法传递参数 形参是基本类型: 1.参数传递的内容是该基本类型的数据值.   2.对形式参数的改变不会影响实际参数的数据值 形参是引用类型:     1.参数传递的是地址值     2.对形 ...

  8. JVM内存区域划分Eden Space\Survivor Space\Tenured Gen\Perm Gen

    JVM区域分heap区和非heap区. 1)heap区:Eden Space(伊甸园),Survivor Space(幸存者区),Tenured Gen(老年代-养老区). 2)非heap区:Code ...

  9. JVM的内存区域划分(转)

    原文链接:JVM的内存区域划分 JVM的内存区域划分 学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆.栈以及静态数据区.那么在Java语言当中,内 ...

最新文章

  1. java输入字符串异常_设计一个 Java 程序,自定义异常类,从命令行(键盘)输入一个字符串,如果该字符串值为“XYZ”。。。...
  2. ViewPager相互嵌套,导致子ViewPager无法滑动,且子ViewPager中的view无法被点击
  3. 自学架构设计的一个好方法
  4. 天翼云从业认证(1.6)虚拟化技术基础、服务器虚拟化、存储虚拟化和网络虚拟化技术;
  5. 【论文学习】ICLR2021,鲁棒早期学习法:抑制记忆噪声标签ROBUST EARLY-LEARNING: HINDERING THE MEMORIZATION OF NOISY LABELS
  6. 【CV实战】Ubuntu18.04源码编译安装opencv-3.4.X+测试demo
  7. GitBook是一个命令行工具(Node.js库),我们可以借用该工具使用Github/Git和Markdown来制作精美的图书,但它并不是一本关于Git的教程哟。...
  8. python计算密集型提速_揭秘Numpy“高效使用哲学”,数值计算再提速10倍!
  9. 数据福利|各种分辨率DEM数据下载
  10. 基于图像的三维模型重建 ——双视角SFM
  11. 小孔子内容管理系统V2.0正式开源发布
  12. ios java模拟器 2017_Visual Studio 2017(Xamarin)未显示iPhone模拟器列表
  13. 蓝叠手机模拟器使用技巧
  14. 杭电计算机学院和其他学院,浙江最好的5所大学,浙江大学一家独大,其余4所争议很大...
  15. macbook+外接,导致很卡
  16. 实验二——————路由器口令配置
  17. wpf TextBox日志文本框
  18. 关于证书,这里有你想知道的一切
  19. 青岛新媒体运营教程:短视频没脚本怎么行,镜头脚本模板直接套用
  20. 计算图像的熵、编码效率、冗余度

热门文章

  1. Android Studio快捷键——编辑篇
  2. CSS3 background-image背景图片相关介绍
  3. activeMQ 安装于使用
  4. 欠债2亿,清华辍学少女用13年时间把自己修成了“锦鲤女王”!
  5. ubuntu lamp配置多域名服务器
  6. iOS开发——高级技术地图功能的实现
  7. 深入Atlas系列:客户端网络访问基础结构示例(1) - 编写并使用自定义的WebRequestExecutor...
  8. 手机能上网,电脑联不上网
  9. 第二阶段第七次站立会议
  10. 【leetcode 简单】 第七十三题 丑数