Java虚拟机数据运行时区域

方法区(Method Area)

存储加载的类信息,常量,静态变量,编译器编译后的代码等数据。虽然JVM规范把方法区描述为堆的一个逻辑部分,但它却有一个别名叫做Non-Heap。Class文件中除了有类的版本,字段,方法,接口等描述信息外,还有一项是常量池,用于存放编译器生成的各种字面量和符号引用,包括字符串常量。JVM加载Class后把常量池中的数据放入到运行时常量池。方法区的运行时数据(包括运行时常量池)是线程共享的

堆(Java Heap)

堆是被线程共享的一块内存区域,在JVM启动时创建。所有的对象实例以及数组都要在这里分配内存,但是随着JIT编译器的发展,渐渐变得不是那么绝对了。

虚拟机栈(Java Virtual Machine Stack)

描述Java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧(Stacks Frame)用于存储局部变量表,操作数栈,动态链接,方法出口等信息。每一个方法从调用直至执行完成的过程,就对应一个栈帧在JVM栈中入栈到出栈的过程。 局部变量表是一组变量值存储空间,用于存放方法参数和方法内部定义的局部变量。所需的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要在栈帧中分配多大的局部变量空间是完全确定的,在方法运行期间不会改变局部变量表的大小。为最局部变量表的容量以变量槽(Slot)小单位,32位虚拟机中一个Slot可以存放一个32位以内的数据类型(boolean、byte、char、short、int、float、reference和returnAddress八种)。虚拟机是使用局部变量表完成参数值到参数变量列表的传递过程的,如果是实例方法(非static),那么局部变量表的第0位索引的Slot默认是用于传递方法所属对象实例的引用,在方法中通过this访问。虚拟机栈是线程独享的

本地方法栈(Native Method Stack)

与JVM栈发挥的作用非常相似,区别不过是JVM栈为JVM执行Java方法服务,而本地方法栈为JVM使用到的Native方法服务。也是线程独享的

程序计数器(Program Counter Register)

一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器,字节码解释器就是通过改变计数器的值来选取下一条执行的字节码指令。每个线程拥有独立的一个计数器。

java学习群669823128

最新文章

  1. thrift:swift项目笔记
  2. MediaCodec Name & Type
  3. LEA指令
  4. C# 调用 WebService 连接ORACLE 11g
  5. GOOGLE搜索秘籍完全公开
  6. erlang 练手 进程环
  7. Socket编程(摘抄)
  8. Linq中max min sum avarage count的使用
  9. Docker存储驱动之Btrfs简介
  10. <<精通iOS开发>>第14章例子代码小缺陷的修复
  11. SQL server 数据库中插入中文变???格式乱码的问题另一种容易忽略的情况(C#操作dapper)
  12. Css之 间距初始化
  13. (转)springcloud(一):大话Spring Cloud
  14. SpringBoot+Shiro入门小栗子
  15. java类的高级概念
  16. Javascript数据模型
  17. 像网页开发一样调试ios程序
  18. 模拟器配置Burpsuite抓取https包
  19. 一起学习《C#高级编程》2--比较对象的相等性
  20. Nginx Open File Cache

热门文章

  1. ul,li设置inline-block缝隙
  2. 在python中有多少种运算符?解释一下算术运算符
  3. redmine集成git
  4. 微信小程序学习笔记(4)--------框架之逻辑层
  5. LightOJ - 1336 Sigma Function(约数和+整数拆分)
  6. Python3.x:pyodbc调用sybase的存储过程
  7. 20165101刘天野 2018-2019-2《网络对抗技术》Exp3 免杀原理与实践
  8. 谷歌浏览器和火狐浏览器设置跨域和https、http混用 Chrome
  9. .net 数据脱敏代码实现
  10. 爬虫第六篇:scrapy框架爬取某书网整站爬虫爬取