龙空技术网

JVM详解之 -- 运行时数据区:栈

小瓜瓜666 147

前言:

当前朋友们对“java内存栈桢”都比较重视,你们都需要剖析一些“java内存栈桢”的相关知识。那么小编在网摘上收集了一些对于“java内存栈桢””的相关内容,希望咱们能喜欢,同学们快快来学习一下吧!

1、栈的数据结构跟子弹夹很像,先进来的子弹,最后出去。后进来的子弹,先出去。

2、线程的运行需要在栈里面开辟内存空间

3、一个线程的栈是由多个栈帧组成。一个栈帧代表一个方法的调用。栈帧-->每个方法运行时需要的内存。

栈的面试题:

1、垃圾回收是否涉及栈内存

不会,栈内存无非就是一次次方法调用占用的内存,栈帧 内存在每一次方法调用后都会被弹出栈,自动被回收掉,所以根本不需要垃圾回收机制

2、栈内存分配的越大越好吗?

不是的! 栈内存分配的越大,那么线程的数量就会越少。因为计算机的物理内存是有限的,比如栈总共空间大小为500M,如果每个线程栈 占用1M空间,那么会有500个线程。如果每个线程栈 占用空间为2M,那么线程只会有250个,线程栈的空间变大,可以让线程有更多的栈帧,更多的方法调用,并不会提高程序性能。所以一般我们使用默认的线程栈的大小,我们也可以用过 -Xss 1024k 这个命令来设置每个线程栈空间的大小。

3、什么情况会导致栈内存溢出?

(1)栈帧过多导致栈内存溢出。

(2)栈帧过大导致栈内存溢出。

我们看一段栈帧过多导致栈溢出的情况 java.lang.StackOverflowError:

栈溢出代码

通过上面代码,我们看到当method1方法替归到21628次的时候,栈内存溢出了。

标签: #java内存栈桢