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

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

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

2,什么是堆?

3,实例

这是一段很简单的代码:
JVM虚拟机01:程序的栈(栈帧stack frame)和堆
他在栈帧中的运行情况是:
JVM虚拟机01:程序的栈(栈帧stack frame)和堆

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

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

4,关于程序堆栈产生最难的两个Bug

(1)野指针:

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

(2)并发问题:

多块内存访问同一块内存空间,
一个线程删了,另外一个线程不知道,就会出现类似上面的情况。
JVM虚拟机01:程序的栈(栈帧stack frame)和堆

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

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

上一篇:安装 OushuDB Ambari 插件


下一篇:OushuDB 安装与升级之安装 Zookeeper