首页 / 知识
关于java:你如何崩溃JVM?
2023-04-15 12:01:00

How do you crash a JVM?我在读一本关于编程技巧的书,在书中作者问被采访者,"你是如何使一个JVM崩溃的?"我想你可以通过编写一个无限的for循环来做到这一点,最终会耗尽所有的内存。 有人知道吗? 我不会称抛出OutOfMemoryError或StackOverflowError为崩溃。这些只是正常的例外。要使虚拟机真正崩溃,有三种方法: 对于最后一个方法,我有一个简短的示例,它可以很好地使Sun Hotspot VM崩溃:
这会导致GC中的堆栈溢出,因此您将不会得到StackOverflowError,而是会遇到包括hs_err*文件在内的真正崩溃。 JNI。实际上,对于JNI,崩溃是默认的操作模式。你必须加倍努力才能使它不致崩溃。 本:使用 </P >
这是一级的黑启动路径,因为它是用代码运行的信任,所以这类: </P >
我在这里跑了,因为我也在为这个问题passionate programmer,由乍得福勒。为那些谁不有接入到一个拷贝的问题是,作为一类的过滤器/构试验的候选interviewing为一位"Java programmers requiring真的好。" </P > specifically,他asks: </P >
我已经在Java的程序升温方法过了十五年,我发现这个问题都被puzzling和unfair。要为他人的pointed门诊,Java语言作为一managed自行设计的,在不到specifically崩溃。大学课程是永远的JVM有错误,但是: </P >
如有上述一些本土人,通过JNI代码是一个死的方式对一个LRU的崩溃。但在上述的作者specifically纯Java的,所以这样的情况。 </P > 另一选择将是对饲料的LRU bogus字节的代码;它的容易够到把二进制数据到一个.class一些垃圾文件,运行它的LRU和问到: </P >
有这个数?I T均在JRE本身还没有crashed;它的detected这份报告的bogus代码,它和exited。 </P > 本种的叶部与美国最明显的解决方案是在这样的blowing通过递归的运行栈,出的堆分配存储器通过面向普throwing 所以叫什么来的?我会听到什么,作者对《真的爱真的有在我作为一个正确的解决方案。 </P > 更新:Chad Fowler responded这里。 </P > PS:它的一个伟大的书,否则。。。。。。。它在道德上的支持,而屈体的方法学习Ruby。 </P > 将这个代码的JVM崩溃在讨厌的方法 </P >
我的孩子tried时这将做它: </P >
第一部分产生的日志文件: </P >
完美的JVM实现永远不会崩溃。 要使JVM崩溃,除了JNI之外,还需要在VM本身中找到一个bug。无限循环只消耗CPU。无限分配内存只会导致构建良好的JVM中出现内存不足错误。这可能会给其他线程带来问题,但是一个好的JVM仍然不应该崩溃。 如果您可以在虚拟机的源代码中找到一个bug,例如,在虚拟机实现的内存使用中导致一个分段错误,那么您实际上可以使它崩溃。 如果你想使用的Java虚拟机崩溃在太阳下面的JDK 1.6 _或小于23: </P >
这是由于到一个错误在Sun JDK -也发现在openjdk。 这是从Oracle的定点_ 24 onwards JDK 1.6。 </P > 取决于你所说的撞车是什么意思。 您可以执行无限递归,使其耗尽堆栈空间,但这将"优雅地"崩溃。您将得到一个异常,但JVM本身将处理所有事情。 也可以使用JNI调用本机代码。如果你不做得恰到好处,那么你可以让它很难崩溃。调试这些崩溃是"有趣的"(相信我,我必须写一个大的C++ DLL,我们从一个签名的Java applet调用)。:) Jon Meyer的JAVA虚拟机有一系列字节码指令的例子,这些指令导致JVM成为核心转储。我找不到这本书的副本。如果外面有人有,请查一下并把答案贴出来。 最接近单个"答案"的是 shortest)尽可能的方式: </P >
任何程序可以破五金的崩溃。有一次我的应用程序的崩溃是一reproducably特异性,而其他机器的运行机制与精细的setup一样精确。这机器有turns门诊faulty RAM。 </P > 是winxpsp2 W / wmp10 jre6.0 _ 7 </P > desktop.open(uritoaviormpgfile) </P > 这一causes spawned线对throw安crashes hotspot)和未被发现的 </P > ymmv </P > 但不到一个closer的崩溃,崩溃的答案比这里利用 你可以停止在JVM中呼唤 </P > 根据《文档: </P >
如果将崩溃定义为进程中止,因为未处理的情况(即没有Java异常或错误),那么这不能从Java内部完成(除非您有权限使用Sun.MISC不安全类)。这就是托管代码的全部要点。 本机代码中的典型崩溃是通过取消引用指向错误内存区域(空地址或错误对齐)的指针而发生的。另一个来源可能是非法的机器指令(操作码)或来自库或内核调用的未处理信号。如果JVM或系统库中有bug,则两者都可以触发。 例如,jitted(生成)代码、本机方法或系统调用(图形驱动程序)可能会出现导致实际崩溃的问题(使用zip函数而内存不足时,很常见会发生崩溃)。在这些情况下,JVM的崩溃处理程序将启动并转储状态。它还可以生成一个操作系统核心文件(Windows上的Watson博士和*nix上的core dump)。 在Linux/Unix上,通过向正在运行的进程发送信号,您可以轻松地使JVM崩溃。注意:您不应该对此使用 这里是一个详细的解释了什么是核心dump(即今天causes JVM崩溃): http:/ / / / viewcontent.do kb.adobe.com自动化?externalid TN = _ 17534 </P > JNI是一个大crashes来源。你可以使用接口的jvmti崩溃也从那被需求的书面在C / C + +为好。 </P > 如果你想对你要运行的内存pretend出你能做的 </P >
我知道一对夫妇的方式,因为JVM dump文件中的一个本地方法误差的呼唤,这是定制的,但它可能在你不知道如何最好的去做这个。); </P > 如果您创建一个线程进程,它无限地生成更多的线程(这将生成更多的线程,这…),那么最终会在JVM本身中导致堆栈溢出错误。
这给了我输出(5分钟后,注意你的内存)
shortest???????对机器人的使用Ctrl +级触发开关。当我发现这对我是trying Close My不闭合(控制台程序,它有好的"境"functionality)。 </P > 我现在做它,但不entirely怎么死的…………………Java虚拟机(-):有时和我的应用程序是完全disappear)。嗯,thrown logged错误,一无所有。爱情不是从工作到运行在instantly与NO的预警。 </P > 这算吗?
它只适用于Linux和Java 9。 由于某种原因,我不明白, 如果将无限for循环更改为对同一函数的递归调用,则会出现堆栈溢出异常:
如果一个崩溃的那是什么interrupts JVM /程序从正规termination安,当时的联合国handled EXCEPTION能做这个。 </P >
所以,它是什么depends type of崩溃?!!!!!!! </P > |
最新内容
相关内容
linux怎么看内存命令?
linux怎么看内存命令?,系统,情况,信息,命令,内存,工具,发行,数据,表示,内容,linux查看CPU核数和内存大小命令?首先执行top命令,如下图中内容所linux历史命令内存?
linux历史命令内存?,系统,情况,信息,数据,命令,内存,文件,磁盘,历史,内容,Linux系统中的内存清理和释放命令归纳第一步:先执行sync命令 sync sylinux查内存空间命令?
linux查内存空间命令?,系统,情况,信息,数据,内存,工具,命令,表示,方法,内容,Linux命令行查看内存1、cat /proc/meminfo查看linux系统内存大小linux中看栈内存命令?
linux中看栈内存命令?,系统,情况,信息,地址,数据,分析,命令,内存,工具,环境,linux可以查看内存使用的命令1、linux查看内存使用情况的命令是dflinux循环命令大全?
linux循环命令大全?,工作,地址,系统,命令,工具,代码,目录,连续,环境,管理,Linux命令大全1、Linux命令大全以下是一些常用的 Linux 命令:ls:列出循环执行linux命令?
循环执行linux命令?,工具,系统,名称,代码,第一,环境,位置,数字,脚本,变量,Linux的shell脚本for循环怎么调用位置变量1、linux shell中的变量一linux活动内存命令?
linux活动内存命令?,系统,情况,信息,命令,地方,地址,电脑,工具,位置,单位,详解Linux中监控CPU与虚拟内存运行信息的命令用法1、运行 top 命令linux的查看内存命令?
linux的查看内存命令?,情况,系统,信息,电脑,状态,工具,内存,命令,数据,总量,Linux下怎么查看内存使用情况和CPU利用率?在电脑中进入Linux操作linux循环复制命令?
linux循环复制命令?,系统,文件,命令,目录,地址,源文件,文件夹,目标,文件名,路径,linux下怎么把一个文件复制到多个文件夹里可以使用cp命令来实linux下内存调整命令?
linux下内存调整命令?,系统,情况,地址,工具,总量,总额,管理,内存,机制,内核,正确理解linux运行内存过高的问题以及free命令使用命令free -m来linux内存大小命令?
linux内存大小命令?,系统,情况,电脑,信息,工具,状态,命令,内存,环境,分析,Linux命令行查看内存1、cat /proc/meminfo查看linux系统内存大小的linux内存命令大全?
linux内存命令大全?,地址,系统,信息,工作,命令,情况,代码,分析,数据,工具,[Linux]gdb查看内存区命令1、命令缩写是q,退出gdb。gdb调试运行程序