本文章为看《深入理解JAVA虚拟机》的笔记

  1. JAVA堆异常溢出:
/*** Vm args:-Xms20M -Xmx20M -XX:+HeapDumpOnOutOfMemoryError* 堆的最小值参数-Xms,堆的最大值参数-Xmx* -XX:+HeapDumpOnOutOfMemoryError表示让虚拟机在出现内存异常时Dump出当前的内存对快照* java 堆内存溢出测试,深入理解java虚拟机 p51* @author Rail**/
public class HeapOutOfMemoryError {static class OutOfMemoryError{}public static void main(String[] args) {List<OutOfMemoryError> list = new ArrayList<OutOfMemoryError>();while(true){list.add(new OutOfMemoryError());}}}

运行结果:

java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid4208.hprof …
Heap dump file created [1029185391 bytes in 10.681 secs]

2.JAVA虚拟机栈和本地方法栈溢出:

1) 在Hotspot中,不区分JAVA虚拟机栈和本地方法栈。在JAVA虚拟机规范中描述了两种与之相关的异常:

  • 如果线程请求的栈深度超出了虚拟机允许的最大深度,将抛出StackOverflowError异常,测试代码:
/*** VM args:-Xss128k* -Xss128k 减小栈内存至128k* @author Rail**/
public class JavaVMStackOverFlowError {private int stackLength = 1;public void stackLeak(){stackLength++;stackLeak();}public static void main(String[] args){JavaVMStackOverFlowError sof = new JavaVMStackOverFlowError();try{sof.stackLeak();}catch(Throwable e){System.out.println("stackLength: "+sof.stackLength);throw e;}}
}

打印结果:

stackLength: 989
Exception in thread “main” java.lang.StackOverflowError
at jvm.JavaVMStackOverFlowError.stackLeak(JavaVMStackOverFlowError.java:11)

  • 如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError,测试代码:
/*** VM args:-Xss2M* 该程序执行容易死机,我的电脑运行死机两次* @author Rail**/
public class JavaVMStatckOutOfMemoryError {public void dontStop(){while(true){    }}public void stackLeakByThread(){while(true){Thread t = new Thread(new Runnable() {@Overridepublic void run() {dontStop();}});t.start();}}public static void main(String[] args) {JavaVMStatckOutOfMemoryError sofm = new JavaVMStatckOutOfMemoryError();sofm.stackLeakByThread();}}

运行结果,本人电脑运行时死机两次,未成功输出结果,在书上的输出结果为:

Exception in thread main java.lang.OutOfMemoryError:unable to create new native thread

3.方法区和运行时常量池溢出:

/*** VM args:-XX:PermSize10M -XX:MaxPermSize=10M* PermSize 方法区大小* @author Rail**/
public class RuntimeContantPoolOutOfMemoryError {public static void main(String[] args) {//保存对常量池字符串的应用,避免Full GC回收常量池的行为List<String> list = new ArrayList<String>();//10M在int的范围足够产生OutOfMemoryErrorint i = 0;while(true){list.add(String.valueOf(i++));}}}

运行结果,在jdk6及之前,常量池分配在永久代内,通过-XX:PermSize10M -XX:MaxPermSize=10M限制其大小,而:

Exception in thread “main” java.lang.OutOfMemoryError: Java heap space
at java.lang.Integer.toString(Integer.java:401)
at java.lang.String.valueOf(String.java:3087)
at jvm.RuntimeContantPoolOutOfMemoryError.main(RuntimeContantPoolOutOfMemoryError.java:17)
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize10M; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=10M; support was removed in 8.0

JAVA内存溢出异常测试相关推荐

  1. Java内存溢出异常(下)

    此篇是上一篇文章Java内存溢出异常(上)的续篇,没有看过的同学,可以先看一下上篇.本篇文章将介绍剩余的两个溢出异常:方法区和运行时常量池溢出. 方法区和运行时常量池溢出 这部分为什么会放在一起呢?在 ...

  2. Java内存溢出异常及其处理

        熟悉Java内存划分及运行的首要目的就是预防JVM抛出内存溢出相关的异常,或者说当发生这样异常是该如何排查问题,定位问题并且给出合理的解决方案,这对于开发工作以及后期维护工作的顺利进行尤为重要 ...

