JVM虚拟机01:程序的栈(栈帧stack frame)和堆
2021/10/6 11:11:13
本文主要是介绍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三代
这篇关于JVM虚拟机01:程序的栈(栈帧stack frame)和堆的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)