JVM-内存划分
来源:互联网 发布:mac 删除键 编辑:程序博客网 时间:2024/05/23 14:29
JVM内存模型图
JVM虚拟机栈
【概念】
- 就是我们常说的堆栈的栈(常常把内存粗略的分为堆和栈) 线程私有,生命周期与线程一样
【作用】
- 存放基本数据类型变量和对象的引用(局部变量表)
【特点】
- 每个方法执行时产生一个栈帧,方法的执行就是栈针在JVM中出栈入栈的过程
- 内存的分配和释放速度快
- JAVA编译器必须知道存储在堆栈内所有数据的确切大小和生命周期,不灵活
- 栈的大小所需内存在编译时期完成分配,方法运行时期不改变局部变量表大小,四个字节占用一个局部变量空间
- 栈的大小决定了方法调用的可达深度(递归多少层次,或嵌套调用多少层其他方法,-Xss参数可以设置虚拟机栈大小)
JVM堆
【概念】
- 对象实例及数组存储位置(优化重点,垃圾回收重点),线程共享
【作用】
- 存储对象和数据共线程共享
【特点】
- Java堆可以处于物理上不连续的内存空间中,只要逻辑连续即可
- 在虚拟机启动时创建,可通过-Xmx和-Xms控制大小
- 分为新生代和老年代
方法区
【概念】
- 与堆的作用一样,数据线程共享,存储的内容在永久带中
【作用】
- 存储类JVM已加载的Class元数据包括类和接口的全限定名,字段,方法的名称和描述
- 存储常量、静态变量: (基本类型如int,Integer,long等,无小数布尔),(对象类型如String,数组等)
【特点】
- 常量池:常量池数据编译期被确定,并且在持久带,线程共享,是Class文件中的一部分。存储了类、方法、接口等中的常量,当然也包括字符串常量。
- 字符串常量池:是常量池中的一部分,存储编译期类中产生的字符串类型数据。(JDK1.7开始已经移动至堆中)
- 运行时常量池:方法区的一部分,所有线程共享。虚拟机加载Class后把常量池中的数据放入到运行时常量池。
本地方法区
【概念】
- 和虚拟机栈功能相似,但管理的不是JAVA方法,是本地方法,本地方法是用C实现的
【作用】
- Object中有众多Native方法,如hashCode()、wait()等
程序计数器
【概念】
- 记录线程下一个要执行的指令
【作用】
- 当多线程线程数超过CPU或CPU内核数时,线程间就要轮询抢夺CPU资源。因此每个线程有要有一个独立的程序计数器
- 如果执行的是JAVA方法,计数器记录正在执行的.class文件字节码行号,如果执行的是native方法,则计数器为空
- 内存占用比较小,划分在CPU上,程序无法直接操作
0 0
- JVM内存区域划分
- JVM内存划分
- 浅析JVM内存划分
- 学习JVM:内存划分
- jvm内存区域划分
- JVM内存划分
- JVM内存区域划分
- jvm 内存区域划分
- JVM内存区域划分
- JVM的内存划分
- JVM内存划分
- JVM内存划分
- jvm内存区域划分
- JVM内存区域划分
- JVM虚拟机-内存划分
- JVM内存划分
- JVM的内存划分
- jvm内存划分
- shell去掉^M
- 第一天 Java 基础总结 1
- Java格式化json格式文本数据
- cordova打包安卓webapp
- 交换排序
- JVM-内存划分
- 10 mongo集群的搭建 以及遇到的问题
- 第二期 开发板选型 《路由器就是开发板》
- HTTP协议
- 函数对象
- netty入门实例
- 10道C++输出易错笔试题收集
- 键盘键和键盘键控制值一览表(键盘按键对应代码表)
- “高教社杯”第三届福建省大学生程序设计竞赛