Java.lang.OutOfMemoryError是什么

Java.lang.OutOfMemoryError是什么

ID:37916027

大小:156.17 KB

页数:6页

时间:2019-06-02

Java.lang.OutOfMemoryError是什么_第1页
Java.lang.OutOfMemoryError是什么_第2页
Java.lang.OutOfMemoryError是什么_第3页
Java.lang.OutOfMemoryError是什么_第4页
Java.lang.OutOfMemoryError是什么_第5页
资源描述:

《Java.lang.OutOfMemoryError是什么》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、ava.lang.OutOfMemoryError是什么Java.lang.OutOfMemory是java.lang.VirtualMachineError的一个子类,当Java虚拟机中断,或是超出可用资源时抛出。很明显,OutOfMemory是在Java虚拟机资源耗尽的情况下无法分配对象时抛出的。不过很不幸,Java的说明文档并没有对该异常进行进一步的阐述。Java虚拟机包括六个不同的运行时数据区域(内存区域):1.程序计数器(ProgramCounterRegister)2.Java虚拟机栈(JavaVMStack)3.Java堆(Heap)4.方

2、法区(JavaVMMethodArea)5.常量池(RuntimeConstantPool)6.本地方法栈(NativeMethodStack)程序计数器又称为PC寄存器,是存放当前正在被执行的Java字节码操作指令的地址。(这里加些说明:对于一个运行中的Java程序而言,其中的每个线程都有它自己的PC(程序计数器)寄存器,它是在该线程启动时创建的。PC寄存器的大小是一个字长,因此它既能够持有一个本地指针,也能够持有一个returnAddress.)Java虚拟机栈是由栈帧(stackframe)组成,帧则是用来存储线程在执行过程中的参数,返回值,以及中

3、间结果等。如果在没有足够的内存给JavaVM栈,或者没足够的内存来生成新的线程时,Java虚拟机将抛出OutOfMemoryError。Heap是用来存储Java类实例或数组的。当没有足够的内存给新生实例或数组时,Java虚拟机将抛出OutOfMemoryError。方法区则是用来存储类型相关的信息,如该类型的常量池,字段或方法信息。当方法区没有足够内存时也会出现OutOfMemoryError。(这里加些说明:类型中的类(静态)变量同样也是存储在方法区中,一个到ClassLoader的引用,一个到Class类的引用)运行时常量池包括字段引用以及常量。当

4、常量池没有足够内存可用时,同样会抛出OutOfMemoryError异常。本地方法区是由一些C/C++写的方法,给予JVM的一些方法支持。同理,当没有可用内存时也会抛出OutOfMemoryError异常。您可能看到一个与OutOfMemoryError完全不一样的异常:StackOverflowError。该异常的抛出则是当本地内存栈或者Java虚拟机栈超出配置大小时抛出。在大多数IBM的Java虚拟机中,-Xmso命令参数可以控制操作系统栈线程和本地线程栈大小,-Xss参数可以控制Javs虚拟机的线程栈大小。在一些如SunHotSpot的JVM厂商,

5、Java方法通过C/C++本地指令共享栈帧.–Xss可以为一个线程配置最大内存,该值的默认值和平台,以及具体JVM的实现厂商有关,但一般都在256K-1024K的大小.请参考你的JVM说明文档。在另外文章中我们会涉及更多关于StackOverflowError的东西。现在,我们了解了哪些内存区域会引起java.lang.OutOfMemory,让我们来看看这个实际错误信息,该异常像以下哪种,我们又该如何去处理它们呢?Java代码1.Java.lang.OutOfMemoryError: Requested array size exceeds VM li

6、mit   Java.lang.OutOfMemoryError:RequestedarraysizeexceedsVMlimit该例外表明有一数组请求一个超过VM预先分配的内存大小的内存值。如果我们遇到该类异常我们该怎么办?我们需要检出源码,以确保确实没有动态或静态的创建如此之大的数组。不过还好,最后版本的VM一般不会有这样的限制。Java代码1.Java.lang.OutOfMemoryError : PermGen space  Java.lang.OutOfMemoryError:PermGenspace当JavaHeap中的Perm内存区满的时

7、候,JVM会抛出上面的一样的异常。在一些Java虚拟机中,如Sun公司的HotSpotJava虚拟机,一块存储类对象或方法对象的专有内存称为永久一代(又称永久区域)。我们可以想象一下IBM建模和分析工具的JavaGC的perm区使用方法。在图中,我们看到”MaxPerm”和”UsedTenured”两按钮显示了Perm区的使用方法和它的最大长度。我们可以看到Perm区使用的总内存已经到了它的最大化上限,这就是为什么我们会得到java.lang.OutOfMemoryError:PermGenSpace的异常.假使没有内存泄露,我们可以通过调整-XX:Ma

8、xPermSize参数选项来增加Perm区的最大化上限值。比如这样:-XX:Ma

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。