内存划分

JVM中分为2部分,程序运行时,我们申请的变量等都在堆中申请存储空间,而对于每个线程,都在栈中存在一个对应的线程栈。比如我们执行的Main方法,在运行时就对应了Main栈。
每一个栈中都存在很多不同的
栈帧(StackFrame)
,具体来讲就是在调试过程中的每一个调用方法。当一个具体的栈帧执行完毕后,会出栈,其内部申请的局部变量也会随之被销毁。所以每一个具体的FIFO栈中,总是最开始执行的Main方法在栈的最底层,依次被调用的方法栈帧随之被置于Main之上,在不断的入栈出栈的完成一步步操作,直到最后Main的出栈而结束。
ps.并非每个线程栈的最初调用者都是Main,此处只是以我们耳熟能详的Main方法进行举例说明而已。

栈帧

GC Roots

GC

GC Roots不可达的变量称为垃圾,会被GC回收。