JVM内存分哪几个区,每个区的作用是什么?
Java虚拟机主要分为以下几个区:
方法区
- 有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生GC,在这里进行的GC主要是对方法区里的常量池和对类型的卸载
- 方法区主要用来存储已被虚拟机加载的类的信息、常量、静态变量和即时编译器编译后的代码等数据
- 该区域是被线程共享的
- 方法区里有一个运行时常量池,用于存放静态编译产生的字面量和符号引用。该常量池具有动态性,也就是说常量并不一定是编译时确定,运行时生成的常量也会存在这个常量池中
虚拟机栈
- 虚拟机栈也就是我们平常所称的栈内存,它为java方法服务,每个方法在执行的时候都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接和方法出口等信息
- 虚拟机栈是线程私有的,它的生命周期与线程相同
- 局部变量表里存储的是基本数据类型、returnAddress类型(指向一条字节码指令的地址)和对象引用,这个对象引用有可能是指向对象起始地址的一个指针,也有可能是代表对象的句柄或者与对象相关联的位置;局部变量所需的内存空间在编译器间确定
- 操作数栈的作用主要用来存储运算结果以及运算的操作数,它不同于局部变量表通过索引来访问,而是压栈和出栈的方式
- 每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用,持有这个引用是为了支持方法调用过程中的动态连接.动态链接就是将常量池中的符号引用在运行期转化为直接引用
本地方法栈
本地方法栈和虚拟机栈类似,只不过本地方法栈为Native方法服务
堆
Java堆是所有线程所共享的一块内存,在虚拟机启动时创建,几乎所有的对象实例都在这里创建,因此该区域经常发生垃圾回收操作
程序计数器
内存空间小,字节码解释器工作时通过改变这个计数值可以选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理和线程恢复等功能都需要依赖这个计数器完成;该内存区域是唯一一个java虚拟机规范没有规定任何OOM情况的区域
JVM内存分哪几个区,每个区的作用是什么?相关推荐
- 36.JVM内存分哪几个区,每个区的作用是什么、如和判断一个对象是否存活、java垃圾回收机制、垃圾收集的方法有哪些、java类加载过程、类加载机制、双亲委派、Minor GC和Major GC
36.JVM内存分哪几个区,每个区的作用是什么? 37.如和判断一个对象是否存活?(或者GC对象的判定方法) 38.简述java垃圾回收机制? 39.java中垃圾收集的方法有哪些? 40.java类 ...
- JVM 内存分哪几个区,每个区的作用是什么
java虚拟机主要分为以下几个区: 1) 方法区: a. 有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生GC,在这里进行的GC主要是对方法区里的常量池和对类型的卸载 b. 方法区主要 ...
- 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.在内 ...
最新文章
- 《超越平凡的平面设计: 版式设计原理与应用》—色轮
- JavaScript教程——JavaScript 的基本语法(标识符)
- 计组—存储以及字、位扩展
- oracle 约束 Oracle 10g学习系列(5)
- mysql压力写入测试_mysql压力测试工具
- 互联网晚报 | 8月26日 星期四 | 小米Q2营收净利均创单季历史新高;拼多多设立“百亿农研专项”;网易云音乐正式入驻闲鱼...
- C#设计模式之3-建造者模式
- jQuery 遍历 - children() 方法
- iOS蓝牙BLE4.0通信功能
- zabbix 系统IO监控_自动发现
- 2020年勒索病毒事件盘点及未来发展趋势
- 【HDU4456】Crowd(曼哈顿距离转切比雪夫距离+二维坐标hash离散化+二维树状数组)
- 数据库读写分离下的数据同步解决方案
- 有监督学习(supervised learning))与无监督学习(unsupervised learning)之间有何区别?
- DeepFaceLab 2 merge阶段参数
- 哥尼斯堡的“七桥问题” (25分) c++实现
- ExecutorService等待线程完成后优雅结束
- GitHub下载加速网站
- java web租车系统_JavaWeb在线租车服务系统项目源码(福利)
- SEO资源生态系统的原理和思维之我见
热门文章
- VMware上面实现Ubuntu和Windows文件的复制粘贴功能(以及虚拟机当中插入U盘能够显示)
- 关于iOS的自动弹出键盘问题
- SQL Server数据库锁机制及类型
- Jacobi迭代法的matlab程序(《数值分析原理》)
- 经典编程习题,用Java实现:矩阵转置、最大公约数和最小公倍数、计算自然对数的底e的值、输出1000以内的回文素数、判断两个年份之间的平闰年情况。
- 让你的手机随时成为空号
- vue手机端项目php,MintUI基于Vue.js移动端组件库详解
- android tf卡及u盘_android8.1系统修改第三方app无法读写U盘或者内部SD卡的问题
- 文言文编程背后-语言的本质
- 整个世界都是你的绿幕:这个视频抠图换背景的方法太惊艳了!