JAVA内存模型

JAVA与C++之间最大的区别之一就是内存动态分配与垃圾回收技术,在C++中,内存的回收由程序员来控制,而在JAVA中则由java虚拟机来自动进行回收、管理。java虚拟机在执行程序的时候通过将它管理的内存分为若干个不同的数据区域,从而对内存进行管理。主要包括以下几个数据区域:


1、程序计数器

程序计数器是一块较小的内存空间,用来表示当前线程运行字节码的位置。每个线程都有自己独立的一个程序计数器,它属于线程私有。

2、JAVA栈

Java栈也是线程私有的,用来描述Java方法执行的内存模型;栈由栈帧组成,每个方法调用的时候都会创建一个栈帧用于存储局部变量表、操作数栈以及动态链接和方法出口等信息;从中也可以看出,java虚拟机的指令集是基于栈帧的指令集架构,而X86是基于寄存器的指令集,两者各有其优缺点:基于栈的指令集代码更紧凑,编译更简单,而基于寄存器的指令集运行速度更快

3、JAVA堆

Java堆是虚拟机管理的最大区域,它为所有线程共享; 此区域唯一的目的就是存放对象实例,所以它是垃圾收集器管理的主要区域。

4、方法区

方法区各Java堆一样,也是所有线程共享,主要用于存储加载类的信息、常量,静态变量等。其中运行时常量池是方法区一个非常的部分。其详细介绍参见博文:Java常量池概述(待续)

5、本地方法栈

本地方法栈与虚拟机栈的作用比较类似,它主要用于java的Native方法服务调用过程中。


参考:《深入理解Java虚拟机——JVM高级特性与最佳实践》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值