(1)栈是每个线程独有的,也就是说每开辟一个线程就会开辟一个栈帧。
(2)线程中的每一个,就相当于一个栈帧
(3)栈帧间的进出方式与数据结构中栈的相同,先进后出。
-------也就是说,一个方法执行完之后,就会弹出,执行上一个压的方法。
这是一段很简单的代码:
他在栈帧中的运行情况是:
我们知道一个常识,那就是,
在栈中栈帧在方法执行完之后,就会结束,栈帧就会弹出(实际上是指针向下移动)
但是堆呢?
我们在方法中的资源怎么回收?
这个如果我们不回收,又不使用,那么就会无辜占用内存空间,
这一个就常见C/C++中必须要解决内存泄露问题,或者Java中垃圾回收机制体现出来的优势。
--------------同一个对象,有两个指针,一个已经释放了,另外一个指针还不知道,任然拿来用。
--------------同一个指针,不同位置
--------------不再指向任何对象的指针
---------------NUllPointerExecetion
多块内存访问同一块内存空间,
一个线程删了,另外一个线程不知道,就会出现类似上面的情况。
语言的发展01:在内存管理上,计算语言的的发展C/C++和Java,Python,go以及rust三代