java gc只负责堆的内存,那栈的内存是怎么释放

解决方案 »

  1.   

    栈也是JAVA虚拟机自动管理的,(不是由gc)栈类似一个集合(不过是有固定的容量),是由很多元素(专业术语:栈帧)组合起来的,在我们码代码的时候,每调用一个方法,在运行的时候,JAVA虚拟机就会自动在内存中分配对应的一块空间,那么这块空间就是一个栈帧,也就自然属于栈了,而当方法调用结束后,对应的栈帧就会被释放掉,那么因为JAVA程序从main方法开始执行,那么JAVA虚拟机就会在内存中分配一块main方法的栈帧,如果main方法里没有调用其它方法,那么,main方法调用结束后,会把main方法栈帧释放掉,此时,栈里没有了栈帧,程序结束
    明白了吗?
      

  2.   


    也就是栈的内存管理也是jvm管理的,只是不是gc而已。栈的管理是因为栈本身数据结构的特性,不用的数据自动会出栈的,理解对吗
      

  3.   


    也就是栈的内存管理也是jvm管理的,只是不是gc而已。栈的管理是因为栈本身数据结构的特性,不用的数据自动会出栈的,理解对吗
    嗯,的确,其实,C语言和c++对栈的管理也是如此,不过是由系统来管理的,也就是说其实很多语言对栈的管理都差不多,编译型语言是把对栈的管理交给操作系统,而解释型语言一般都是把对栈的管理给解释器的,大部分语言都是这样,JAVA也是