JVM内存结构简单篇(浅入)

 网上各种介绍JVM的文章, 一时不知道从哪里看起,有的讲的很深很细,当然看完你就能完全明白,但是对于刚看的人来说, 越看越深奥, 越看越多不懂的术语,词汇,以至于想放弃,写这篇文章就是为了对JVM有一个整体的概念,随后再写更深入的了解, 都说深入浅出,我倒是觉得应该是浅入,深入,再浅出

当然JVM内存结构是离不开下面这张图的

96698196-0f6b-4ef6-9a20-85dd35d75f27

一看这张图就觉得深奥,我们先浅入下:

 这张图有两个概念: 

1. JVM内存分为五个区块

1) 方法区: 存放类信息,常量 以及静态变量(这里说的类信息并不是指类的class对象, Class对象是存放在堆区的,不是方法区,类信息由类加载器在类加载时从类文件中提取出来的类的方法代码,比如变量名,方法名,访问权限,返回值等等都是在方法区中)

2)堆: 存放new出的对象,但是引用并不是在对堆中,而是在栈中

3)虚拟机栈: 由栈帧组成(组成的就是这个线程的调用链路,可以理解为一个栈帧关联的是一个方法)当有一个方法被调用时,代表这个方法的栈帧入栈,当这个方法返回时,其栈帧出栈

每个栈帧里面存放的有: 局部变量表, 方法的操作数栈(Java 字节码指令的操作数存放在操作数栈中),方法返回地址,动态连接(每个栈帧都包含一个执行运行时常量池(方法区)中该栈帧所属方法的引用)

下面一张图就明确的说明是栈的分配(图来自https://www.cnblogs.com/minisculestep/articles/4934947.html)

4)本地方法栈: 这部分主要与虚拟机用到的 Native 方法相关

5)程序计数器:  会记录每个线程执行到哪里了(保存的是当前线程执行的虚拟机字节码指令的内存地址)

2. 线程共享的有两个区块: 1) 方法区,2) 堆

非线程共享:1)程序计数器 2) 本地栈 3)虚拟机栈

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值