jvm中方法的存放位置

5 篇文章 0 订阅
2 篇文章 0 订阅

其实java方法是存在方法区

方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,方法编译出的字节码也是保存在这个区域。


栈区(虚拟机栈):主要是存储局部变量表(当然也还有其他信息)。

说到这可能有人疑惑,平时在运行一个方法时总说在栈区中开辟一块内存,这是怎么回事呢。

其实栈区中的数据,也就是栈帧,他描述的是方法的一次执行瞬间。

栈帧里面放的就是一些方法中的局部变量方法的形参并且这些局部变量/形参的生命周期是比较短暂的,在本方法调用的时候拥有生命,调用结束后生命结束。

然而方法区中存的就是代码,也就是方法的指令数据(第一步执行什么,第二部执行什么)

下面我们就用一段代码来理解一下方法区 和 栈区

public class TestDemo {
    public static void main(String[] args) {
        test();
    }

    private static void test() {
        for (int i = 0; i < 10; i++) {
            int ret = myadd(i,i+1);
            System.out.print(ret+" ");
        }
    }

    private static int myadd(int i, int j) {
        return i + j;
    }
}

如图所示,在代码开始运行,首先在栈区先开辟main方法的栈帧,之后在开辟test()的栈帧,最后是每调用一次myadd开辟一次栈帧,调用结束返回i+j的值并销毁栈帧。并且在每个方法开辟的栈帧中,都有这个方法中创建的局部变量。

综上我们可以知道的是:
1.方法是存在方法区的,并且方法区中是方法的静态表现
2.栈区中的每个开辟的栈帧是方法的一次执行过程,方法开始执行时产生,执行完销毁,他是方法的动态表现,并且方法被调用几次,就会出现几次。

 

 


原文链接:https://blog.csdn.net/wqq3670/article/details/105401190

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值