Java教程

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

本文主要是介绍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)和堆的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!