惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 【当耐特】
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Y
Y Combinator Blog
D
DataBreaches.Net
Google DeepMind News
Google DeepMind News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
云风的 BLOG
云风的 BLOG
Recorded Future
Recorded Future
I
InfoQ
L
LangChain Blog
Stack Overflow Blog
Stack Overflow Blog
Recent Announcements
Recent Announcements
宝玉的分享
宝玉的分享
Martin Fowler
Martin Fowler
J
Java Code Geeks
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
A
About on SuperTechFans
人人都是产品经理
人人都是产品经理
G
Google Developers Blog
大猫的无限游戏
大猫的无限游戏
C
Cybersecurity and Infrastructure Security Agency CISA
Know Your Adversary
Know Your Adversary
MongoDB | Blog
MongoDB | Blog
T
Tor Project blog
The Register - Security
The Register - Security
H
Help Net Security
Cisco Talos Blog
Cisco Talos Blog
P
Privacy & Cybersecurity Law Blog
NISL@THU
NISL@THU
P
Palo Alto Networks Blog
B
Blog RSS Feed
Latest news
Latest news
T
Threat Research - Cisco Blogs
The Hacker News
The Hacker News
C
Cisco Blogs
P
Privacy International News Feed
T
The Exploit Database - CXSecurity.com
V
Vulnerabilities – Threatpost
S
Schneier on Security
P
Proofpoint News Feed
Schneier on Security
Schneier on Security
www.infosecurity-magazine.com
www.infosecurity-magazine.com
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
AI
AI
Google Online Security Blog
Google Online Security Blog
H
Hacker News: Front Page
N
News and Events Feed by Topic
W
WeLiveSecurity

博客园 - JAVA是老婆

今天来给智商充值 关于Java8函数式编程你需要了解的几点 【实战Java高并发程序设计 7】让线程之间互相帮助--SynchronousQueue的实现 【实战Java高并发程序设计6】挑战无锁算法:无锁的Vector实现 【实战Java高并发程序设计 5】让普通变量也享受原子操作 【实战Java高并发程序设计 4】数组也能无锁:AtomicIntegerArray 【转】成为Java顶尖程序员 ,看这10本书就够了 【实战Java高并发程序设计 3】带有时间戳的对象引用:AtomicStampedReference 【实战Java高并发程序设计 2】无锁的对象引用:AtomicReference 一图搞定【实战Java高并发程序设计】 【实战Java高并发程序设计 1】Java中的指针:Unsafe类 如何提高Java并行程序性能?? 《实战Java虚拟机》,最简单的JVM入门书,京东活动,满200就减100了,该出手了 看JVM就推荐这本书 【Java】实战Java虚拟机之五“开启JIT编译” 实战Java虚拟机之四:提升性能,禁用System.gc() ? 实战Java虚拟机之三“G1的新生代GC” 实战Java虚拟机之二“虚拟机的工作模式” 实战java虚拟机的学习计划图(看懂java虚拟机)
实战Java虚拟机之一“堆溢出处理”
JAVA是老婆 · 2015-04-02 · via 博客园 - JAVA是老婆

从今天开始,我会发5个关于java虚拟机的小系列:

下面说说【实战Java虚拟机之一“堆溢出处理”】

在Java程序的运行过程中,如果堆空间不足,则有可能抛出内存溢出错误(Out Of Memory),简称为OOM。如下文字显示了典型的堆内存溢出:

  1. Exception in thread “main” java.lang.OutOfMemoryError: Java heap space  
  2. at geym.zbase.ch3.heap.DumpOOM.main(DumpOOM.java:20)  


一旦发生这类问题,系统就会被迫退出。如果发生在生产环境,可能会引起严重的业务中断。为了能够不断改善系统,避免或减少这类错误的发生,需要在发生错误时,获得尽可能多的现场信息,以帮助研发人员排查现场问题。Java虚拟机提供了参数-XX:+HeapDumpOnOutOfMemoryError,使用该参数,可以在内存溢出时导出整个堆信息。和它配合使用的还有-XX:HeapDumpPath,可以指定导出堆的存放路径。

【示例3-4】以下代码合计分配了25M内存空间。

  1. public class DumpOOM {  
  2.  public static void main(String[] args) {  
  3.  Vector v=new Vector();  
  4.   for(int i=0;i<25;i++)  
  5.    v.add(new byte[1*1024*1024]);  
  6.  }  
  7. }  

 使用如下参数执行上述代码:

-Xmx20m -Xms5m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump

显然20M堆空间不足以容纳25M内存,系统比如发生内存溢出,在发生错误后,控制台输出如下:

  1. java.lang.OutOfMemoryError: Java heap space  
  2. Dumping heap to d:/a.dump …  
  3. Heap dump file created [23067302 bytes in 0.160 secs]  
  4. Exception in thread “main” java.lang.OutOfMemoryError: Java heap space  
  5. at geym.zbase.ch3.heap.DumpOOM.main(DumpOOM.java:19)  


可以看到,虚拟机将当前的堆导出,并保存到D:/a.dump文件下。使用MAT等工具打开该文件进行分析,如图所示,可以很容易地找到这些byte数组和保存它们的Vector对象实例。有关MAT等工具的使用,可以参阅《实战Java虚拟机-jvm故障诊断与性能优化》第7章。

jvm1

除了在发生OOM时可以导出堆信息外,虚拟机还允许在发生错误时执行一个脚本文件。该文件可以用于奔溃程序的自救、报警或者通知,也可以帮助开发人员获得更多的系统信息,如完整的线程转存(即Thread Dump或者Core Dump)文件。

这里给出一个在发生OOM时导出线程转存的例子。准备printstack.bat脚本如下:

D:/tools/jdk1.7_40/bin/jstack -F %1 > D:/a.txt

以上脚本将会导出给定Java虚拟机进程的线程信息,并保存在D:/a.txt文件中。

使用如下参数执行上述代码:

-Xmx20m -Xms5m  “-XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p”  -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump

在程序异常退出时,系统D盘下会生成新文件a.txt,里面保存着线程转存信息。本例中,文件路径“D:/tools/jdk1.7_40”为笔者的JDK按照目录,读者可以替换成自己的JAVA_HOME目录,进行尝试。

《实战Java虚拟机》一书Q交流群:397196583