Java虚拟机运行时数据区域(内存模型)

在这里插入图片描述
引用其他博主结构图
在这里插入图片描述

在这里插入图片描述

程序计数器:

1、是当前线程所执行的字节码的行号指示器,选取下一条需要执行的字节码指令。
2、每个线程都要有独立的程序计数器,线程私有。

java虚拟机栈:

1、线程私有,生命周期与线程同步。
2、是java方法的内存模型。
3、每个方法被执行的时候,都会创建一个栈帧,用于存储局部变量表、操作数栈、动态连接,方法出口等。
4、方法的调用到执行完毕就是栈帧入栈到出栈的过程。
5、栈深度溢出或者栈扩展失败时分别抛出StackOverflowError和OutOfMemoryError异常。

本地方法栈:

1、本地方法栈是为使用到的本地方法服务,虚拟机栈是为虚拟机执行java方法(也就是字节码)服务。
2、栈深度溢出或者栈扩展失败时分别抛出StackOverflowError和OutOfMemoryError异常。
3、甚至有的Java虚拟机(譬如Hot-Spot虚拟机)直接
就把本地方法栈和虚拟机栈合二为一。

堆:

1、所有的对象实例以及数组都要在堆上分配(随着即时编译和逃逸分析技术发展,现在也不是那么绝对)。
2、堆是垃圾回收器的主要区域。
3、堆可以处于物理上不连续的内存空间,只要逻辑连续即可。
4、各线程共享。
5、线程共享的Java堆中可以划分出多个线程私有的分配缓冲区(Thread Local Allocation Buffer,TLAB),以提升对象分配时的效率。
6、java堆可以是固定大小,也可以扩展,不过当前主流的Java虚拟机都是按照可扩展来实现的(通过参数-Xmx和-Xms设定)。

方法区:

1、各线程共享。
2、存储已被java虚拟机加载的类信息、常量、静态变量等。
3、不需要连续内存,可以选择固定或者扩展。
4、可以选择是否实现垃圾回收,一般该区域较少出现回收行为。
5、回收的主要目标是常量池和对类的卸载。
6、“永久代”这个概念,1.8之前很多程序员将方法区也叫“永久代”,将两者混为一谈。主要原因是当时的HotSpot虚拟机设计团队选择把收集器的分代扩展至方法区,用永久代来实现方法区而已。最后发现并不好,1.6就有放弃了永久代实现方法区,改用本地内存实现方法区;到了JDK 7的HotSpot,到已经把原本放在永久代的字符串常量池、静态变量等移出,而到了JDK 8,终于完全废弃了永久代的概念,改用与JRockit、J9一样在本地内存中实现的元空间(Meta-space)来代替,把1.7中永久代还剩余的内容(主要是类型信息)全部移到元空间.

运行时常量池:

1、方法区的一部分。
2、具有动态性,不一定预置在Class文件中,运行期间也可以将新的常量放入池中
3、既然运行时常量池是方法区的一部分,自然受到方法区内存的限制,当常量池无法再申请到内存
时会抛出OutOfMemoryError异常。

直接内存:

1、并不是虚拟机数据区的一部分(也就是不是VM中的)。
2、经常使用,而且也可能导致OutOfMemoryError异常出现。
3、在JDK 1.4中新加入了NIO(New Input/Output)类,引入了一种基于通道(Channel)与缓冲区
(Buffer)的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆里面的
DirectByteBuffer对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能,因为避免了
在Java堆和Native堆中来回复制数据。
4、本机直接内存的分配不会受到Java堆大小的限制,但是,既然是内存,则肯定还是会受到
本机总内存(包括物理内存、SWAP分区或者分页文件)大小以及处理器寻址空间的限制,一般服务器管理员配置虚拟机参数时,会根据实际内存去设置-Xmx等参数信息,但经常忽略掉直接内存,使得各个内存区域总和大于物理内存限制(包括物理的和操作系统级的限制),从而导致动态扩展时出现OutOfMemoryError异常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值