当前位置: 首页 > news >正文

创意设计一个网站网页版梦幻西游探案寻奇攻略

创意设计一个网站,网页版梦幻西游探案寻奇攻略,seo实战培训机构,手机网站后期维护专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、运行时数据区 二、Java虚拟机栈 1.栈帧的组成 2.局部变量表 3.操作数栈 4.帧数据 总结 前言 JVM作为Java程序的运行环境,其负责解释和执行字节码,管理…

专栏导航

JVM工作原理与实战

RabbitMQ入门指南

从零开始了解大数据


目录

专栏导航

前言

一、运行时数据区

二、Java虚拟机栈

1.栈帧的组成

2.局部变量表

3.操作数栈

4.帧数据

总结


前言

JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了运行时数据区、Java虚拟机栈等内容。 ​


一、运行时数据区

Java虚拟机(JVM)在运行Java程序期间,会创建并维护一系列内存区域,这些区域总称为运行时数据区。这些区域根据其用途和特性,被严格定义并管理。《Java虚拟机规范》详细规定了这些区域的作用和行为,以确保所有Java虚拟机实现的一致性和正确性。

线程不共享区域:

  • 程序计数器:用于存储当前线程执行的字节码指令地址。这个区域是每个线程独有的,不共享。
  • Java虚拟机栈:每个线程在创建时都会创建一个虚拟机栈,每个方法调用都会创建一个栈帧,用于存储局部变量、操作数栈、动态链接和方法出口信息。
  • 本地方法栈:与虚拟机栈相似,本地方法栈为native方法提供服务。

线程共享区域:

  • 方法区:用于存储已被JVM加载的类信息、常量、静态变量以及即时编译器编译后的代码等数据。
  • :堆是所有线程共享的区域,用于动态分配内存。所有的对象实例以及数组都应当在堆上分配。

二、Java虚拟机栈

Java虚拟机栈是Java技术中至关重要的部分,它负责管理方法调用中的基本数据。在执行Java程序时,Java虚拟机栈是线程私有的,即每个线程都拥有自己的Java虚拟机栈,并且随着线程的创建而创建,随着线程的销毁而回收。

Java虚拟机栈,运用栈式数据结构对方法调用过程中的基本数据进行管理。遵循先进后出(First In Last Out)的原则,每一个方法调用都会对应一个独立的栈帧(Stack Frame)进行数据存储。

1.栈帧的组成

Java虚拟机栈的核心组成部分是栈帧,每一个方法的调用都会对应一个栈帧。这个栈帧存储了该方法的所有信息,包括局部变量、操作数栈、动态链接、方法出口等。

  • 局部变量表:这是在运行过程中存放所有局部变量(包括方法参数)的区域。在编译成字节码文件时,就可以确定局部变量表的内容。每个槽(slot)可以存放一个值,如果该值为long或double类型,则该槽会占用两个槽的空间。此外,实例方法的局部变量表中序号为0的位置存放的是this指针,它指向当前调用方法的对象。
  • 操作数栈:这是执行指令时存放临时数据的区域。操作数栈是实现中间计算结果交换和保存的主要场所,同时它也是函数调用的主要数据交互通道。函数作为参数传递时,就将其放在操作数栈上传递。
  • 帧数据:这部分主要包含动态链接、方法出口、异常表的引用等。动态链接保存了符号引用与运行时常量池的内存地址的映射关系。方法出口则指出了方法正常或异常结束时,当前栈帧应如何被弹出。异常表则是用于处理代码中异常的信息,包含了异常捕获的生效范围以及异常发生后跳转到的字节码指令位置。

2.局部变量表

局部变量表是存储在栈帧中的一块区域,它的作用是在方法执行过程中存放所有的局部变量。这些变量在编译成字节码文件时就可以确定其内容。

案例:

public class Demo1 {public static void test() {int i = 0;long j = 1;}
}

字节码:

0 iconst_0
1 istore_0
2 lconst_1
3 lstore_1
4 return

局部变量表(Nr.表示编号;起始PC、长度表示生效范围):

案例分析图:

栈帧中的局部变量表是一个数组,数组中的每个位置称之为槽(slot)。每个槽可以存放一个值,long和double类型的数据会占用两个槽的空间,其他类型的数据则占用一个槽。

局部变量表(序号表示槽的起始编号):

在实例方法中,序号为0的位置专门用于存储当前调用方法的对象引用,即this指针。在运行时,该位置将存储实例对象的内存地址,以便于访问和操作对象的属性和方法。 

案例:

public class Demo1 {public void test() {int i = 0;long j = 1;}
}

局部变量表:

方法参数也会保存在局部变量表中,其顺序与方法中参数定义的顺序一致。 

