- 浏览: 204092 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
Prepared:
Hadoop的几个明显缺点 -
CSunDNan:
...
openjdk jvm 方法字节码执行过程 -
幻影之蚀:
...
mysql 源码分析2 源码调试环境建立 -
shukongchengje:
紧急呼唤楼主,mysql代码从哪里弄?官网wiki上看的一头雾 ...
mysql源码分析 整体架构 -
yeshaoting:
好文章.不介意的话转载了.
jvm 字节码中文含义
关于JVM的一个常识是:如果对象被意外地持有很容易造成内存泄漏,而如果同时又在不停地生成新对象,就有很大的机率造成内存溢出。通常情况下,这种溢出会导致JVM抛出OutOfMemoryError,然后JVM挂起。
可是来试试下面的代码,真是让人有点诧异,分别在JDK1.4、JDK5、JDK6上都表现一致。
package crash;
public class JVMCrashTest {
public static void main(String[] args) {
try {
testCrash();
} catch (Throwable t) {
t.printStackTrace();
System.out.println("catch an exception! I'm dead!");
}
}
/**
* JVM挂掉,core dump
*/
static void testCrash() {
Object[] o = null;
int line = 0;
while (true) {
o = new Object[] { o };
line++;
if (line % 1000 == 0) {
System.out.println(line);
}
}
}
}
没有机会抓异常,JVM直接Crash。Windows上会有hs_err日志产生,好一个EXCEPTION_STACK_OVERFLOW。Linux上面连日志都没有,直接segment fault。
static testCrash()V
L0
LINENUMBER 13 L0
ACONST_NULL
CHECKCAST [Ljava/lang/Object;
ASTORE 0
L1
LINENUMBER 14 L1
ICONST_0
ISTORE 1
L2
LINENUMBER 15 L2
NEW java/lang/Object
DUP
INVOKESPECIAL java/lang/Object.<init>()V
ASTORE 2
L3
LINENUMBER 17 L3
FRAME APPEND [[Ljava/lang/Object; I java/lang/Object]
ICONST_1
ANEWARRAY java/lang/Object
DUP
ICONST_0
ALOAD 0
AASTORE
ASTORE 0
L4
LINENUMBER 19 L4
IINC 1 1
L5
LINENUMBER 20 L5
ILOAD 1
SIPUSH 1000
IREM
IFNE L3
L6
LINENUMBER 21 L6
GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
ILOAD 1
INVOKEVIRTUAL java/io/PrintStream.println(I)V
L7
LINENUMBER 16 L7
FRAME SAME
GOTO L3
L8
LOCALVARIABLE o [Ljava/lang/Object; L1 L8 0
LOCALVARIABLE line I L2 L8 1
LOCALVARIABLE a Ljava/lang/Object; L3 L8 2
MAXSTACK = 4
MAXLOCALS = 3
static testCrash()V
L0
LINENUMBER 13 L0
ACONST_NULL
CHECKCAST [Ljava/lang/Object;
ASTORE 0
L1
LINENUMBER 14 L1
ICONST_0
ISTORE 1
L2
LINENUMBER 15 L2
NEW java/lang/Object
DUP
INVOKESPECIAL java/lang/Object.<init>()V
ASTORE 2
L3
LINENUMBER 24 L3
ICONST_1
ANEWARRAY java/lang/Object
DUP
ICONST_0
ALOAD 0
AASTORE
ASTORE 0
L4
LINENUMBER 25 L4
RETURN
L5
LOCALVARIABLE o [Ljava/lang/Object; L1 L5 0
LOCALVARIABLE line I L2 L5 1
LOCALVARIABLE a Ljava/lang/Object; L3 L5 2
MAXSTACK = 4
MAXLOCALS = 3
static testCrash()V
L0
LINENUMBER 13 L0
ACONST_NULL
CHECKCAST [Ljava/lang/Object;
ASTORE 0
L1
LINENUMBER 15 L1
NEW java/lang/Object
DUP
INVOKESPECIAL java/lang/Object.<init>()V
ASTORE 1
L2
LINENUMBER 24 L2
ICONST_1
ANEWARRAY java/lang/Object
DUP
ICONST_0
ALOAD 0
AASTORE
ASTORE 0
L3
LINENUMBER 25 L3
ICONST_1
ANEWARRAY java/lang/Object
DUP
ICONST_0
ALOAD 0
AASTORE
ASTORE 0
L4
LINENUMBER 26 L4
RETURN
L5
LOCALVARIABLE o [Ljava/lang/Object; L1 L5 0
LOCALVARIABLE a Ljava/lang/Object; L2 L5 1
MAXSTACK = 4
MAXLOCALS = 2
now the last
// access flags 8
static testCrash()V
L0
LINENUMBER 13 L0
ACONST_NULL
CHECKCAST [Ljava/lang/Object;
ASTORE 0
L1
LINENUMBER 24 L1
ICONST_1
ANEWARRAY java/lang/Object
DUP
ICONST_0
ALOAD 0
AASTORE
ASTORE 0
L2
LINENUMBER 25 L2
ICONST_1
ANEWARRAY java/lang/Object
DUP
ICONST_0
ALOAD 0
AASTORE
ASTORE 0
L3
LINENUMBER 26 L3
RETURN
L4
LOCALVARIABLE o [Ljava/lang/Object; L1 L4 0
MAXSTACK = 4
MAXLOCALS = 1
可是来试试下面的代码,真是让人有点诧异,分别在JDK1.4、JDK5、JDK6上都表现一致。
package crash;
public class JVMCrashTest {
public static void main(String[] args) {
try {
testCrash();
} catch (Throwable t) {
t.printStackTrace();
System.out.println("catch an exception! I'm dead!");
}
}
/**
* JVM挂掉,core dump
*/
static void testCrash() {
Object[] o = null;
int line = 0;
while (true) {
o = new Object[] { o };
line++;
if (line % 1000 == 0) {
System.out.println(line);
}
}
}
}
没有机会抓异常,JVM直接Crash。Windows上会有hs_err日志产生,好一个EXCEPTION_STACK_OVERFLOW。Linux上面连日志都没有,直接segment fault。
static testCrash()V
L0
LINENUMBER 13 L0
ACONST_NULL
CHECKCAST [Ljava/lang/Object;
ASTORE 0
L1
LINENUMBER 14 L1
ICONST_0
ISTORE 1
L2
LINENUMBER 15 L2
NEW java/lang/Object
DUP
INVOKESPECIAL java/lang/Object.<init>()V
ASTORE 2
L3
LINENUMBER 17 L3
FRAME APPEND [[Ljava/lang/Object; I java/lang/Object]
ICONST_1
ANEWARRAY java/lang/Object
DUP
ICONST_0
ALOAD 0
AASTORE
ASTORE 0
L4
LINENUMBER 19 L4
IINC 1 1
L5
LINENUMBER 20 L5
ILOAD 1
SIPUSH 1000
IREM
IFNE L3
L6
LINENUMBER 21 L6
GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
ILOAD 1
INVOKEVIRTUAL java/io/PrintStream.println(I)V
L7
LINENUMBER 16 L7
FRAME SAME
GOTO L3
L8
LOCALVARIABLE o [Ljava/lang/Object; L1 L8 0
LOCALVARIABLE line I L2 L8 1
LOCALVARIABLE a Ljava/lang/Object; L3 L8 2
MAXSTACK = 4
MAXLOCALS = 3
static testCrash()V
L0
LINENUMBER 13 L0
ACONST_NULL
CHECKCAST [Ljava/lang/Object;
ASTORE 0
L1
LINENUMBER 14 L1
ICONST_0
ISTORE 1
L2
LINENUMBER 15 L2
NEW java/lang/Object
DUP
INVOKESPECIAL java/lang/Object.<init>()V
ASTORE 2
L3
LINENUMBER 24 L3
ICONST_1
ANEWARRAY java/lang/Object
DUP
ICONST_0
ALOAD 0
AASTORE
ASTORE 0
L4
LINENUMBER 25 L4
RETURN
L5
LOCALVARIABLE o [Ljava/lang/Object; L1 L5 0
LOCALVARIABLE line I L2 L5 1
LOCALVARIABLE a Ljava/lang/Object; L3 L5 2
MAXSTACK = 4
MAXLOCALS = 3
static testCrash()V
L0
LINENUMBER 13 L0
ACONST_NULL
CHECKCAST [Ljava/lang/Object;
ASTORE 0
L1
LINENUMBER 15 L1
NEW java/lang/Object
DUP
INVOKESPECIAL java/lang/Object.<init>()V
ASTORE 1
L2
LINENUMBER 24 L2
ICONST_1
ANEWARRAY java/lang/Object
DUP
ICONST_0
ALOAD 0
AASTORE
ASTORE 0
L3
LINENUMBER 25 L3
ICONST_1
ANEWARRAY java/lang/Object
DUP
ICONST_0
ALOAD 0
AASTORE
ASTORE 0
L4
LINENUMBER 26 L4
RETURN
L5
LOCALVARIABLE o [Ljava/lang/Object; L1 L5 0
LOCALVARIABLE a Ljava/lang/Object; L2 L5 1
MAXSTACK = 4
MAXLOCALS = 2
now the last
// access flags 8
static testCrash()V
L0
LINENUMBER 13 L0
ACONST_NULL
CHECKCAST [Ljava/lang/Object;
ASTORE 0
L1
LINENUMBER 24 L1
ICONST_1
ANEWARRAY java/lang/Object
DUP
ICONST_0
ALOAD 0
AASTORE
ASTORE 0
L2
LINENUMBER 25 L2
ICONST_1
ANEWARRAY java/lang/Object
DUP
ICONST_0
ALOAD 0
AASTORE
ASTORE 0
L3
LINENUMBER 26 L3
RETURN
L4
LOCALVARIABLE o [Ljava/lang/Object; L1 L4 0
MAXSTACK = 4
MAXLOCALS = 1
发表评论
-
Java类的初始化过程详解
2010-04-11 17:09 1182java是多线程的,所以类 ... -
jvm 字节码中文含义
2010-04-08 11:31 3560栈和局部变量操作 将常 ... -
jvm 初始化
2010-04-07 16:01 1131void vm_init_globals() { chec ... -
jvm gc
2010-04-06 23:52 968jvm gc -
jvm exception
2010-04-06 23:52 810jvm exception -
jvm method invoke
2010-04-06 23:51 1034jvm method invoke -
jvm interpreter
2010-04-06 23:51 1200jvm interpreter 解释器的初始化 JNI_Cr ... -
jvm运行时数据结构
2010-04-06 23:50 871jvm运行时数据结构 -
jvm class与instance运行时结构
2010-04-06 23:49 830jvm class与instance运行时结构 -
jvm dll加载分析
2010-04-06 23:48 1129jvm dll加载分析 -
java class文件格式
2010-04-06 23:43 1391struct ClassFile { u4 magic; ... -
汇编语言与计算机体系结构--使用C++和Java
2010-04-06 15:16 1628第1章数制1 1.1简介1 1.2按位记数制1 1.3各数制的 ... -
JVM内存管理及垃圾回收机制
2010-04-06 09:30 809JAVA在内存中由 Perm 和 He ... -
IBM Java Jvm GC实现内幕 (几年前的老文)
2010-04-05 14:39 773好言归正传,按照Sam Borman的说法IBM java 1 ... -
修复 Java 内存模型,第 1 部分(什么是 Java 内存模型,最初它是怎样被破坏的?)
2010-03-30 14:16 1003Java 平台把线程和多处理技术集成到了语言中,这种集成程度比 ... -
JVM内存结构
2010-03-29 15:25 766(1)类装载子系统 装载 连 ... -
Java轻量级锁原理详解(Lightweight Locking)
2010-03-29 15:21 746Java轻量级锁原理详解(Lightweight Lockin ... -
解析 Java 类和对象的初始化过程
2010-03-29 15:15 1030类的初始化和对象初始 ... -
解析 Java 类和对象的初始化过程
2010-03-29 15:14 702类的初始化和对象初始化是 JVM 管理的类型生命周期中非常重要 ... -
Java偏向锁实现原理(Biased Locking)
2010-03-29 15:00 842Java偏向锁实现原理(Bias ...
相关推荐
Klocwork v8.0 文档,英文版,Klocwork_Stack_Overflow_Analyzer.pdf
jobs_stack_overflow.pdf
verilog实现,已经上板调试过,百兆没有问题,千兆需要做好约束,主要包括IP、ICMP、ARP、UDP各模块
Pro_MERN_Stack_Full_Stack_Web_App_Development_with_Mongo,_Express,_React,_and_Node
飞思卡尔官方最新LIN栈源码,可用于LIN应用开发参考和LIN的学习
进制转换 这是学汇编语言时的一些程序 对初学者很有帮助
tcpip_stack_v1_2_TCP,IP_TCP_IP_udpmac_UDP_tcp.zip
一个完整的LIN代码程序,使用NXP提供的驱动开发
软件漏洞分析入门 相关附件 stack_overflow_exec
NXP 的 LIN 协议栈,之前一直用的 4.5.7 的版本,使用过程中有好几个问题都是手动修复的。最近在官网上看见了 4.6.6 的版本,下载测试了一遍,发现之前手动修复的几个问题都已经 OK 了。
stack_overflow_win_XP_sp2 简明描述了XP SP2版本中的溢出攻击方式
Stack_Queue_Stack_源码
linux架构图。...The Linux Storage Stack Diagramversion 4.0, 2015-06-01outlines the Linux storage stack as of Kernel version 4.0 SCSI low level drivers megaraid_sas aacraid qla2xxx ...
ZigBee_PRO_Stack_Profile.pdf
TI公司提供2015年最新基于ZigBee无线智能家居开发协议(Z_Stack_Home_1.2.2.exe) 由于只能上传小于60MB文件,将140MB原文件分割3个部分上传,分别为: Z_Stack_Home_1.2.2.exe.part1.rar Z_Stack_Home_1.2.2.exe.part...
软件漏洞分析入门 中的文件 stack_overflow_ret
Prediction_For_stack_overflow_Questions
开发环境:ISE14.7 ,win7 X64 台式机,采用具备phy接口芯片的黑金开发板AX516,高速网线一根。 测试工具:网络调试助手NetAssist.exe 、TCP&UDP测试工具 、WireShark软件 版本说明:实现ARP、ICMP、UDP、TCP、IP...
full_stack_final
WndRiver_Network_Stack_VxWorks6_Programmers_Guide Vol.1-Vol.3