JVM管理2种内存,堆和非堆,堆启动时候创建,给开发人员用;非堆给JVM自己用,存放类信息,和堆不同,非堆内存运行期间GC不释放。
用到比较多参数有以下
-Xms512m JVM初始堆内存。默认是物理内存的1/64,此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmx512m JVM最大堆内存;默认是物理内存的1/4。
-Xmn256m 堆年轻代大小。
假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系。32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制了
-XX:PermSize=128M 非堆内存初始值;默认是物理内存的1/64;
-XX:MaxPermSize=256m 非堆内存最大值;默认是物理内存的1/4。
-XX:NewSize=256m 堆年轻代初始值
-XX:MaxNewSize=256m 堆年轻代最大值
这里年轻代可细分为{Eden,from,to},{from,to}也可以定为Survivor区
java对象先在Eden区,如果Eden不够,就试图释放一些不活跃对象,如果还不够,就会将活跃对象放入Survivor区,OLD足够就会将Survivor区对象移到OLD,否则保留在Survivor区。OLD区不够会引发FULL GC。如果FULL GC后,OLD和Survivor区还是不够就会出现out of memory错误。
Xms/Xmx和NewSize/MaxNewSize定义好后,堆OLD区间也自然定义完毕了,即OLD区初始大小=(Xms-NewSize),OLD区最大可占用大小=(Xmx-MaxNewSize)
"new"的大小最好不要大于"old"的一半,原因是old区如果不够大会频繁的触发"主" GC ,大大降低了性能
(查阅网上资料,有位前辈做了实验发现-Xmn256m相当于-XX:NewSize=256m和-XX:MaxNewSize=256m,http://eyesmore.iteye.com/blog/1530996)
java.lang.OutOfMemoryError: PermGen space
多数非堆內存超过最大值,比如大量引用jar,应用有很多class类,建议调整-XX:MaxPermSize大小。
java.lang.OutOfMemoryError: Javaheap space
堆内存不足,这类情况引起的较多,可能是程序引起,那就需要优化程序,也可以尝试调整-Xms512m和-Xmx512m,还有年轻代大小。
分享到:
相关推荐
JAVA内存溢出问题总结 JAVA 内存溢出问题是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用的内存大于虚拟机能提供的最大内存。内存溢出问题可以从容器和程序类两个方面进行排查,容器问题...
Java内存溢出(Out Of Memory,OOM)是Java应用程序运行时常见的问题,它通常发生在程序对内存需求超过了Java虚拟机(JVM)所能提供的可用内存时。本文将深入探讨Java内存溢出的原因、表现以及如何解决。 1. **Java...
JAVA内存溢出 JAVA中OutOfMemoryError(内存溢出)的三种情况及解决办法 Java中的OutOfMemoryError(内存溢出)是一种常见的错误,本文将详细介绍OutOfMemoryError的三种情况及其解决方法。 首先,我们需要了解...
Java内存溢出(Out of Memory,OOM)是Java应用程序中常见的问题,会导致程序崩溃或性能急剧下降。HeapAnalyzer是一款强大的工具,专为分析Java应用程序的内存状况,特别是针对内存溢出问题进行诊断。本文将详细介绍...
Java内存溢出的详细解决方案 Java内存溢出是指Java虚拟机...Java内存溢出是一种常见的错误,需要通过设置合适的堆大小和PermGen space大小、降低对象创建速度和减少Class数量、使用垃圾回收机制和对象池或缓存来避免。
HeapAnalyzer456.jar 是一个专门用于分析Java内存溢出的专业工具,它可以帮助开发者深入理解内存的分配、使用和泄漏状况。本篇文章将详细介绍如何使用HeapAnalyzer456.jar来分析Java内存溢出问题。 首先,我们需要...
Java内存溢出是开发和运行Java应用程序时常见的问题,可能导致程序崩溃或性能急剧下降。JRockit JVM(Java Virtual Machine)由Oracle公司开发,它提供了强大的内存管理和分析工具,尤其是对于内存溢出的检测和诊断...
本篇文章将详细解析三种常见的Java内存溢出类型:JVM PermGen space溢出、JVM heap space溢出以及Native Heap溢出,并提供相应的解决方案。 1. **JVM PermGen space溢出** - ** PermGen space** 是JVM内存模型中的...
在软件开发领域,尤其是涉及到数据库应用的场景下,内存泄漏(Memory Leak)和内存溢出(Out of Memory,简称OOM)是两个常见的问题,它们直接影响到程序的性能、稳定性和可扩展性。以下是对这两个概念及其相关知识...
Java内存溢出问题,是Java开发中常见的性能问题,它发生在程序运行时,由于系统无法分配足够的内存资源来满足程序的运行需求,导致程序异常终止。深入理解Java内存溢出,有助于我们优化程序,提高系统稳定性。下面...
#### 解决Java内存溢出的方法 ##### 1. **理解内存结构** 在深入探讨解决方案之前,首先需要了解Java虚拟机(JVM)的内存布局: - **堆内存**:存放对象实例和数组。 - **栈内存**:线程私有的,用于存储局部变量...
Java内存溢出的知识点 ...Java内存溢出是Java程序中的常见错误,了解其原因和解决方法是非常重要的。通过优化程序的内存使用,减少对象的创建和回收,使用对象池技术等方法,可以有效地避免Java内存溢出错误的发生。
解决Java内存溢出和内存泄露的方法主要包括以下几点: 1. 适当调整JVM参数:通过设置-Xms和-Xmx指定堆内存的初始大小和最大大小,避免因动态扩展导致的溢出。同时,可以通过-Xss设置线程栈的大小,防止栈溢出。 2....
Java 中的内存溢出是一种常见的错误,可能会导致程序崩溃或hang死。了解 Java 中的内存溢出原因和解决方案是非常重要的。本文将介绍 Java 中的几种常见的内存溢出和解决方案。 1.JVM Heap(堆)溢出: JVM Heap...
在Java编程中,内存溢出(Out of Memory Error,简称OOM)是一个常见的问题,它发生在程序请求的内存超过了系统能够分配的最大额度。这种情况通常会导致程序崩溃,因此理解如何解决Java程序的内存溢出至关重要。以下...
内存溢出问题在Java开发中是一个常见的问题,尤其是在使用集成开发环境如MyEclipse时,由于资源消耗较大,可能会频繁出现。本文主要讨论如何解决MyEclipse中的内存溢出问题以及相关的Java内存管理知识点。 首先,...
在日常的软件开发过程中,特别是在处理大量数据时,使用Java数据库连接(JDBC)进行数据库操作是非常常见的。然而,在处理大数据集时,如果不注意细节,很容易遇到内存溢出的问题。本文将重点讨论如何在MySQL、SQL ...
在处理高并发或者大型应用时,内存管理是关键问题,而"内存溢出"则是一个常见的性能瓶颈。内存溢出(Out of Memory,OOM)通常发生在系统无法分配足够的内存给程序运行时,这可能导致服务器崩溃或性能急剧下降。 ...
在处理Java内存溢出问题时,除了使用上述工具外,还需要理解以下几个关键概念: 1. 堆内存:Java对象主要存储在堆内存中,过大或过多的对象可能导致堆溢出。 2. 非堆内存:包括JVM自身使用的内存(如方法区、元空间...
在Java编程中,"java heap space"内存溢出是一个常见的问题,它通常发生在应用程序尝试分配超过JVM堆内存限制的对象时。这个问题对于任何Java开发者来说都至关重要,因为如果不妥善处理,可能会导致程序崩溃。以下是...