今天上班时,使用ant给项目发布环境时,原因是在使用javac编译大量java源文件时,抛出了一个
java.lang.OutOfMemoryError:The system is out of resources。
在Ant中使用javac命令,抛出的java.lang.OutOfMemoryError错误和一般java应用抛出这个错误没两样。当执行JDK的javac命令,都是调用
%JAVA_HOME%\lib\tools.jar包中
com.sun.tools.javac.main.Main类。
一般出现这个问题都是虚拟机分配的内存不够用。针对Ant,我调查了一番可以通过以下两种方法解决:
1)在javac节点处设置
fork属性,同时指定
memoryinitialsize、memorymaximumsize属性。例:
<javac fork="true"
srcdir="${basedir}/src"
destdir="${basedir}/build/classes"
classpath="${project.classpath}"
memoryinitialsize="256m"
memorymaximumsize="256m">
</javac>
说明:
-fork:没有指定fork属性(默认为false),javac命令将和ant在同一个进程中执行,同时javac被分配的内存只有64MB,如果指定fork属性为true,javac命令将和ant不在同一个进程中执行,分配内存的大小将为memoryinitialsize、memorymaximumsize指定的大小。
-memoryinitialsize:javac占用的最小内存。
-memorymaximumsize:javac占用的最大内存。
2) 第二种方法不用修改build.xml文件,通过在Ant执行时,指定虚拟机的内存来解决,不过这样ant和javac还将在同一个进程中执行,具体方法在[ANT_HOME]\bin\ant.bat文件中增加set ANT_OPTS="-Xms256m -Xmx256m" 。
如果上面两种方法都不能解决,那就只能是物理内存太小,那只能有两种方法解决这个问题,其一就是最简单的方法扩大内存,其二将工程的源文件分包编译,不过这样很麻烦,但也不乏是一种解决方法。
分享到:
相关推荐
当内存不足时,不论是Ant本身还是单独的`javac`进程,都会抛出`OutOfMemoryError`。 解决此问题的方法通常涉及调整JVM的内存配置。有以下两种常见的策略: 1. **在`javac`任务中设置`fork`属性**: 当`fork`属性...
### 编译时出现java.lang.OutOfMemoryError Java heap space异常 #### 一、问题概述 在进行Java项目编译的过程中,可能会遇到`java.lang.OutOfMemoryError: Java heap space`这种异常。这类异常通常表明Java虚拟机...
在使用Eclipse集成开发环境(IDE)进行ANT编译时,有时会遇到“OutOfMemory”错误,这通常意味着ANT在尝试编译大量代码或者运行复杂构建任务时,分配给它的内存不足。为了解决这个问题,我们需要调整ANT的内存设置,...
当堆内存不足以容纳新对象时,就会抛出java.lang.OutOfMemoryError: Java heap space错误。常见的解决方法是增加-Xmx参数值以扩大堆内存的大小。除此之外,还可能是由于代码问题导致内存消耗过大,例如内存泄漏或是...
当堆内存无法满足新对象的分配需求时,就会抛出此异常。 **描述:“搜集整理关于java错误处理:java.lang.OutOfMemoryError: Java heap space”** - 描述提到了对这个问题的相关资料进行整理,这意味着该文档将...
如果直接内存不足,也会抛出 OutOfMemoryError。 在 JVM 中,理解各个运行时数据区对于优化性能和解决内存问题至关重要。首先,程序计数器是每个线程私有的,它记录了当前线程执行的字节码指令地址,是执行流程控制...
如果堆内存不足,JVM就会抛出`OutOfMemoryError`。在junrar的案例中,由于没有有效地管理内存,当解压大文件时,可能会超出堆内存的限制。 解决这个问题的关键在于优化junrar的内存使用策略。一种可能的方法是采用...
- **使用内存监控工具**:利用如VisualVM、JConsole等工具实时监控JVM内存使用情况,分析堆内存中的对象分布和生命周期,找出内存瓶颈。 - **日志记录与分析**:开启详细的垃圾回收日志,通过分析日志了解垃圾回收的...
- **`NoClassDefFoundError`**:类定义在编译时存在但运行时找不到时抛出。 - **`NoSuchFieldError`**:找不到指定字段时抛出。 - **`NoSuchMethodError`**:找不到指定方法时抛出。 - **`OutOfMemoryError`**:JVM...
- 栈帧在方法调用时入栈,方法结束时出栈,如果线程请求的栈深度超过最大允许值,会抛出StackOverflowError;如果堆内存不足以创建新的栈帧,会抛出OutOfMemoryError。 3. **本地方法栈**: - 与虚拟机栈类似,但...
这个问题在本案例中发生在网店系统的升级后,经过压力测试,系统突然崩溃,抛出了`OutOfMemoryError`。这个错误可能是由于多种原因引起的,包括内存泄漏、堆内存分配不当、栈溢出或本地内存不足等。 首先,从描述中...
堆的空间大小不满足时将抛出OutOfMemoryError异常。 方法区用于存储已被虚拟机加载的类信息、常量、静态变量、JIT编译后的代码等数据。Java虚拟机规范将方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做Non-...
若动态扩展栈时无法分配更多内存,抛出OutOfMemoryError。 3. **本地方法栈(Native Method Stacks)** - 功能类似于虚拟机栈,但服务于Java的Native方法。 - 实现细节由具体虚拟机决定,可能与虚拟机栈合并。 -...
- 当程序创建新的对象或者分配内存时,如果无法在现有的堆内存中找到足够的连续空闲内存块,则会抛出此异常。 2. **原因分析**: - **内存泄漏**:程序中有未被释放的对象引用,导致垃圾回收器无法回收这些对象所...
27. **OutOfMemoryError**:内存不足错误,当Java虚拟机无法分配更多内存时抛出。 28. **StackOverflowError**:堆栈溢出错误,当递归调用过深导致堆栈空间耗尽时抛出。 29. **ThreadDeath**:线程结束,当线程被...
java.lang.OutOfMemoryError是Java虚拟机(JVM)中的一种常见错误,发生这种错误时,JVM将无法继续运行,程序将崩溃。这种错误的出现通常是由于Jvm的内存不足或内存泄露导致的。 出现java.lang.OutOfMemoryError的...
如果栈大小可动态扩展,在扩展内存时无法申请到足够的空间,则会抛出OutOfMemoryError异常。 与虚拟机栈类似,本地方法栈服务于执行native方法的线程。在HotSpot虚拟机中,虚拟机栈和本地方法栈其实是同一块区域。...
### 解决OutOfMemoryError内存溢出 在Java开发过程中,我们经常会遇到`java.lang.OutOfMemoryError`(简称OOM)的问题。这个问题的发生主要是由于JVM内存不足或程序中存在内存泄漏所引起的。本文将深入探讨OOM产生...