美文网首页
通过jclassLib观察栈帧

通过jclassLib观察栈帧

作者: 乙腾 | 来源:发表于2020-09-23 08:05 被阅读0次

观察代码的栈帧

package com.pl.jvm.stack;

import java.util.Arrays;
import java.util.List;

/**
 * <p>
 *
 * @Description: TODO
 * </p>
 * @ClassName StackTest
 * @Author pl
 * @Date 2020/9/19
 * @Version V1.0.0
 */
public class StackTest {

    public static void main(String[] args) {
        List<String> strings = Arrays.asList("111", "22222");
        getNum(strings);
    }

    public static int getNum(List<String> list){
        int size = list.size();
        return size;
    }
}

方法描述

main

image.png

getNum

image.png

notice:参数类型组成

Ljava/util/List
这是由两部分组成:
L代表引用类型
java/util/List 代表包名 java.util.list

Gneric info

Bytecode


image.png

Exception table


image.png

Misc

image.png

Code length 即Bytecode中字节码指令的长度 0-23


image.png

LineNumberTable

image.png

对应java代码
notice:
n1.StartPC和LineNumber对照表
StartPC和LineNumber 对应着看,一起描述main方法,StartPC描述字节码指令的行号,Linenumber对应代码中的行号,Nr代表索引。
这里可以看出 方法体实际是从19号开始,到21行结束,
结合ByteCode看


image.png

n2.行号
代码中实际行号为LineNumber-1,而且return那行不在这个对照表中,}这个括号也不算。


image.png

args 0 对应 19,但是代码中是18,即LineNumber-1

局部变量表

image.png

notice:

n1:startPC和length

startPC是字节码起始位置,length描述的是变量在字节码中的作用范围。

image.png

args从0开始,作用范围为整个字节码长度。
strings从18开始,作用范围6。
startPC+Length=字节码的长度。

n2:如果返回值是其中的一个局部变量,那么返回值就不在局部变量表中,不多占用空间

image.png

局部变量表中有两个,list和size

相关文章

  • 通过jclassLib观察栈帧

    观察代码的栈帧 方法描述 main getNum notice:参数类型组成 Ljava/util/List这是由...

  • 虚拟机字节码执行引擎1--虚拟机栈与栈帧

    虚拟机对方法执行的支持是通过虚拟机栈来实现的。具体地:栈帧入栈代表着方法开始执行,方法执行完成时栈帧出栈。如下图:...

  • 十五:MySQL层事务提交流程简析(笔记)

    部分栈帧: 2、prepare栈帧 trx_prepare_low 3、flush 之前写redo 栈帧1145 ...

  • 字节码执行引擎

    运行时栈帧结构 栈帧是虚拟机栈中的元素,每一个方法的调用对应着一个栈帧的入栈出栈。栈帧包括局部变量表、操作数栈、动...

  • 5. linux下的栈帧分析

    @toc 1.linux下的栈帧分析2. 栈帧 1. 栈帧 每一次函数的调用,都会在调用栈上维护一个独立的栈帧(s...

  • C 与汇编程序的约定调用

    1.说明 函数调用时通过栈帧来实现的,栈帧是指为一个单独的函数调用单独分配的那部分栈空间。当运行中的程序调用另一个...

  • JVM虚拟机模型学习

    引言 先上图 栈 功能:存放局部变量(线程栈) 1. 栈帧 (1)概念一个方法对应一块栈帧内存区域,该栈帧中保存方...

  • 虚拟机字节码执行引擎

    运行时栈帧结构。 每个方法都有个栈帧,用来存储局部变量,操作数栈,方法入口,动态连接等。方法执行的过程就是栈帧入栈...

  • 栈帧与函数调用流程(内存)---- 8086处理器

    栈帧:一个函数执行的环境,一个栈帧代表一个函数 栈帧结构: 一组栈帧寄存器-->SP局部变量bp以前的值-->BP...

  • JVM - 运行时栈帧结构

    每个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。 1.栈帧的概念 栈帧(St...

网友评论

      本文标题:通过jclassLib观察栈帧

      本文链接:https://www.haomeiwen.com/subject/rqdnyktx.html