当前三大JAVA虚拟机:

1. HotSpot(Sun/Oracle)

2.JRockit(Oracle)

3. J9(IBM,)

它们都有方法区,但只有HotSpot有永久代(老年代),且JDK1.8及之后改为元空间


五大内存区域:

1. 线程共有:堆,方法区

2. 栈,程序计数器,本地方法栈


一、堆

线程共享,在虚拟机启动时创建,主要用于存放对象和数组。分为新生代和老年代,比例为1:2。

新生代代可划分为Eden区、survivor1区、survivor2区,默认比例为8:1:1

-Xms:值,初始堆内存大小

-Xmx:值,最大堆内存大小

-Xmn:值,新生代内存大小

二、方法区

线程共享,在虚拟机启动时创建。JDK1.8之前是堆的一个逻辑分区,称之为“非堆”。主要存放类的元数据信息、运行时常量池、静态变量、即时编译器编译的代码缓存。

即时编译:是执行计算机代码的一种方法,在程序执行过程中的执行期而不是执行之前的编译器,通常包括源代码或字节码到机器码的转换

在不同的JDK版本中,方法区中存储的位置及实现是不一样的。

JDK1.8之前:方法区——>永久代

JDK1.8及之后:方法区——>元空间

永久代和方法区是HotSpot虚拟机对虚拟机规范中方法区的两种不同实现方法

区别:永久代是在虚拟机内存中,元空间是在本地内存(不受虚拟机内存大小限制)

为什么要用元空间代替永久代?

1. Oracle为了融合HotSpot JVM和JRockit JVM(新技术)而做出的改变,因为JRockit没有永久代

2. 有了元空间基本上不会出现OOM内存溢出问题

永久代内存大小参数配置:

-XX:PermSize=N,永久代的初始内存大小

-XX:MaxPermSize=N,永久代的最大值,超出抛OOM异常

元空间内存大小参数配置:

XX:MatespaceSize=N,元空间初始值

-XX:MaxMatespaceSize=N,元空间最大值

三、虚拟机栈

线程私有,java方法执行的内存模型,每个方法执行都会创建一个栈帧,用于存放局部变量表、操作树栈、动态链接、方法返回地址信息等。

局部变量表:一组局部变量值存储空间,用于存放方法参数和方法内部定义的局部变量

操作数栈:一个用于计算的数组,通过入栈和出栈完成一次数据访问(如:先将局部变量表第0和1个索引压入栈,再一次弹出栈并相加,再压入操作数栈中)

Person(方法区) person(虚拟机栈) = new Person()(堆)

四、本地方法栈

线程私有,和栈内存类似,用来管理JVM调用Native方法时的内存空间。

五、程序计数器

线程私有,记录当前线程要执行字节码的行号指示器,随着线程的创建和销毁而生灭。

面试整理-JVM内存模型相关推荐

  1. 面试:JVM内存模型里哪些是线程安全的

    每个线程都拥有自己的工作内存,工作内存是线程私有的. 栈.本地方法栈.程序计数器这三个部分都是线程独占的,线程安全 堆内存和方法区是公共的,非线程安全 JVM 内存模型主要指运行时的数据区,包括 5 ...

  2. 面试必会系列 - 1.7 JVM 内存模型

    本文已收录至 Github(MD-Notes),若博客中图片模糊或打不开,可以来我的 Github 仓库,包含了完整图文:https://github.com/HanquanHq/MD-Notes,涵 ...

  3. java面试-深入理解JVM(一)——JVM内存模型

    JVM内存模型 Java虚拟机(Java Virtual Machine=JVM)的内存空间分为五个部分,分别是:  1. 程序计数器  2. Java虚拟机栈  3. 本地方法栈  4. 堆  5. ...

  4. JVM 内存模型面试题目

    JVM内存主要分为:程序计数器,Java虚拟机栈,本地方法栈,Java堆,方法区.   1.程序计数器: 为了线程切换能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,各条线程之间计数器互不 ...

  5. java 内存模型面试_Java面试- JVM 内存模型讲解

    经常有人会有这么一个疑惑,难道 Java 开发就一定要懂得 JVM 的原理吗?我不懂 JVM ,但我照样可以开发.确实,但如果懂得了 JVM ,可以让你在技术的这条路上走的更远一些. JVM 的重要性 ...

  6. 面试回答,JVM内存模型/内存空间:运行时数据区

    发布于个人公众号,打开微信,搜索MelodyJerry即可 本文由作者原文 [JVM|内存模型] Java虚拟机的内存模型?也就这7个而已 修改而来,可点击左下角阅读原文. JVM内存模型/内存空间 ...

  7. JVM内存模型、原理、垃圾回收、调优

    JVM内存模型.原理.垃圾回收.调优,这Java语言的基础,作为Java从业人员是必须要掌握的,另外这也是面试经常会问到的知识. ----------------------------------- ...

  8. Java JVM内存模型

    简述JVM内存模型 线程私有的运行时数据区: 程序计数器.Java 虚拟机栈.本地方法栈. 线程共享的运行时数据区:Java 堆.方法区. 简述程序计数器 程序计数器表示当前线程所执行的字节码的行号指 ...

  9. JVM内存模型、指令重排、内存屏障概念解析

    在高并发模型中,无是面对物理机SMP系统模型,还是面对像JVM的虚拟机多线程并发内存模型,指令重排(编译器.运行时)和内存屏障都是非常重要的概念,因此,搞清楚这些概念和原理很重要.否则,你很难搞清楚哪 ...

最新文章

  1. 快手EB级HDFS挑战与实践
  2. Flex+fluorineFx +ASP.NET开发的IIS部署
  3. python制作工资计算器-Python制作个税计算器
  4. ArcGIS桌面基本操作 和 ArcSDE数据库基本概念
  5. 计算机设备管理系统报告,设备管理信息化自查报告
  6. 你可能需要的网易前端三轮面经
  7. 在域环境下搭建samba服务器
  8. 一篇文章带你读懂 MySQL 和 InnoDB
  9. WebLogic配置JNDI数据源
  10. 现代分类方法在医学诊断中的应用——基于R的实现
  11. 人脸识别功能实现的原理介绍与算法介绍
  12. FastText在商品分类下的应用(第十届服创大赛全国三等奖)
  13. BeyondCompare4破解最佳实践
  14. 黑龙江省大学计算机学校排名2015,2015黑龙江省大学排行榜 哈工大第一
  15. java电商网站建设教程_java开发电商系统实战开发视频教程
  16. bugzilla 安装
  17. 模拟电子技术学习笔记-NPN三极管的内部结构
  18. python getattr()函数
  19. codecombat极客战记--山峰--士兵的祸害
  20. 在vim中使用查找命令查找指定字符串

热门文章

  1. 【电子学会】2022年09月图形化四级 -- 颜色搭配
  2. Android学习路线_入门篇(一)编写简单的APP
  3. Python同切圆绘画以及圆的面积求解
  4. nodejs本地启动websocket服务,前端调用本地websocket接口调试
  5. 防火墙Mangle-修改MSS-从零开始学RouterOS系列08
  6. iptables 的mangle表
  7. 安卓逆向-盲狙加密方法 | 安卓/JAVA 常用API查询网站
  8. 1000张图片合成背景
  9. 信思智学java企业级开发_智慧职教云课堂2020JavaEE企业级网站开发答案公众号
  10. pageable设置size_SpringdDataJpa如何创建一个不分页,但是排序的pageable