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

1.方法只定义,不调用,是不会执行的,并且在JVM中也不会给该方法分配”运行所属“的内存空间,只有在调用这个方法的时候,才会动态的给这个方法分配所属的内存空间。

2.在JVM内存划分上有这样三个主要的内存空间(当然除了这三块之外还有其他的内存空间);

(1)方法区内存;(2)堆内存;(3)栈内存;

3.关于栈数据结构:

(1)栈:stack,是一种数据结构

(2)数据结构反应的是数据的存储形态。

(3)数据结构是独立的学科,不属于任何编程语言的范畴,只不过在大多数编程语言中要使用数据结构。

(4)常见的数据结构:数组、队列、栈、链表、二叉树、哈希表/散列表

(5)Java在不精通数据结构和算法的前提下,也可以进行开发,因为java拥有强大的库

栈:

(1)栈帧永远指向栈顶元素

(2)栈顶元素处于活跃状态,其他元素静止

(3)术语:

压栈/入栈/push

弹栈/出栈/pop

(4)栈数据结构存储数据的特点是:先进后出,后进先出

4.方法代码片段存储在哪里?方法执行的时候执行过程中的内存是在哪里分配的?

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

(2)代码片段虽然在方法区内存中只有一份,但是可以被重复调用,每一次调用这个方法的时候,需要给该方法分配独立的活动场所,在栈内存中分配。(栈内存中分配方法运行的所属内存空间)

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

压栈是给该方法分配内存

弹栈是给该方法释放内存空间

6.局部变量在“方法体”中声明,局部变量运行阶段内存中在栈中分配。

二、源码:

3.博客园:https://www.cnblogs.com/ruigege0000/

4.欢迎关注微信公众号:傅里叶变换,后台回复”礼包“,获取大数据学习资料

最新文章

  1. python之进程与线程
  2. 【2016-11-11】【坚持学习】【Day24】【WPF 自定义控件 附加属性 自定义事件】
  3. Large Margin DAGs for Multiclass Classification
  4. 求解区间最值 - RMQ - ST 算法介绍
  5. Eclipse報錯:Could not find or load main class
  6. SQL SERVER 数据库实用SQL语句
  7. 函数lock_rec_add_to_queue
  8. 支持多浏览器的镜像反转css效果
  9. BZOJ2893: 征服王
  10. ios 第三方qq授权登陆,第一次登陆后,再次登陆,失效
  11. 从零开始学Xamarin.Forms(二) 环境搭建、创建项目
  12. 操作IFRAME及元素
  13. Cmd Markdown 学习
  14. MTK Camera相关的Makefile Option详解
  15. 关于$ORACLE_HOME/bin/oracle文件属性
  16. use redis instance in docker hub
  17. 第四节,Neural Networks and Deep Learning 一书小节(上)
  18. tp视图模板
  19. JVM总结-java对象的内存布局
  20. BugPhobia开发篇章:Beta阶段第IV次Scrum Meeting

热门文章

  1. 挂起(suspend)与线程阻塞工具类LockSupport
  2. .net core 基于 IHostedService 实现定时任务
  3. Jenkins Java 反序列化远程执行代码漏洞(CVE-2017-1000353)
  4. kali Metasploit 连接 Postgresql 默认密码
  5. 4如何用PHP给MySQL数据库添加记录
  6. ibatis 核心原理解析
  7. 如何用Hexo+Github创建自己的技术博客
  8. java中的异常 try catch
  9. iText实现pdf导出
  10. js网页倒计时功能(天,时,分,秒)