Java内存区域

1、程序计数器:
当前线程所执行的字节码的行号指示器,字节码解释器工作时就是通过这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等功能都需要依赖这个程序计数器。Java虚拟机的多线程轮流切换,通过时间片轮转来获取处理器(对于多核处理器来说是一个内核),在任何一时间片段只有一个线程占用处理器,而与此同时该线程执行那条指令都是通过程序计数器来控制的,线程来回切换之后能回复到正确的执行位置。每条线程都需要一个独立的程序计数器,各个线程的程序计数器互不影响,独立存储。这种类型的内存存储(程序计数器)称为线程私有。

2、Java虚拟机栈
Java虚拟机栈也是线程私有的,与线程的生命周期相同,是Java方法的内存模型,每个方法被执行的时候会同事创建一个栈帧用于存储布局变量表,操作栈,动态链接,方法出口等信息。一个方法的调用到结束,对应着一个栈帧在虚拟机中从入栈到出栈的过程。所指的栈就是Java的虚拟机栈,或是虚拟机栈中的变量表部分。
3、本地方法栈:
虚拟机栈是为执行Java方法服务,而本地方法栈是为Native方法服务。
4、Java堆:
java堆,是对象存储的地方,各个线程可以共享的。

通过句柄访问对象


句柄访问的优势:rererence中存储的是稳定的句柄地址,在对象移动时(垃圾回收对象移动)只要改变句柄中的实例数据指针,而reference本身不需要修改。

直接指针访问方式:


直接指针访问方式:速度比较快,它节省了一次指针定位的时间开销。本书主要讨论的虚拟机 Sun HotSpot 用的是直接指针访问方式。
5、方法区:
与堆一样,是各个线程可以共享的的内存区域,用于存放被虚拟机加载的的类信息、常量、静态变量、即时编译器编译后的代码等数据。对HotSpot可以理解为是永久代。常量池用于存放类的版本、字段、方法、接口等描述信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值