前言:
现时大家对“栈溢出是什么意思”大体比较珍视,咱们都想要学习一些“栈溢出是什么意思”的相关资讯。那么小编也在网上搜集了一些有关“栈溢出是什么意思””的相关资讯,希望兄弟们能喜欢,朋友们快快来学习一下吧!1 堆溢出
Java堆用于存储对象实例,只要不断地创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么在对象数量到达最大堆的容量限制后就会产生内存溢出异常。
代码实现如下:
import java.nio.ByteBuffer;import java.util.ArrayList;import java.util.List;public class OOMTest { public static void main(String[] args) { final int one = 1024 * 1024 * 1; List<ByteBuffer> buffers = new ArrayList<>(); while (true){ ByteBuffer byteBuffer = ByteBuffer.allocateDirect(one); buffers.add(byteBuffer); } }}
Exception in thread "main" java.lang.OutOfMemoryError: Direct buffer memory at java.nio.Bits.reserveMemory(Bits.java:693) at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:123) at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:311) at OOMTest.main(OOMTest.java:9)2 栈溢出
栈容量只由-Xss参数设置,在Java虚拟规范中描述的异常有两种:一是如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常;二是如果虚拟机在扩展栈时无法申请到足够的内存空间,将抛出OutOfMemoryError异常。
代码实现如下:
public class StackSOFTest { private int stackLength=1; public void stackLeak(){ stackLength++; stackLeak(); } public static void main(String[] args) { StackSOFTest test = new StackSOFTest(); test.stackLeak(); }}
Exception in thread "main" java.lang.StackOverflowError at StackSOFTest.stackLeak(StackSOFTest.java:5) at StackSOFTest.stackLeak(StackSOFTest.java:5) at StackSOFTest.stackLeak(StackSOFTest.java:5) at StackSOFTest.stackLeak(StackSOFTest.java:5) at StackSOFTest.stackLeak(StackSOFTest.java:5) at StackSOFTest.stackLeak(StackSOFTest.java:5) at StackSOFTest.stackLeak(StackSOFTest.java:5) at StackSOFTest.stackLeak(StackSOFTest.java:5)
【温馨提示】
点赞+收藏文章,关注我并私信回复【面试题解析】,即可100%免费领取楼主的所有面试题资料!
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #栈溢出是什么意思