栈的五行属性是什么?
这个问题提得好!以前我也没好好想过这个事情,现在想想确实有意思: 栈是内存管理的基础结构,它具有以下特点: 通过以上分析可以得出结论:所谓"栈的五行属性"其实就是栈在计算机内存中实际存在的形式的五种属性。这些属性的表现形式可能各不相同,但本质上都是描述一个对象从创建到消亡的生命周期。
我们就可以进一步给出定义: 接下来,我们看看Java虚拟机规范中关于Stack和Thread类的源代码,来进一步验证上述结论的正确性。 首先来看Java虚拟机规范中关于Stack对象的源码(java.lang.stack): 从这段源码可以看出,当一个方法调用另外一个方法时,就会新建一个Stack对象作为方法调用的参数。这个方法调用实际上就构成了一个CPS(Call-to-Return Stack),而所谓的“栈的五行属性”实际上就是在这期间由Java虚拟机所管理的内存中的值。其中,方法调用之前(包括方法调用过程中局部变量表、操作数栈等的内容)被保存在编译器内部的数据结构中,而只有当方法返回的时候才能将这些内容加载并重新赋给全局变量,这个过程其实就和五行中的木火土金水对应的过程是一致的。
再来看看线程的源码(java.lang.thread): 这段代码主要用来创建和启动新线程,其中create()方法会先分配一块连续的内存空间作为该线程的Runnable的实例,接着在run()方法中调用当前 thread 的 start() 方法使该线程可以开始执行,而start()方法就是真正将当前线程的Runnable实例交给Java虚拟机的调度器去运行,所以我们可以得到这样的关系:Thread --> Runnable --> Start 这实际上就实现了从“无”到“有”,从“静止”到“运动”的一个变化过程,这个变化正是五行中所描述的“木”的状态的变化。