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

JVM第四期(内存区域)

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

JVM第四期(内存区域)

不同的内存区域

操作系统的内存分区

  • 栈Stack

  • 堆Heap

  • 未初始化数据段Bss

  • 数据段DataSegment

  • 文本段LiteralSegment

  • 代码段CodeSegment

JVM的内存分区

  • 程序计数器PC
  • 虚拟机栈JVM Stack
  • 本地方发栈Native Stack
  • 堆Heap
  • 方法区Method Area

JVM的内存分区

方法区和堆是线程共享的。

这些是独占的。

程序计数器:用于存储指令地址,交给虚拟机执行相关指令。

public class testJVM {
    public static void main(String[] args) {
        int a=0;
        while(a>10){
            a++;
        }
    }
}

反编译生成字节码文件,查看其指令地址

虚拟机栈:在程序的执行过程中进行方法的调用,即栈帧的入栈出栈

public void funA(){
        int a=1;
        funB(a);
    }
    public void funB(int a){

    }

先是方法a入栈,调用方法b时将方法b压入栈中。

重点:1.栈帧

​ 2.生成时机

​ 3.构成

局部变量表

1.主要存储方法的参数方法内的局部变量

2.基本存储单元为变量槽

3.本质是一个数字数组,byte,char,short,boolean都会转换为int类型,0为false,1为true

4.它的大小在编译器就会生成,运行的时候不会改变大小

操作数栈:用来存储方法的变量和中间值,方便虚拟机顺序读取操作数执行操作指令

public void c(){
        int a=1;
        int b=2;
        int sum=a+b;
    }

执行上述代码时,我们先javap反编译得到字节码文件

查看字节码文件发现其操作指令如下:

0 : iconst_1
1 : istore_1
2 : iconst_2
3 : istore_2
4 : iload_1
5 : iload_2
6 : iadd
7 : istore_3
8 : return

1.iconst_1先读取a=1变量,istore_1将a=1存入局部变量

2.iconst_2再读取b=2变量,istore_2将b=2存入局部变量

3.iload_1将a=1,iload_2将b=2,压入栈中

4.iadd弹出a=1,b=2两个操作数,计算相加的和压入栈中

在多个方法的操作数栈:

动态链接:上期已经详细说明,在类加载过程中

返回地址:分为正确执行的返回,以及运行时错误返回地址。

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

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

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