java虚拟机的内存划分

运行时数据区域
分类
* 程序计数器
* Java虚拟机栈
* 本地方法栈
* Java堆
* 方法区
* 运行时常量池
* 直接内存

在这里插入图片描述
1.程序计数器
可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作原理就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能
一个处理器只会执行一条线程中的指令
作用:为了线程切换后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,各条线程之间计数器互不影响,独立存储(这类内区区域称为线程私有)。
例如:如果线程正在执行的是一个java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是Native方法,这个计数器值则为空(Undefined)。
特殊点:此内存区域是唯一一个在java虚拟机规范中没有规定任何OutOfMemoryError情况的区域
2.Java虚拟机栈
与程序计数器一样,也是线程私有的
生命周期:与线程相同
虚拟机栈描述的是java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数动态链接、方法出口等信息。每一个方法从调用直至执行完成的过 程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。
平常所讲的栈,就是现在讲的虚拟机栈,或者说是虚拟机栈中的局部变量表部分。
局部变量表:存放了编译期可知的各种基本类型、对象引用(reference类型,它不等同于对象本身,可能是一个指向对象起始地址的引用指针,也可能是指向一个代表对象的句柄或其他与此对象相关的位置)和returnAddress类型(指向了一条字节码指令的地址)。其中64位长度的long和double占2个局部变量空间,其余的数据类型只占1个,所需的内存空间在编译期间完成分配,是完全确定的不会改变
这个区域会出现两种异常状况:StackOverflowError异常和OutOfMemoryError异常
3.本地方法栈
本地方法栈是为虚拟机使用到的Native(非java的方法)方法服务的,也会抛出StackOverflowError异常和OutOfMemoryError异常
4.Java堆
java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。
唯一目的:存放对象实例。但是随着JIT编译器的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术将会导致一些微妙的变化发生,所有的对象都分配 在对上也渐渐变得不是那么绝对了。
java堆是垃圾收集器管理的主要区域,也被称为GC堆,java堆还可以细分为:新生代和老年代,在细致一点有Eden空间、From Survivor空间、To Survivor空间等
java堆可以处于物理上不连续的内存空间中,只要逻辑上是连续的即可,它是可扩展的,可以通过-Xmx和-Xms控制,当无法再扩展时抛出OutOfMemoryError异常
5.方法区
各个线程共享的内存区域,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据
和java堆一样不需要连续的内存和可以选择固定大小或者可扩展外,还可以选择不实现垃圾收集
这区域的内存回收目标主要针对常量池的回收和对类型的卸载
java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做Non-Heap(非堆),目的因该是与java堆区分开来
6.运行时常量池
是方法区的一部分,用于存放编译器生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。除了保存Class文件中描述的符号引用外,还回把翻译出来的直接引用也存储在运行时常量池中。
它具备动态性,运行期间也可能将新的常量放入池中,这种特性被开发人员利用的比较多的便是String类的intern()方法。
当常量池无法再申请到内存时会抛出OutOfMemoruError异常
7.直接内存
它并不是虚拟机运行时数据区的一部分
在jdk1.4中新加入了NIO(New Input/Output)类,引入了一种基于通道与缓冲区的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过一个存储在java堆中的DirectByteBuffer对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能,因为避免了在java堆和Native堆中来回复制数据。
它不会受到java堆大小的限制,但是会收到本机总内存(包括RAM以及SWAP区或者分页文件)大小以及处理器寻址空间的限制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值