JAVA 内存划分

1、总体结构图(图来自网络)



2、运行时介绍

A、程序计数器(线程私有)

由于一个CPU可以有多个线程执行,每一个时刻,仅仅有一个线程得到执行,其他线程保持 切换之前的状态(比如线程下一条执行指令的行号等),便于线程得到时间片之后,恢复执行。

那么,用于保存线程执行状态的就是程序计数器。每一个线程都有一个独立的程序计数器。是线程私有的内存单元。当线程执行的是java程序时,程序计数器指向的是字节码指令地址。如果执行的是一个本地方法,则程序计数器的值是undefined。程序计数器没有定义outofmemory异常。

B、虚拟机栈(线程私有,存储方法级别的栈帧)

虚拟机栈也是线程私有的。线程每执行一个方法,就是一个方法的 栈帧 入栈、出栈的过程。线程的虚拟机栈的栈帧,存储了局部变量连接表、方法出口、操作栈等一些具体信息。

C、本地方法栈(线程私有,存储方法级别的栈帧)

本地方法栈的功能类似于虚拟机栈,只不过本地方法栈执行的是本地方法所需要的内存单元。

D、堆

堆是java运行时分配的最大的内存单元。用于存储java对象。所有的线程共享的内存单元。堆是GC主要的作用区域,所以也叫做GC堆。

E、方法区

方法区主要用于存放 ClassLoader加载的class信息、常量、静态变量、GIT编译器编译后的即使代码。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值