JVM-虚拟机内存区域

此篇主要用于记录JVM内存区域学习。在公司笔试题中出现率…还是比较高的。


堆与栈

从数据结构的角度说

是一种后进先出的线性表结构,只允许在一端进行插入与删除操作,也叫做后进先出表( Last in First Out,LIFO )。只要是符合此原则的线性表都是栈,主要的是我们的存储方式上的区别;由系统提供,快速高效,缺点是有限制,不够灵活。由系统提供。

是二叉树的一种。满足下列性质的数列叫做堆。将数列看做一棵完全二叉树,则堆是空树、或是一棵根节点的值大于(或小于)左右子树的根节点的值。 数据适应面广,灵活方便,效率有一定降低。由程序去申请。


Java虚拟机中主要可以分为6个内存区域:

1. 程序计数器

是当前所执行的字节码的行号指示器,为了使线程切换灵活方便。

2. 虚拟机栈

线程私有,每个方法执行时,会创建一个栈帧用于存储:
(1)局部变量表:存储基本数据类型对象引用、returnAddress(指向一条字节码的地址)
(2)操作数栈
(3)动态链接
(4)方法出口

3. 本地方法栈

为虚拟机使用到的Native方法服务,但是在HotSpot等JVM中把它与虚拟机栈合二为一了。

4. 堆

线程共享,是JVM所管理的内存中最大的一块,(almost)所有的对象实例数组都在堆上分配内存。

5. 方法区

线程共享,用于存储已经被JVM加载完成的类信息常量静态变量即时编译器编译后的代码等数据。虽然在JVM规范中把它当做堆的一部分,但有时候要把它与堆分开来。

6. 运行时常量池

是方法区的一部分,用于存储Class文件常量池部分,在编译器生成的各种字面量与符号应用。

7. 直接内存(no)

对于多出来的直接内存是指非JVM运行时数据区的一个区域。但是也会被频繁的调用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值