<html>
<head>
<title>Understand the OutOfMemoryError Exception(理解内存溢出翻译)</title>
<basefont face="微软雅黑" size="2" />
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="exporter-version" content="Evernote Windows/307027 (zh-CN, DDL); Windows/10.0.0 (Win64);"/>
<style>
body, td {
font-family: 微软雅黑;
font-size: 10pt;
}
</style>
</head>
<body>
<a name="1362"/>
<h1>Understand the OutOfMemoryError Exception(理解内存溢出翻译)</h1>
<div>
<span><div><div> 内存泄漏的常见迹象就是<span style="font-size: 12px; color: rgb(68, 68, 68); font-family: "Courier New", Monaco, Courier, monospace;">java.lang.OutOfMemoryError异常。这个异常常见抛出的情况为:当需要分配对象的时候,堆空间不足。在这种情况下,垃圾收集器无法获取一个有效的空间来容纳一个新的对象,并且堆的大小也不能够进行扩展。</span></div><div><span style="font-size: 12px; color: rgb(68, 68, 68); font-family: "Courier New", Monaco, Courier, monospace;">另外,这种错误也有可能发生在native memory(操作系统内存)没有足够的空间装载一个java class的情况.还有一个比较少见的例子,当垃圾收集器耗费了大量的时间,但是仅仅只有很少的内存被释放。</span></div><div><span style="font-size: 12px; color: rgb(68, 68, 68); font-family: "Courier New", Monaco, Courier, monospace;"> 当一个</span><span style="font-size: 12px; font-family: Arial, Helvetica, FreeSans, Luxi-sans, "Nimbus Sans L", sans-serif;"> </span><span style="font-size: 12px; color: rgb(68, 68, 68); font-family: "Courier New", Monaco, Courier, monospace;">java.lang.OutOfMemoryError异常被抛出,相应的堆栈信息也会打印出来。</span></div><div><span style="font-size: 12px; color: rgb(68, 68, 68); font-family: "Courier New", Monaco, Courier, monospace;"> <span style="font-size: 12px; color: rgb(68, 68, 68); font-family: "Courier New", Monaco, Courier, monospace;">java.lang.OutOfMemoryError也可能在native library code请求分配空间时,空间不足的情况下发生(例如,交换空间不足(swap space))</span></span></div><div><span style="font-size: 12px;"><span style="font-size: 12px; color: rgb(68, 68, 68); font-family: "Courier New", Monaco, Courier, monospace;"> 诊断一个<span style="font-size: 12px; color: rgb(68, 68, 68); font-family: "Courier New", Monaco, Courier, monospace;">java.lang.OutOfMemoryError的异常最先要做的是确定异常产生的原因。这个原因是因为java堆满了或者是因为native堆满了?</span></span></span></div><ol><li><div><span style="color: rgb(68, 68, 68); font-weight: bold; font-size: 10pt;">Exception in thread thread_name: java.lang.OutOfMemoryError: Java heap space</span></div></li><ol><li><div>造成的原因:java无法给新的对象分配空间。这种错误不一定是内存泄漏造成的。</div></li><ol><li><div>可能是配置原因:当应用被设置了一个特殊的堆容量(或者是默认的容量),但是这个容量又不足以支撑这个应用。</div></li><li><div>可能是对象的引用一直未释放,这使它在垃圾回收的时候无法被清理。</div></li><li><div>过度使用finalizers。当一个类拥有一个finalize 方法,GC的时候该类型的对象不会被垃圾回收器清理掉。相反的是,垃圾回收完毕后,这个对象会进入队列等待被回收,这个回收操作会发生在后面不确定的时间。在Oracle Sun的实现中,回收是由一个守护线程来执行的,该守护线程服务来处理队列中的对象 。当回收线程的速度跟不上对象入队的速度的时候,就可能会导致堆内存被占满,从而抛出异常。还有一种情况是,当应用创建一个高优先级的线程(注:优先级大于守护线程),这会导致队列增长的速度大于守护线程处理的速度</div></li></ol></ol><li><div><span style="font-weight: bold;">Exception in thread thread_name: java.lang.OutOfMemoryError: GC Overhead limit exceeded(GC 开销超出限额了)</span></div></li><ol><li><div>造成的原因:当完成一次垃圾收集,如果程序花费了98%的时间在垃圾回收上,但是回收的堆空间小于2%,并且已经连续做过5次垃圾回收的操作,然后这个异常将会被抛出。这个异常通常情况下抛出的原因是:存活的数据几乎占满了java堆的空间导致空闲的空间太小。</div></li><li><div>解决方法:增大堆的空间。该异常可以通过命令行进行调整: -XX:-UseGCOverheadLimit(注:关闭这个参数仅仅是不抛出这种异常,而不是不抛异常)</div></li></ol><li><div><span style="font-weight: bold;">Exception in thread thread_name: java.lang.OutOfMemoryError: Requested array size exceeds VM limit (请求的数组大小超过vm的限制)</span></div></li><ol><li><div>例如:当应用需要分配一个512M的数组,但是最大堆内存只有256M</div></li><li><div>解决方法</div></li><ol><li><div>扩大堆内存</div></li><li><div>可能是程序有bug,要检查请求分配的数组大小是否合理</div></li></ol></ol><li><div><span style="font-weight: bold;">Exception in thread thread_name: java.lang.OutOfMemoryError: Metaspace</span></div></li><ol><li><div>造成的原因:metaspace中class metadata相关的空间被耗尽。metaspace中class metadata的空间受限于MaxMetaSpaceSize。当class metadata所需要的内存超过MaxMetaSpaceSize,该异常会抛出</div></li><li><div>解决方法:</div></li><ol><li><div>增大MaxMetaSpaceSize</div></li><li><div>由于MetaSpace和java堆都是分配相同的地址空间中(注:无论是堆还是非堆,大家都是使用的痛一个物理机器上的内存),当减少Java堆的容量的时候,MetaSpace将获得更多的使用空间。如果Java堆有多余的空间,这是一个折中的方法。</div></li></ol></ol><li><div><span style="font-weight: bold;">Exception in thread thread_name: java.lang.OutOfMemoryError: request size bytes for reason. Out of swap space?</span></div></li><ol><li><div>造成的原因:native内存分配失败或者接近耗尽,一般是发起内存分配的模块抛出这个异常</div></li><li><div>解决方法:当该异常信息抛出的时候,VM会调用fata error(致命错误)处理机制(生成一个包含线程、进程、系统信息的日志文件)。在native内存耗尽的情况下,日志中的堆内存以及内存映射信息(memory map)可能是有用的。</div></li></ol><li><div><span style="font-weight: bold;">Exception in thread thread_name: java.lang.OutOfMemoryError: Compressed class space</span></div></li><ol><li><div>造成的原因:在64位平台上一个class metadata 的指针可以用32位来表示(通过UseCompressedOops).它是通过UseCompressedClassPointers命令来控制的。当UseCompressedClassPointers使用时,classmetadata的可用内存将等于CompressedClassSpaceSize。当UseCompressedClassPointers所需要的空间超过了CompressedClassSpaceSize,这个异常就会被抛出。</div></li><li><div>解决方法:增大CompressedClassSpaceSize。备注:<span style="font-size: 12px; color: rgb(68, 68, 68); font-family: "Courier New", Monaco, Courier, monospace;">CompressedClassSpaceSize的是有一个调整范围的。比如说 -XX:<span style="font-size: 9pt; color: rgb(68, 68, 68); font-family: "Courier New";">CompressedClassSpaceSize=4g,超出了限制的范围,将会返回一个 <span style="color: rgb(68, 68, 68); font-family: "Courier New"; font-size: 9pt;">CompressedClassSpaceSize of 4294967296 is invalid; must be between 1048576 and 3221225472(</span><span style="font-size: 9pt; color:
没有合适的资源?快使用搜索试试~ 我知道了~
Java生产环境下性能监控与调优详解课程笔记(完整版)
共46个文件
html:37个
png:9个
5星 · 超过95%的资源 需积分: 50 173 下载量 167 浏览量
2018-08-20
17:40:18
上传
评论 5
收藏 1.32MB RAR 举报
温馨提示
https://coding.imooc.com/learn/list/241.html这个课程的笔记,私人整理的,挺好的
资源推荐
资源详情
资源评论
收起资源包目录
Java生产环境下性能监控与调优详解课程笔记(完整版).rar (46个子文件)
课程笔记(完整版)
Parallel Collector.html 2KB
垃圾收集器(GC调优,官方指南,读个三五遍)_files
Image.png 368KB
一、启动普通的jar程序.html 6KB
jvm 内存结构(1.8).html 614B
JVM_index.html 4KB
基于JDK命令行工具的监控(需要在linux下,部分在windows下无效).html 2KB
字节码指令.html 3KB
jstat(查看JVM统计信息,1.8以官方文档为准).html 3KB
垃圾收集器(GC调优,官方指南,读个三五遍).html 3KB
常用文档英文.html 956B
常用代码优化方法_files
Image.png 270KB
jstack(死循环引起的cpu负载飙高或者死锁).html 923B
Tomcat 监控与调优_files
Image.png 24KB
Btrace(只能在本机执行).html 7KB
nginx优化.html 4KB
nginx-rrd图形化监控.html 4KB
nginx 安装.html 4KB
GC日志格式详解.html 1KB
如何导出内存映像文件.html 873B
G1 collector (jdk 1.7 +).html 4KB
ngx_http_stub_status_module(用于监测连接信息).html 1KB
psi-probe监控(tomcat配置同tomcat-manager 的配置).html 1KB
Understand the OutOfMemoryError Exception(理解内.html 13KB
mat(eclipse工具,判断内存溢出).html 898B
tomcat优化.html 1KB
Tomcat manager 配置.html 4KB
CMS Collector.html 2KB
GC调优步骤.html 655B
常用代码优化方法.html 5KB
String Constant Variable.html 635B
JVisualVm 远程连接VirtualBox(linux 系统 suse )_files
Image.png 12KB
Image [1].png 20KB
jvm 内存结构(1.8)_files
Image.png 112KB
JVisualVM的可视化监控(jdk自带).html 3KB
Tomcat manager 配置_files
Image.png 60KB
ngxtop监控请求信息.html 2KB
垃圾回收算法.html 2KB
JVM的内存结构(JDK1.8,查看指令 jstat -gc).html 870B
JVM字节码指令.html 869B
JVisualVm 远程连接VirtualBox(linux 系统 suse ).html 3KB
ParallelGC调优.html 1KB
java线程状态.html 688B
查看JVM运行时参数.html 2KB
Tomcat 监控与调优.html 2KB
JVM字节码指令_files
Image.png 262KB
Image [1].png 201KB
共 46 条
- 1
sethcss
- 粉丝: 8
- 资源: 28
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页