详解java中jvm虚拟机栈的作用

 更新时间:2019年08月29日 14:29:29   作者:张占岭  
这篇文章主要介绍了jvm虚拟机栈的作用,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

jvm虚拟机栈的作用

jvm虚拟机栈栈帧的组成

jvm虚拟机栈,也叫java栈,它由一个个的栈帧组成,而栈帖由以下几个部分组成

  • 局部变量表-存储方法参数,内部使用的变量
  • 操作数栈-在变量进行存储时,需要进行入栈和出栈
  • 动态连接-引用类型的指针
  • 方法出口-方法的返回
  • 一段原程序代码
package com.lind.basic;

public class Demo1 {
 static int hello() {
 int a = 1;
 int b = 2;
 int c = a + b;
 return c;
 }

 public static void main(String[] args) {
 System.out.println(hello());
 }
}

一 生成字节码文件

javac demo1.java

生成之后,扩展名是.class,这个文件对于我们来说是没有可读性的。

二 对class文件反汇编

javap demo1.class > demo1.txt

我们可以通过文件编译工具来查看demo1.txt的内容

Compiled from "Demo1.java"
public class com.lind.basic.Demo1 {
 public com.lind.basic.Demo1();
 Code:
  0: aload_0
  1: invokespecial #1     // Method java/lang/Object."<init>":()V
  4: return

 static int hello();
 Code:
  0: iconst_1 // 把第一个整型变量推到操作数栈
  1: istore_0 // 让它出栈,并存储到局部变量表
  2: iconst_2
  3: istore_1
  4: iload_0 // 加载第一个数据入操作数栈
  5: iload_1 // 加载第二个数据入操作数栈
  6: iadd // 将两个数相加,结束入操作数栈
  7: istore_2 // 将结果出栈,存到局部变量表
  8: iload_2 // 加载它入操作数栈
  9: ireturn // 返回

 public static void main(java.lang.String[]);
 Code:
  0: getstatic  #2     // Field java/lang/System.out:Ljava/io/PrintStream;
  3: invokestatic #3     // Method hello:()I
  6: invokevirtual #4     // Method java/io/PrintStream.println:(I)V
  9: return
}

对于上面的汇编文件,我们是可以看的懂的,而且我们需要,汇编语言可以直接在计算机上运行,我想jvm应该也是把class文件生成对应操作系统的汇编文件,然后交给操作系统去执行吧!

总结

以上所述是小编给大家介绍的java中jvm虚拟机栈的作用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

相关文章

  • SpringBoot接收请求参数的四种方式总结

    SpringBoot接收请求参数的四种方式总结

    这篇文章主要给大家介绍了关于SpringBoot接收请求参数的四种方式,文中通过代码以及图文介绍的非常详细,对大家学习或者使用SpringBoot具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • 详解Java枚举与接口常量和类常量的区别

    详解Java枚举与接口常量和类常量的区别

    这篇文章主要为大家详细介绍了Java中枚举与接口常量、类常量有什么区别,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的可以了解一下
    2022-10-10
  • Java中的hashcode方法介绍

    Java中的hashcode方法介绍

    这篇文章主要介绍了Java中的hashcode方法介绍,还是比较不错的,这里分享给大家,供需要的朋友参考。
    2017-11-11
  • j2ee之AJAX二级联动效果

    j2ee之AJAX二级联动效果

    这篇文章主要为大家详细介绍了j2ee之AJAX二级联动效果的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Spring注解之@Conditional使用解析

    Spring注解之@Conditional使用解析

    这篇文章主要介绍了Spring注解之@Conditional使用解析,@Conditional注解可以说是SpringBoot的条件注解,表示组件只有在所有指定条件都匹配时才有资格注册,条件是可以在 bean 定义注册之前​​以编程方式确定的任何状态,需要的朋友可以参考下
    2024-01-01
  • 继承WebMvcConfigurationSupport后自动配置不生效及如何配置拦截器

    继承WebMvcConfigurationSupport后自动配置不生效及如何配置拦截器

    这篇文章主要介绍了继承WebMvcConfigurationSupport后自动配置不生效及如何配置拦截器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Mybatis多个字段模糊匹配同一个值的案例

    Mybatis多个字段模糊匹配同一个值的案例

    这篇文章主要介绍了Mybatis多个字段模糊匹配同一个值的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • SpringBoot中logback日志保存到mongoDB的方法

    SpringBoot中logback日志保存到mongoDB的方法

    这篇文章主要介绍了SpringBoot中logback日志保存到mongoDB的方法,
    2017-11-11
  • Springboot动态配置AOP切点详解

    Springboot动态配置AOP切点详解

    这篇文章主要介绍了Springboot动态配置AOP切点详解,Springboot 可以定义注解切点去拦截注解修饰的类方法以及execution(xxxx)切点去拦截具体的类方法,默认情况下我们都会使用注解@PointCut去定义切点,然后定义切面拦截切点,需要的朋友可以参考下
    2023-09-09
  • SpringBoot中@MessageMapping注解的原理及使用详解

    SpringBoot中@MessageMapping注解的原理及使用详解

    这篇文章主要介绍了SpringBoot中@MessageMapping注解的原理及使用详解,@MessageMapping注解是Spring Boot提供的一个重要的注解之一,它可以帮助我们处理WebSocket消息,需要的朋友可以参考下
    2023-07-07

最新评论