今天在书上看到一个作者提出一个问题"怎样通过编写Java代码让Jvm崩溃",我看了之后也不懂。带着问题查了一下,百度知道里面有这样一个答案:

1 package jvm;

2

3 public class Crash {

4     public static void main(String[] args) {

5

6         //Object[] o = {"abc"};初始值赋值,不会有影响。

7         Object[] o = null;

8

9         while (true) {

10             o = new Object[] { o };

11             //输出的话,jvm就不会崩溃。

12             //System.out.println(o);

13         }

14     }

15 }

程序运行十几秒之后,控制台会出现这样的错误:

Exception in thread "main" java.lang.OutOfMemoryError: Java

heap space

at jvm.Crash.main(Crash.java:10)

很明显,超出内存空间错误。

我将原程序随意改了一下,如赋初始值等,对程序无影响。

可是我将死循环中的o输出在控制台的时候,jvm居然一直都不崩,为什么输出的话,就不会超出内存空间呢?

我看来,原程序能够使Jvm崩溃,是因为死循环中,通过旧对象,不断创建出新的对象,即创造的对象是互相引用的,所以GC是不会回收它们的,造成堆栈溢出。

仿照这个例子,我写了一个简单的类,模仿例子程序中的数组,如下:

1 package jvm;

2

3 public class JvmBean {

4

5     JvmBean bean = new JvmBean(this);

6

7     public JvmBean(JvmBean bean){

8         this.bean = bean;

9     }

10 }

然后简单测试,如下:

1 package jvm;

2

3 public class MyCrash {

4

5     public static void main(String[] args) {

6         JvmBean j = null;

7         while(true){

8             j = new JvmBean(j);

9             //无论输出不输出,jvm都会崩溃

10             //System.out.println(j);

11         }

12     }

13 }

java崩溃停在崩溃代码上_通过编写Java代码让Jvm崩溃相关推荐

  1. java程序源代码如何保存到桌面_如何编写JAVA小白第一个程序

    学习上一篇文章之后,确定好JDK和环境变量都成功之后,我们来编写我们第一个java程序命名为HelloWorld.java. 上一篇文章链接:JDK下载与环境变量的安装 桌面上右击,新建一个文本文档 ...

  2. java程序中默认包含的是_在编写 Java 程序时,如果不为类的成员变量定义初始值, Java 会给出它们的默认值,下列说法中不正确的一个是( )。...

    软件Linuxkernel的版本号为2.6.39.0,其中数字为"6"代表(). 口令中的突出主音是指(). 偏心受力构件进行钢筋代换时应按()分别代换 采用提净法炮制的药物是() ...

  3. 代码整洁之道 python_代码整洁之道-编写 Pythonic 代码

    原标题:代码整洁之道-编写 Pythonic 代码 来自:Python学习开发(微信号:python3-5) 很多新手在开始学一门新的语言的时候,往往会忽视一些不应该忽视的细节,比如变量命名和函数命名 ...

  4. java爬虫代码示例_那些让你代码思维和能力有较大的提升Java源码

    来源:www.cnblogs.com/jiagou/p/9270070.html 对于学习J2EE的框架有很大的帮助,代码里使用了各种设计模式.事件机制.Java8语法.代码量也很小,web服务使用N ...

  5. java JLabel改变大小后如何刷新_到底一行java代码是如何在计算机上执行的

    不知道你是否思考过,每次我们在IDEA中右键Run Application启动主方法,假如程序运行正常,控制台也打印出了你所要打印的信息,在这个过程中你知道这台计算机上那些硬件及其软件都是以什么样的方 ...

  6. java云端开发_云端编写Java代码的方法

    云端编写Java代码的方法 通常情况下,正如云厂商和虚拟计算提供商所宣传的转移到云端是一个无缝的流程,经验却告诉我们过于猛烈地脱离内部数据中心,部署到云端是一种复杂的方式.从部署流程到方式的所有事情, ...

  7. java 代码块_详解java中的四种代码块

    在java中用{}括起来的称为代码块,代码块可分为以下四种: 一.简介 1.普通代码块: 类中方法的方法体 2.构造代码块: 构造块会在创建对象时被调用,每次创建时都会被调用,优先于类构造函数执行. ...

  8. java如何向数据库中插入数据_如何控制Java代码向数据库中插入数据

    慕哥6287543 Java程序向数据库中插入数据,代码如下:123456789101112131415161718192021222324252627282930313233343536373839 ...

  9. 代码高亮_微信公众号代码高亮美化工具 Markdown Nice

    微信公众号代码高亮美化工具 使用 Chrome 浏览器把右侧生成的页面直接拷贝到微信中即可. https://www.mdnice.com/ // 目录[TOC] 1. Markdown Nice 简 ...

  10. 用java和mysql开发网站怎么实现_如何用java开发一个网站?

    java语言和类库:java语言是支持整个java技术的底层基础,java类库是随java语言 Java 运行系统:主要指java虚拟机,负责将java与平台无关的中间代码翻译成本机的 Java ap ...

最新文章

  1. 【人尽其才】颠覆思维☞合理分配工作
  2. ACM题集以及各种总结大全(转)
  3. 论文中键入行内公式导致行间距变大的解决方案
  4. 看一名 KDE 开发者如何使用 C++17 为项目提升巨大速度
  5. J2Cache 中使用 Lettuce 替代 Jedis 管理 Redis 连接
  6. vector嵌套vector嵌套pair
  7. C#学习小记14求助一道让我头疼的C#小题
  8. java编译时注解_简单介绍 Java 中的编译时注解
  9. 4.寻找两个正序数组的中位数
  10. 产品功能树图_新版PFMEA培训之第三步功能分析,理清结构,梳理思路
  11. 基于JAVA社团管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
  12. oeasy教您玩转vim - 42 - # 剪切进入
  13. 大文件切割和大文件合并
  14. TYUT太原理工大学2022数据库考试题型大纲
  15. 干货 | 京东云弹性伸缩功能实践
  16. 顶级黑客欢乐解析:宝宝事件中人肉搜索的七种方法
  17. salt同步配置文件
  18. 软件智能:aaas系统AI众生的“世”和“界” 之21 整定问题空间和标定解决方案空间之1
  19. 用python简易编写创建窗口
  20. 相对熵(KL散度)计算过程

热门文章

  1. YII 返回值为JSON格式
  2. SQL Server2008表及字段描述信息处理示例
  3. 委托、事件--委托介绍篇
  4. 数据饕餮,盛夏旋风!天善学院SVIP冰点促最后一波!
  5. @RequestParam使用须知
  6. 直角三角形 纪中 1385 数学_斜率 英文题解
  7. 将markdown格式转化为bootstrap风格html
  8. Ubuntu下wxWidgets学生公寓管理编程,sqlite3的用法(mysql数据库),窗体,下面是部分添加和删除功能,其他功能可以联系我。。...
  9. Bitmap对象保存到bmp文件中
  10. 解决okhttp的java.lang.IllegalStateException: closed错误