栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

JVM脑图总结及内存分布图

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JVM脑图总结及内存分布图

  • 前言
  • 虚拟机听细讲
    • 虚拟机的构成
      • 闭帧
        • 1、 局部变量表
        • 2.、作数词
        • 3、动态连接
        • 4、返回地址
    • 代码实例讲解
前言

上文就讲了JVM内存的五部分,Java方法区、Java栈、Native方法区、Java堆和程序计数器本文就详细详解下,并附带代码实例

虚拟机桟细讲

虚拟机里存储的是当前线程运行java方法所需的数据,指令、返回地址
指令限制 –Xss桟的大小。不同的jdk版本默认的梗大小不同。
会发生栈溢出错误。
里面包含了一个个的桟帧。

虚拟机桟构成

桟帧

栈帧:在每个 Java 方法被调用的时候,都会创建一个栈帧,并入栈。一旦方法完成相应的调用,则出栈

栈帧大体都包含四个区域:(局部变量表、操作数栈、动态连接、返回地址)

1、 局部变量表

局部变量表用于存放局部变量的(方法中的变量)。是一个32为长度,用于存放java八大基础数据类型。如果是64位的可以使用高地占位两个存放。如果是局部的对象,比如Object 对象,则只需要存放一个地址引用即可。

2.、作数桟

作数序是存放java方法执行的操作数的,也是一个先进后出的栈结构,操作数栈用来操作的,操作的元素可以是任意的java数据类型。所以,一个方法刚开始的时候,他的操作数栈就是空的。只有方法执行,才会对操作数栈进行操作。

3、动态连接

动态链接主要就是指向运行时常量池的方法引用

4、返回地址

正常返回(调用程序计数器中的地址作为返回)、异常的话(通过异常处理器表<非栈帧中的>来确定)

代码实例讲解

如图所示,这段代码很简单,就是一个起一个 main 方法,在 main 方法运行中调用 A 方法,A 方法中调用 B 方法,B 方法中运行 C 方法。 我们把代码跑起来,线程 1 来运行这段代码, 线程 1 跑起来,就会有一个对应 的虚拟机栈,同时在执行每个方法的时候都会打包成一个栈帧。 比如 main 开始运行,打包一个栈帧送入到虚拟机栈,同样A方法B方法也会产生桟帧存在桟中。


C 方法运行完了,C 方法出栈,接着 B 方法运行完了,B 方法出栈、接着 A 方法运行完了,A 方法出栈,最后 main 方法运行完了,main 方法这个栈帧就 出栈了。 这个就是 Java 方法运行对虚拟机栈的一个影响。虚拟机栈就是用来存储线程运行方法中的数据的。而每一个方法对应一个栈帧。

虚拟机里的讲解也就到这里了,希望对大家有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/963059.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号