风也温柔

计算机科学知识库

java内存溢出错误 java web 内存溢出程序如何调整_Tomcat运行Java Web内存溢出

  如果JVM里运行的程序, 它的内存堆和持久存储区域的都满了,这个时候程序还想创建对象实例的话,垃圾收集器就会启动,试图释放足够的内存来创建这个对象。这个时候如果垃圾收集器 没有能力释放出足够的内存,它就会抛出内存溢出错误。

  如果JVM里运行的程序, 它的内存堆和持久存储区域的都满了,这个时候程序还想创建对象实例的话,垃圾收集器就会启动,试图释放足够的内存来创建这个对象。这个时候如果垃圾收集器 没有能力释放出足够的内存,它就会抛出内存溢出错误。

  SUN JVM的内存管理方式:

  SUN的JVM是类似人类家族,也就是在一个地方创建对象,在它长期占据空间之前给它多次死亡的机会java内存溢出错误,SUN JVM会划分为:

  1. 年轻的一代(Young ),包括EDEN和2个幸存者空间(出发地和目的地the From space and the To space)

  2. 老一代(Old )

  3. 永久的一代( )

  Java虚拟机的运行时数据区一般分类如下(不一定是物理划分):

  1. 堆:主要存放对象实例,线程共享

  2. 栈:主要存储特定线程的方法调用状态,线程独占

  3. 本地方法栈:存储本地方法的调用状态,线程独占

  4. PC寄存器:学过操作系统课程的都知道,线程独占

  5. 方法区:主要存储了类型信息,线程共享

  因此,在抛出内存溢出错误的时候,一般都会提示内存泄露的种类,一般也都是按照区域进行划分:

  1. 堆(heap)内存泄漏java.lang.: space:大家都比较熟悉java内存溢出错误 java web 内存溢出程序如何调整_Tomcat运行Java Web内存溢出,通过设置- -可以解决

  2. 栈(stack)内存泄漏:当前线程运行期间维护的中间变量等信息过多java内存溢出错误,例如常见的死循环引起stack over flow

  3. 方法区( heap)内存泄漏,即java.lang.: space:发生的原因和类型装载、类型卸载有直接的关系,通过设置-XX:=256m -XX:=256m可以解决。

  一般情况下,当服务器内存过小,而提供了大量的访问服务时,可能会缓存过多的数据对象造成堆内存溢出,当web应用不断扩大,加载的lib库达到一定大小(4M)后,就容易报 OOM,也就是方法区溢出。

  在Linux服务器中将参数写入环境变量:

   ="- -"

   ="-XX:=256m -XX:=256m"

  Xmx 最大不要超过服务器物理内存的80%

  原文链接:

  文章来源:https://blog.csdn.net/weixin_36419499/article/details/114212657