  3. java ppt转图片 内存溢出_Java虚拟机内存及内存溢出异常

    Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进来,墙里面的人却想出来. 不知道其他人想出来没,反正我是没想出来,为什么这个JVM的运行时内存要这样设计?. 以下内容 ...

  4. java 二维数组内存溢出_程序员:学习心得,Java内存区域,内存溢出异常

    Java 内存区域 Heap 线程公有 存放实例对象 是GC主要管理区域,因此可以更细致的划分为:新生代.老年代 再细致一点划分:Eden区.From Survivor区.To Survivor区 内 ...

  5. java 二维数组内存溢出_模拟Java内存溢出

    本文通过修改虚拟机启动参数,来剖析常见的java内存溢出异常(基于jdk1.8). 修改虚拟机启动参数 这里我们使用的是IDEA集成开发环境,选择Run/Debug Configurations 然后 ...

  6. jvm(2)-OutOfMemoryError 异常(内存溢出异常)

    [0]README 0.1)本文转自 深入理解 jvm, 旨在学习 OutOfMemoryError 异常(内存溢出异常) 的触发类型: 0)准备知识 0.1)除了程序计数器外,虚拟机内存的其他几个运 ...

  7. JVM最佳学习笔记一---Java内存区域与内存溢出异常

    2019独角兽企业重金招聘Python工程师标准>>> 前言 本笔记参照了周志明<深入理解Java虚拟机:JVM高级特性与最佳实践>第三版,读完之后受益匪浅,让我对Jav ...

  8. 写java线程导致电脑内存不足_如何写出让java虚拟机发生内存溢出异常OutOfMemoryError的代码...

    程序小白在写代码的过程中,经常会不经意间写出发生内存溢出异常的代码.很多时候这类异常如何产生的都傻傻弄不清楚,如果能故意写出让jvm发生内存溢出的代码,有时候看来也并非一件容易的事.最近通过学习< ...

  9. 《深入理解JVM.2nd》笔记(二):Java内存区域与内存溢出异常

    文章目录 概述 运行时数据区域 程序计数器 Java虚拟机栈 本地方法栈 Java堆 方法区 运行时常量池 直接内存 HotSpot虚拟机对象探秘 对象的创建 第一步 第二步 第三步 第四步 最后一脚 ...

最新文章

  1. Could NOT find SDL (missing: SDL_LIBRARY SDL_INCLUDE_DIR)
  2. 解决remove @override annotation
  3. 前后端分离项目部署(服务器或本地)
  4. 学生用计算机说明方法,15.文中多处运用了作比较的说明方法.请任选一例.说说运用这种方法的作用. 例子: 作用:...
  5. php redis 搜索,PHP+Redis有序集合(zset)实现博客园阅读排行榜功能
  6. 【图像处理】彩色图像自适应对比度增强(OpenCV实现)
  7. 服务器报告它来自digest_2020年全球服务器市场规模及竞争格局分析
  8. 【MySQL】【备份】mydumper安装与使用细节
  9. arcgis for android 无法加载本地jpg影像解决办法
  10. java正则获取内容_Java利用正则表达式提取数据的方法
  11. 基于 WebRTC 构建 Web SIP Phone
  12. 马哥linux35期,马哥Linux第五周
  13. C语言作业练习1:输入一个数判断是否为素数
  14. matlab对数组中的某一列进行排序
  15. Python—Scrapy爬取京东商城
  16. Linux下载HTTP文件
  17. handsome for Typecho主题重建备忘
  18. 洛谷[P3374] [P3368]树状数组(线段树解法)
  19. fiddler抓包 - Android 虚拟机
  20. Codeforces Round #694 (Div. 2) F. Strange Housing (贪心思维)

热门文章

  1. 彩色七彩甜美的糖果Mac高清壁纸
  2. 财务报表(支票单)金额制作
  3. 雾计算机和云计算机哪个好,怎么理解云计算和雾计算还有边缘计算
  4. html禁止qq管家弹出广告,教你两招系统自带永久关闭电脑弹窗广告、流氓软件
  5. 2021-03-25 74LS160计数器的10秒计时
  6. 硬件电路入门---电阻2
  7. 适用于非科班的深度学习/机器学习快速上手路线
  8. 呼吸衰竭护理查房PPT模板
  9. gitlab修改密码和中文页面
  10. ElasticSearch 6.1.1 通过Head插件,新建索引,添加文档,及其查询数据