Java 内存溢出有以下三种

1 java.lang.OutOfMemoryError: Java heap space —-JVM Heap(堆)溢出

JVM 在启动的时候会自动设置 JVM Heap 的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)不可超过物理内存。可以利用 JVM提供的 -Xmn -Xms -Xmx 等选项可进行设置。Heap 的大小是 Young Generation Tenured Generaion 之和。在 JVM 中如果 98的时间是用于 GC,且可用的 Heap size 不足 2的时候将抛出此异常信息。

解决方法:手动设置 JVM Heap(堆)的大小。  
2 java.lang.OutOfMemoryError: PermGen space  —- PermGen space溢出。

PermGen space 的全称是 PermanentGeneration space,是指内存的永久保存区域。为什么会内存溢出,这是由于这块内存主要是被 JVM 存放Class Meta 信息的,Class 在被 Load 的时候被放入 PermGen space 区域,它和存放 Instance Heap 区域不同,sun GC 不会在主程序运行期对 PermGen space 进行清理,所以如果你的 APP 会载入很多 CLASS 的话,就很可能出现 PermGen space 溢出。

解决方法: 手动设置MaxPermSize 大小

3 java.lang.StackOverflowError   —- 栈溢出

栈溢出了,JVM 依然是采用栈式的虚拟机,这个和 C Pascal 都是一样的。函数的调用过程都体现在堆栈和退栈上了。调用构造函数的太多了,以致于把栈区溢出了。通常来讲,一般栈区远远小于堆区的,因为函数调用过程往往不会多于上千层,而即便每个函数调用需要 1K 的空间(这个大约相当于在一个 C 函数内声明了 256 int 类型的变量),那么栈区也不过是需要 1MB 的空间。通常栈的大小是 12MB 的。
通常递归也不要递归的层次过多,很容易溢出。

解决方法:修改程序。


程序报错

java.net.UnknownHostException: ljabcweb2(主机名): ljabcweb2(主机名): Temporary failure in name resolution    :主机名无法解析

解决方案:在自己的hosts文件里面做一个解析