栈溢出

栈分成两种

  • 虚拟机栈
  • 本地方法栈(jni调用)

栈溢出原因主要是太多东西入栈,每次调用方法都是一次入栈,每次调用生成的栈帧入栈后占用一些空间。当出现无限递归时会溢出,当栈深度过深时也会出现溢出。

OOM

OutOffMemeryError有很多种出现情况,OOM一般分为:堆区,方法区,常量池。

堆区:

  • 一直创建且不让回收:一直往一个集合里面塞新建的对象。

  • 创建大规模数组

方法区:

  • 动态生成大量类

常量池:

  • jdk1.7后字符串常量放到了堆中:使用intern()方法导致。