首页 学无止境Java正文

方法的内存分配分析

By无邪 Java 2020-03-04 12:03:22 177 0

方法的内存分配分析

方法在执行过程中,在JVM中的内存如何分配?内存如何变化?

  • 方法只定义,不调用,是不会执行的,并且在JVM中也不会给该方法分配运行所属的内存空间,

  • 只有在调用的时候,才会动态的给这个方法分配所属的内存空间。

  • 在JVM内存划分上有这样的三块主要的内存空间(当然除了这些还有其他的):

    • 方法区内存

    • 堆内存

    • 栈内存

  • 关于栈数据结构:

    • 数组

    • 队列

    • 链表

    • 二叉树

    • 哈希表/散列表

    • 等等

    • 栈:stack是一种数据结构

    • 数据结构反应的是数据的存储形态

    • 作为程序员需要提前精通:数据结构和算法【重要】

    • Java程序员在不精通数据结构和算法的前提下,也可以进行java开发,因为java中有一台庞大的类库

    • 常见的数据结构:

栈数据结构结构

方法的执行

方法代码片段存在哪里?反方执行的时候执行过程的内存在哪里分配?

  • 方法代码片段属于.class字节码文件的一部分,字节码文件在类加载的时候,将其放到了方法区当中,所以JVM中的三块主要的内存空间中方法区内存最先有数据,存放了代码片段。

  • 代码片段虽然在方法区内存当中只有一份,但是可以重复调用。

  • 方法区中存放.clss字节码文件

  • 每一次调用这个方法的时候,需要给该方法分配独立的活动场所,在栈内存中分配【栈内存中分配方法运行的所属内存空间】

  • 方法在调用的时候,会给该方法分配独立的内存空间,在栈中分配,此时发生压栈动作,方法执行结束之后,给该方法分配的内存空间全部释放,此时发生弹栈动作。

    • 压栈:给方法分配内存

    • 弹栈:释放该方法的内存空间

  • 局部变量在栈中存储。局部变量在方法体中声明,局部变量在运行阶段内存在栈中分配。

JVM内存结构

方法的执行过程分析

  • 方法区存放.class字节码文件

  • 重点:方法调用的时候,在参数传递的时候,实际上传递的是变量中保存的那个"值"传过去了

pubilc class Method{    public static void main(String[] arg){        int a = 10;        int b = 20;        int retValue = sumInt(a,b);        System.out.println("retValue = " + retValue);    }    public static int sumInt(int i,int j){        int result = i + j;        int num = 3;        int reValue = divide(result,num);        return retValue;    }    public static int divide(int x,int y){        int z = x / y;        return z;    }}

执行过程分析

  • 画图分析依据:

    • 只要涉及到参数传递的问题,传递的是变量中保存的值;

    • 画图的时候,必须遵循方法自上而下的顺序依次执行的原则;


本文标题:方法的内存分配分析
本文链接:https://dingqidong.com/?id=134
作者授权:除特别说明外,本文由 By无邪 原创编译并授权 无邪-blog 刊载发布。
版权声明:本文使用「署名-非商业性使用-相同方式共享 4.0 国际」创作共享协议,转载或使用请遵守署名协议。

评论

关于我们
个人博客
关注本站微信号,享受更多服务!
联系方式
电话:
地址:
Email:
邮编:
Copyright ©2019-2020.Powered by©本站隶属于黎明工作室 鲁ICP备19054880号-1

鲁公网安备 37098302000619号

本站已安全运行:
召唤伊斯特瓦尔