方法的内存分配分析
方法在执行过程中,在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
版权声明:本文使用「署名-非商业性使用-相同方式共享 4.0 国际」创作共享协议,转载或使用请遵守署名协议。
- 上一篇: Java-方法基本语法
- 下一篇: 数据库的相关概念
评论