Out Of Memory
java.lang.OutOfMemoryError
Thrown when the Java Virtual Machine cannot allocate an object because it is out of memory, and no more memory could be made available by the garbage collector.
当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也没有空间可回收了,就会抛出这个error
OOM原因:
- 分配的少了:如虚拟机本身可使用内存太少了(通过启动时的VM参数指定)
- 应用用的太多了,并且用完没释放,浪费了。此时就会造成内存泄漏或者内存溢出。
内存泄漏:申请使用完的内存没有释放,导致虚拟机不能再次使用该内存,此时这段内存就泄漏了,因为申请着不用了,而又不能被虚拟机分配给别人用。
内存溢出:申请的内存超出了JVM能提供的内存大小,此时称为溢出
OOM类型:
java.lang.OutOfMemoryError: Java heap space
堆内存溢出。
原因:1.是否存在内存泄漏(用工具查看泄露对象到GC Roots的引用链)2,若不是内存泄漏 调大VM的堆参数
做法:增加JVM内存、查看GC日志有没有发生GC、若年轻代或老年代空间不足,可以设置参数、减少申请数据量
堆内存溢出
虚拟机栈和本地方法栈溢出
运行时常量池溢出
本机直接内存溢出