栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JVM虚拟机01:程序的栈(栈帧stack frame)和堆

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JVM虚拟机01:程序的栈(栈帧stack frame)和堆

1,什么是栈?什么是栈帧?

(1)栈是每个线程独有的,也就是说每开辟一个线程就会开辟一个栈帧。
(2)线程中的每一个,就相当于一个栈帧
(3)栈帧间的进出方式与数据结构中栈的相同,先进后出。
-------也就是说,一个方法执行完之后,就会弹出,执行上一个压的方法。

2,什么是堆? 3,实例

这是一段很简单的代码:

他在栈帧中的运行情况是:

(1)问题一,为什么需要垃圾回收(针对所有语言)

我们知道一个常识,那就是,
在栈中栈帧在方法执行完之后,就会结束,栈帧就会弹出(实际上是指针向下移动)
但是堆呢?
我们在方法中的资源怎么回收?
这个如果我们不回收,又不使用,那么就会无辜占用内存空间,
这一个就常见C/C++中必须要解决内存泄露问题,或者Java中垃圾回收机制体现出来的优势。

4,关于程序堆栈产生最难的两个Bug (1)野指针:

--------------同一个对象,有两个指针,一个已经释放了,另外一个指针还不知道,任然拿来用。
--------------同一个指针,不同位置
--------------不再指向任何对象的指针
---------------NUllPointerExecetion

(2)并发问题:

多块内存访问同一块内存空间,
一个线程删了,另外一个线程不知道,就会出现类似上面的情况。

(3)上述两个问题各语言的诞生发展:

语言的发展01:在内存管理上,计算语言的的发展C/C++和Java,Python,go以及rust三代

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/298230.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号