面试整理-JVM内存模型
当前三大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内存模型相关推荐
- 面试:JVM内存模型里哪些是线程安全的
每个线程都拥有自己的工作内存,工作内存是线程私有的. 栈.本地方法栈.程序计数器这三个部分都是线程独占的,线程安全 堆内存和方法区是公共的,非线程安全 JVM 内存模型主要指运行时的数据区,包括 5 ...
- 面试必会系列 - 1.7 JVM 内存模型
本文已收录至 Github(MD-Notes),若博客中图片模糊或打不开,可以来我的 Github 仓库,包含了完整图文:https://github.com/HanquanHq/MD-Notes,涵 ...
- java面试-深入理解JVM(一)——JVM内存模型
JVM内存模型 Java虚拟机(Java Virtual Machine=JVM)的内存空间分为五个部分,分别是: 1. 程序计数器 2. Java虚拟机栈 3. 本地方法栈 4. 堆 5. ...
- JVM 内存模型面试题目
JVM内存主要分为:程序计数器,Java虚拟机栈,本地方法栈,Java堆,方法区. 1.程序计数器: 为了线程切换能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,各条线程之间计数器互不 ...
- java 内存模型面试_Java面试- JVM 内存模型讲解
经常有人会有这么一个疑惑,难道 Java 开发就一定要懂得 JVM 的原理吗?我不懂 JVM ,但我照样可以开发.确实,但如果懂得了 JVM ,可以让你在技术的这条路上走的更远一些. JVM 的重要性 ...
- 面试回答,JVM内存模型/内存空间:运行时数据区
发布于个人公众号,打开微信,搜索MelodyJerry即可 本文由作者原文 [JVM|内存模型] Java虚拟机的内存模型?也就这7个而已 修改而来,可点击左下角阅读原文. JVM内存模型/内存空间 ...
- JVM内存模型、原理、垃圾回收、调优
JVM内存模型.原理.垃圾回收.调优,这Java语言的基础,作为Java从业人员是必须要掌握的,另外这也是面试经常会问到的知识. ----------------------------------- ...
- Java JVM内存模型
简述JVM内存模型 线程私有的运行时数据区: 程序计数器.Java 虚拟机栈.本地方法栈. 线程共享的运行时数据区:Java 堆.方法区. 简述程序计数器 程序计数器表示当前线程所执行的字节码的行号指 ...
- JVM内存模型、指令重排、内存屏障概念解析
在高并发模型中,无是面对物理机SMP系统模型,还是面对像JVM的虚拟机多线程并发内存模型,指令重排(编译器.运行时)和内存屏障都是非常重要的概念,因此,搞清楚这些概念和原理很重要.否则,你很难搞清楚哪 ...
最新文章
- 快手EB级HDFS挑战与实践
- Flex+fluorineFx +ASP.NET开发的IIS部署
- python制作工资计算器-Python制作个税计算器
- ArcGIS桌面基本操作 和 ArcSDE数据库基本概念
- 计算机设备管理系统报告,设备管理信息化自查报告
- 你可能需要的网易前端三轮面经
- 在域环境下搭建samba服务器
- 一篇文章带你读懂 MySQL 和 InnoDB
- WebLogic配置JNDI数据源
- 现代分类方法在医学诊断中的应用——基于R的实现
- 人脸识别功能实现的原理介绍与算法介绍
- FastText在商品分类下的应用(第十届服创大赛全国三等奖)
- BeyondCompare4破解最佳实践
- 黑龙江省大学计算机学校排名2015,2015黑龙江省大学排行榜 哈工大第一
- java电商网站建设教程_java开发电商系统实战开发视频教程
- bugzilla 安装
- 模拟电子技术学习笔记-NPN三极管的内部结构
- python getattr()函数
- codecombat极客战记--山峰--士兵的祸害
- 在vim中使用查找命令查找指定字符串
热门文章
- 【电子学会】2022年09月图形化四级 -- 颜色搭配
- Android学习路线_入门篇(一)编写简单的APP
- Python同切圆绘画以及圆的面积求解
- nodejs本地启动websocket服务,前端调用本地websocket接口调试
- 防火墙Mangle-修改MSS-从零开始学RouterOS系列08
- iptables 的mangle表
- 安卓逆向-盲狙加密方法 | 安卓/JAVA 常用API查询网站
- 1000张图片合成背景
- 信思智学java企业级开发_智慧职教云课堂2020JavaEE企业级网站开发答案公众号
- pageable设置size_SpringdDataJpa如何创建一个不分页,但是排序的pageable