局部变量表保存的内容有:实例方法的this对象、方法的参数、方法体中声明的局部变量等。为了节省空间,局部变量表中的槽是可以复用的,一旦某个局部变量不再生效,当前槽就可以再次被使用。

案例:

public class Demo1 {public void test(int x,int y) {int i = 0;long j = 1;}
}

局部变量表:

3.操作数栈

操作数栈是栈帧中虚拟机在执行指令过程中用来存放临时数据的一块区域。它是一种栈式的数据结构,如果一条指令将一个值压入操作数栈,则后面的指令可以弹出并使用该值。在编译期就可以确定操作数栈的最大深度,从而在执行时正确地分配内存大小。

案例:

public class Demo1 {public void test() {int i = 0;int j = i + 1;}
}

字节码文件信息:

字节码:

0 iconst_0
1 istore_1
2 iload_1
3 iconst_1
4 iadd
5 istore_2
6 return

字节码分析:

0 iconst_0将常量0放入操作数栈
1 istore_1从操作数栈取出放入局部变量表1号位置
2 iload_1将局部变量表1中的数据放入操作数栈
3 iconst_1将常量1放入操作数栈
4 iadd将操作数栈顶部的两个数据进行累加,结果放入栈中
5 istore_2从操作数栈取出放入局部变量表2号位置
6 return方法结束,返回

4.帧数据

当当前类的字节码指令引用了其他类的属性或方法时,需要将符号引用(编号)转换成对应的运行时常量池中的内存地址。动态链接就保存了编号到运行时常量池的内存地址的映射关系。这样在执行时就可以快速地找到对应的内存地址。

方法出口指的是方法在正确或异常结束时,当前栈帧会被弹出,同时程序计数器应该指向上一个栈帧中的下一条指令的地址。所以在当前栈帧中,需要存储此方法出口的地址。这样在方法结束时,就可以快速地返回到上一个方法的执行位置。

异常表主要用于存储代码中异常的处理信息,它不仅涵盖了异常捕获的有效范围,还包含了try代码块和catch代码块执行后的字节码指令跳转位置。通过异常表,虚拟机能够精确地定位异常发生的位置,并采取适当的处理措施,从而确保程序的稳定性和可靠性。

案例:

public class Demo1 {public void test() {try {int i = 0;} catch (Exception e) {int j = 1;} finally {int k = 2;}}
}

字节码文件信息:

字节码:

 0 iconst_01 istore_12 iconst_23 istore_14 goto 21 (+17)7 astore_18 iconst_19 istore_2
10 iconst_2
11 istore_1
12 goto 21 (+9)
15 astore_3
16 iconst_2
17 istore 4
19 aload_3
20 athrow
21 return


总结

JVM是Java程序的运行环境,负责字节码解释、内存管理、安全保障、多线程支持、性能监控和跨平台运行。本文主要介绍了运行时数据区、Java虚拟机栈等内容,希望对大家有所帮助。

http://www.yayakq.cn/news/714506/

相关文章:

  • 自己电脑建设网站南昌企业制作网站设计
  • 莱州网站建设教程网站建设的基本步骤是
  • 想做机械加工和橡胶生意怎么做网站大连在哪个网站做网上核名
  • 做网批有专门的网站吗?电商设计师岗位职责
  • 网站开发环境及工具广州网站建设联雅
  • 企业网站如何建立凡科建站小程序制作
  • 深圳网站建设有没有市场常州网站建设公司巧誉友网络
  • 重庆网站建设专家建站快车品牌
  • 乐辰科技网站建设求职设计师的个人简历模板
  • 成都制作网站提供商杭州网站建设教育机构
  • 上海做网站公司做网站的公司百度平台营销收费标准
  • 我的世界做封面网站中国移动app免费下载安装
  • 外贸网站如何做推广是什么网架公司排名
  • 温州网站建设方案表一个虚拟空间做两个网站
  • 怎么制作手机网站买个域名就可以建立网站吗
  • 重庆网站建设cqhtwl梵克雅宝官网报价
  • 烟台网站制作开发添加到wordpress视频库中
  • 电脑上做网站wordpress淘客分销
  • 建设快三网站wordpress匿名投稿
  • 万网有域名怎么建网站域名防红短链接
  • 石家庄网站建设哪里好wordpress分页伪静态
  • 北京最新消息情况今天佛山网站优化服务
  • vue.js合作做网站么如何做网站美工
  • 个人做电子商务网站备案iis访问网站打开要很久
  • 如何用手机建设一个网站网络营销方式对比
  • 东莞官方网站做收费网站
  • 成都制作网站公司家庭带宽100m做网站
  • 免费的代码分享网站安庆跨境电商建站哪家好
  • 北京南站到北京站网络推广方案百度百科
  • 请简述网站建设流程图北京网站建设费用