运行时数据区域

1.程序计数器:是一块较小的内存空间,可以看做当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器来完成。

2.JAVA虚拟机栈:java虚拟机栈是线程私有的,生命周期也和线程相同。虚拟机栈描叙的是java方法执行的内存模型。一般情况把java内存分为堆内存和栈内存,而所指的“栈”就是现在所说的虚拟机栈,或者说是虚拟机栈中局部变量表的部分。局部变量表存放了编译期可知的各种基本数据类型(boolean,byte,char,short,int,float,long,double)、对象引用(reference类型)和returnAddress类型(指向了一条字节码指令的地址)

3.本地方法栈:本地方法栈和虚拟机栈发挥的作用非常相似,他们之间的区别不过是虚拟机栈为虚拟机执行java方法(字节码)服务,而本地方法栈则为虚拟机使用到的Native方法服务。(Sun HotSpot虚拟机直接把本地方法栈和虚拟机栈合二为一)

4.JAVA堆:①是Java虚拟机所管理的内存中最大的一块。java堆是被所以线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。在java虚拟机规范中的描述:所有的对象实例以及数组都要在堆上分配。②java堆是垃圾收集器管理的主要区域,因此很多时候也被称作"GC堆"。从内存回收的角度上看,由于现在收集器基本采用分代收集算法,所以Java堆中还可以细分为:新生代和老年代:再细致一点有Eden空间、From Survivor空间、To Survivor空间等从内存分配的角度来看,线程共享的Java堆中可能分出多个线程私有的分配缓冲区。(注:不论如何划分,都与存放的内容无关,无论哪个区域,存储的都仍然是对象实例,进一步划分的目的是为了更好的回收内存,或者更快地分配内存

5.方法区:方法区和java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译后的代码等数据。对于习惯在HotSpot虚拟机上开发、部署程序的开发者来说,更愿意把方法区称为“永久代”,本质上两者不等价,仅仅是因为HotSpot虚拟机的设计团队选择把GC分代收集扩展至方法区,或者说使用永久代来实现方法区而已。

6.运行时常量池:是方法区的一部分。用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。

7.直接内存:直接内存并不是虚拟机运行时数据区的一部分,也不是java虚拟机规范中定义的内存区域。(在JDK1.4中新加入的NIO类,引入了一种基于通道(Channel)与缓冲区(Buffer)的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆中的DirectByteBuffer对象作为这块内存的引用进行操作。)

最新文章

  1. php性能优化
  2. 浅谈tornado项目应用设计
  3. 值得使用的Spring Boot
  4. Weibo用户地图
  5. C#调用C和C++函数的一点区别
  6. springMVC+ajax分页查询
  7. org.apache.hadoop.conf-Configuration
  8. Hibernate映射解析——七种映射关系
  9. svn代码统计
  10. linux下登陆mysql失败
  11. JavaEE XML DOM创建
  12. retrofit2学习
  13. SOA与基于CDIF的API的联动
  14. CSS position: absolute、relative定位问题详解
  15. vector的简易实现
  16. Git学习笔记06-版本回退
  17. 【转载】MapReduce编程 Intellij Idea配置MapReduce编程环境
  18. Xcode 去掉控制台无用打印信息
  19. MDX Step by Step 读书笔记(九) - Working with Time 处理时间
  20. <NET CLR via c# 第4版>笔记 第5章 基元类型、引用类型和值类型

热门文章

  1. Html --用简单的<hr>实现多样化分割效果
  2. currentStyle与getComputedStyle应用
  3. Oracle中varchar,varchar2,nvarchar,nvarchar2的区别及其它数据类型描述
  4. 火狐浏览器URL中传中文参数乱码问题
  5. Android 6.0 运行时权限处理完全解析
  6. [LeetCode] Find Right Interval 找右区间
  7. [LeetCode] Reverse String 翻转字符串
  8. python读取excel一例-------从工资表逐行提取信息
  9. 协程--gevent模块(单线程高并发)
  10. Android 使用代码主动去调用控件的点击事件(模拟人手去触摸控件)