JVM 内存分哪几个区,每个区的作用是什么
java虚拟机主要分为以下几个区:
1) 方法区:
a. 有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生GC,在这里进行的GC主要是对方法区里的常量池和对类型的卸载
b. 方法区主要用来存储已被虚拟机加载的类的信息、常量、静态变量和即时编译器编译后的代码等数据。
c. 该区域是被线程共享的。
d. 方法区里有一个运行时常量池,用于存放静态编译产生的字面量和符号引用。该常量池具有动态性,也就是说常量并不一定是编译时确定,运行时生成的常量也会存在这个常量池中。
2) 虚拟机栈:
a. 虚拟机栈也就是我们平常所称的栈内存,它为java方法服务,每个方法在执行的时候都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接和方法出口等信息。
b. 虚拟机栈是线程私有的,它的生命周期与线程相同。
c. 局部变量表里存储的是基本数据类型、returnAddress类型(指向一条字节码指令的地址)和对象引用,这个对象引用有可能是指向对象起始地址的一个指针,也有可能是代表对象的句柄或者与对象相关联的位置。局部变量所需的内存空间在编译器间确定
d. 操作数栈的作用主要用来存储运算结果以及运算的操作数,它不同于局部变量表通过索引来访问,而是压栈和出栈的方式
e. 每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用,持有这个引用是为了支持方法调用过程中的动态连接.动态链接就是将常量池中的符号引用在运行期转化为直接引用。
3) 本地方法栈:
本地方法栈和虚拟机栈类似,只不过本地方法栈为Native方法服务。
4) 堆:
java堆是所有线程所共享的一块内存,在虚拟机启动时创建,几乎所有的对象实例都在这里创建,因此该区域经常发生垃圾回收操作。
5) 程序计数器:
内存空间小,字节码解释器工作时通过改变这个计数值可以选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理和线程恢复等功能都需要依赖这个计数器完成。该内存区域是唯一一个java虚拟机规范没有规定任何OOM情况的区域。
JVM 内存分哪几个区,每个区的作用是什么相关推荐
- 36.JVM内存分哪几个区,每个区的作用是什么、如和判断一个对象是否存活、java垃圾回收机制、垃圾收集的方法有哪些、java类加载过程、类加载机制、双亲委派、Minor GC和Major GC
36.JVM内存分哪几个区,每个区的作用是什么? 37.如和判断一个对象是否存活?(或者GC对象的判定方法) 38.简述java垃圾回收机制? 39.java中垃圾收集的方法有哪些? 40.java类 ...
- JVM内存分哪几个区,每个区的作用是什么?
Java虚拟机主要分为以下几个区: 方法区 有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生GC,在这里进行的GC主要是对方法区里的常量池和对类型的卸载 方法区主要用来存储已被虚拟机加 ...
- JVM教程:JM内存分哪几个区,每个区的作用是什么?
很多人没有合适的资料来回顾整个JVM知识体系,或者有的初学者可能不知道该从哪里开始复习.整理一些常见的JVM面试题,希望对大家有帮助. JVM常见面试题 问:JM内存分哪几个区,每个区的作用是什么? ...
- 一文详解,jvm内存分代与垃圾回收原理
jvm运行时数据区 Java程序启动后,本质上就是启动一个jvm进程,jvm会将自己管理的内存划分为几个区域,每个区域都有自己的用途.在程序运行时的内存区域主要可以划分为五个,分别是:方法区.堆.虚拟 ...
- @JVM内存模型(运行时数据区)
前言 说到Java内存区域,可能很多人第一反应是"堆栈".首先堆栈不是一个概念,而是两个概念,堆和栈是两块不同的内存区域,简单理解的话,堆是用来存放对象而栈是用来执行程序的.对于J ...
- JVM内存模型——运行时数据区的特点和作用
文章目录 前言 1程序计数器 2本地方法栈 3虚拟机栈 3.1局部变量表 3.2操作数栈 3.3动态连接 3.4返回地址 4方法区 5堆 5.1查看方法区跟堆大小 5.2新生代跟老年代 5.3什么时候 ...
- JVM调优:JVM内存分代模型
- JVM运行时数据区---方法区(演变和垃圾回收)
方法区演进细节与垃圾回收 方法区演进细节 永久代演进过程: 首先明确:只有 Hotspot 才有永久代.BEA JRockit.IBMJ9 等来说,是不存在永久代的概念的.原则上如何实现方法区属于虚拟 ...
- jvm的类加载和运行时数据区和垃圾回收
类加载过程 加载(loading) 引导类加载器 扩展类加载器 系统类加载器 1.通过一个类的全限定名获取此类的二进制字节流 2.将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构 3.在内 ...
最新文章
- Python:一篇文章掌握Numpy的基本用法
- 使用 utmpdump 监控 CentOS 用户登录历史
- VTK:Render之RenderView
- How ASP.NET MVC Works?
- java郝斌_郝斌Java自学教程全集打包
- Oracle面对“数据倾斜列使用绑定变量”场景的解决方案
- 网站登录页面php代码,一个简单的网页密码登陆php代码
- 小朵机器人安卓叫什么_小朵机器人App
- A4张的尺寸大小是多大?像素又是多少呢?
- IP地址屏蔽功能设计
- “中华酷联米”第一阵营形成 小米梦如何继续
- 多声道在系统和软件里的设置与应用(普通声卡和dante声卡)
- v3S移植mplayer播放器
- 解决java.io.IOException: Cannot run program cygpath: CreateProcess error=2, 系统找不到指定的文件 的错误...
- 低轨卫星传播特性仿真与分析
- DOM详解(五):DOM常用对象
- 跨进程读取ListView(CListCtrl)内容
- Scala深入浅出——从Java到Scala
- 第十三章、IO流_File类与递归/基本流/增强流/属性集与打印流__黑马Java第57期个人学习笔记_个人笔记
- 伯克利博士『机器学习工程』大实话;AI副总裁『2022 ML就业市场』分析;半导体创业公司大列表;大规模视频人脸属性数据集;前沿论文 | ShowMeAI资讯日报
热门文章
- 念整数(你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。 如输入1234,则输出: yi er san si)
- Unity 获取UI中不同容器里的相对坐标
- ps-ef命令linux,【Linux】- ps -ef |grep 命令
- Promise的使用
- 安全网关设备有哪些 安全网关产品介绍
- 关闭谷歌Chrome浏览器历史记录提示
- 如何架设流媒体服务器
- 安装Photoshop后,打开方式里没有“Photoshop”选项的解决办法
- 【组图】世界著名城市夜景
- 树莓派 使用3.5耳机口输出音频