这两天才来公司,遇到很棘手的问题,把公司项目下载下来后无法运行,报错内存溢出问题,然后网上一大堆问题的答案,按照网上的答案解决了tomcat:java.lang.OutOfMemoryError: PermGen space问题,但是后面还有tomcat:java.lang.OutOfMemoryError: Java heap space问题。按照网上的说法设置并没有解决我的问题,于是开始太多JVM内存机制。在这里终结一下怎样解决的问题,希望能帮助自己和他人。如有错误,请大佬指出。
首先来看一下JVM内存有哪些区域,主要的作用是什么?(摘自http://blog.csdn.net/zhoudaxia/article/details/26454421/)
运行时数据区(Runtime Data Areas)
图 4: 运行时数据区
运行时数据区是在JVM运行的时候操作系统所分配的内存区。运行时内存区可以划分为6个区域。在这6个区域中,一个PC Register,JVM stack 以及Native Method Statck都是按照线程创建的,Heap,Method Area以及Runtime Constant Pool都是被所有线程公用的。
- PC寄存器(PC register):每个线程启动的时候,都会创建一个PC(Program Counter,程序计数器)寄