查询本地内存的栈大小_JVM内存结构

143891e5880296cd3d08417bdaf6e051.png

Java8后,内存分成如下几部分:

程序计数器PC Register,Metaspace,Stack,Heap,和本地方法栈

04846276caf66162fce6657225ad92a6.png
  • Metaspace用于存放类的元信息以及方法信息;而常量池和静态变量存在Heap中
  • Heap里面存储运行时产生的对象
  • Stack里面存放线程相关的数据,如局部变量,参数,对象引用等。
  • PC Register存放的是当前线程执行的指令地址。本地方法栈是调用本地方法时用到的。

上图左边的Metaspace和Heap在JVM中是唯一的,全部线程都会共享这两片区域。右边的Stack/本地方法stack/程序计数器则是线程相关的。

从物理内存来讲,Metaspace不再使用虚拟机的内存,而是直接使用本地内存,由操作系统管理,仅受本地内存大小限制。

调整Metaspace内存大小的参数:

-

堆区Heap:

(1)存储的全部是对象。
(2)存放的这些对象是程序运行时动态创建的。
(3)jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身。
(4)常量池和静态变量存在Heap中。

栈区Stack:

(1)每个线程包含一个栈区,栈中只保存基础数据类型的对象和动态创建的对象的引用(对象本身都存放在堆区中)。
(2)每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
(3)由编译器自动分配释放,存放函数的参数值,局部变量的值等.

《JAVA面试机经基础篇》 郭屹老师著

29a29dcc623fd144d0ba3531da22bcca.png
百度搜索JAVA面试机经基础篇即可

欢迎关注我的其他专栏

什么是编程​zhuanlan.zhihu.com
b3de4260f4b3892de881609646e75473.png
Java语言十五讲​zhuanlan.zhihu.com
b3de4260f4b3892de881609646e75473.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值