- 浏览: 209015 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
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 1217java是多线程的,所以类 ... -
jvm 字节码中文含义
2010-04-08 11:31 3607栈和局部变量操作 将常 ... -
jvm 初始化
2010-04-07 16:01 1165void vm_init_globals() { chec ... -
jvm gc
2010-04-06 23:52 1005jvm gc -
jvm exception
2010-04-06 23:52 843jvm exception -
jvm method invoke
2010-04-06 23:51 1066jvm method invoke -
jvm interpreter
2010-04-06 23:51 1230jvm interpreter 解释器的初始化 JNI_Cr ... -
jvm运行时数据结构
2010-04-06 23:50 898jvm运行时数据结构 -
jvm class与instance运行时结构
2010-04-06 23:49 859jvm class与instance运行时结构 -
jvm dll加载分析
2010-04-06 23:48 1159jvm dll加载分析 -
java class文件格式
2010-04-06 23:43 1418struct ClassFile { u4 magic; ... -
汇编语言与计算机体系结构--使用C++和Java
2010-04-06 15:16 1666第1章数制1 1.1简介1 1.2按位记数制1 1.3各数制的 ... -
JVM内存管理及垃圾回收机制
2010-04-06 09:30 846JAVA在内存中由 Perm 和 He ... -
IBM Java Jvm GC实现内幕 (几年前的老文)
2010-04-05 14:39 822好言归正传,按照Sam Borman的说法IBM java 1 ... -
修复 Java 内存模型,第 1 部分(什么是 Java 内存模型,最初它是怎样被破坏的?)
2010-03-30 14:16 1037Java 平台把线程和多处理技术集成到了语言中,这种集成程度比 ... -
JVM内存结构
2010-03-29 15:25 794(1)类装载子系统 装载 连 ... -
Java轻量级锁原理详解(Lightweight Locking)
2010-03-29 15:21 779Java轻量级锁原理详解(Lightweight Lockin ... -
解析 Java 类和对象的初始化过程
2010-03-29 15:15 1054类的初始化和对象初始 ... -
解析 Java 类和对象的初始化过程
2010-03-29 15:14 733类的初始化和对象初始化是 JVM 管理的类型生命周期中非常重要 ... -
Java偏向锁实现原理(Biased Locking)
2010-03-29 15:00 876Java偏向锁实现原理(Bias ...
相关推荐
《NXP LIN 2.2 Stack:构建与理解》 NXP LIN 2.2 Stack 是一种基于Freescale Semiconductor(现为NXP Semiconductors)技术的 LIN(Local Interconnect Network)通信协议栈,它专为汽车电子系统中的低速通信设计。...
在汇编语言的学习中,"STACK1_SEGMENT_STACK.rar_STACK1 SEGMENT_stack segment stack"这个标题提到了两个关键概念:栈段(Stack Segment)和栈(Stack)。栈在计算机科学中扮演着至关重要的角色,尤其是在汇编语言...
### IRP与IO_STACK_LOCATION详解 #### 一、概述 在Windows驱动开发中,IRP (I/O Request Packet) 和 IO_STACK_LOCATION 是两个至关重要的概念。它们之间存在着密切的关系,通常被视为一个整体来理解。本篇文章旨在...
"FSL_LIN_2.x_STACK_4.5.9.rar_FSL lin_lin_lin 2.2_lin 源码_飞思卡尔 lin" 是一个与飞思卡尔LIN(Local Interconnect Network)协议栈相关的压缩包,主要用于LIN应用的开发和学习。LIN是一种低成本的串行通信协议...
标题“udp_ip_stack3.zip”指的是一个包含Verilog代码实现的UDP/IP协议栈的压缩文件。这个实现已经过硬件板级验证,对于百兆以太网功能完备,而在千兆以太网环境下则需要对设计进行适当的约束优化。在本文中,我们将...
本资源包"**FSL_LIN_2.x_STACK_Package_4.5.9.7z**"专门针对NXP系列芯片,提供了LIN通信的例程和相关工具,是进行LIN通信开发和学习的宝贵资料。 一、NXP芯片与LIN通信 NXP半导体,前身为飞利浦半导体,是一家全球...
NXP 的 LIN 协议栈,之前一直用的 4.5.7 的版本,使用过程中有好几个问题都是手动修复的。最近在官网上看见了 4.6.6 的版本,下载测试了一遍,发现之前手动修复的几个问题都已经 OK 了。
《Zigbee网络层详解——基于Z_Stack 1.4.2的NWK解析》 Zigbee网络层(NWK),是Zigbee通信协议栈中的关键部分,主要负责设备之间的网络通信和管理。在Z_Stack 1.4.2版本中,这一层的实现对于理解Zigbee网络的运作至...
软件漏洞分析入门 相关附件 stack_overflow_exec
《TCP/IP协议栈详解——基于tcpip_stack_v1_2_TCP,IP_TCP_IP_udpmac_UDP_tcp源码分析》 TCP/IP协议栈是互联网通信的基础,它定义了数据在网络中的传输方式。本篇文章将深入剖析名为"tcpip_stack_v1_2_TCP,IP_TCP_IP...
首先,这本书的标题是《Pro_MERN_Stack_Full_Stack_Web_App_Development》,其中"MERN"指的是一个流行的全栈Web开发技术栈,它包括了MongoDB(一种NoSQL数据库)、Express.js(一个轻量级Web应用框架)、React(一种...
可扩展_网络_Stack_for_FPGAs_(TCPIP,_RoCEv2)_fpga-Network-Stack_Scalable_Network_Stack_for_FPGAs_(TCPIP,_RoCEv2)_fpga-network-stackfpga-Network-Stack_Scalable_Network_Stack_for_FPGAs_(TCPIP,_RoCEv2)...
在C++编程中,栈(Stack)是一种非常重要的数据结构,它遵循“后进先出”(LIFO,Last In First Out)的原则。栈在许多实际应用中都有广泛的应用,如函数调用、表达式求值等。在这个“Class_Stack.zip_stack的c++...
HART_STACK参数描述是HART_STACK协议栈接口程序的核心组件之一,它提供了一系列的参数设置接口,用户可以通过这些接口来设置HART设备的参数,例如设备的工作模式、通信速率、数据格式等。 HART_STACK设备初始化函数...
《WndRiver_Network_Stack_VxWorks6_Programmers_Guide》是一套全面介绍VxWorks操作系统中网络栈编程的指南,分为三个卷,涵盖了Vol.1至Vol.3的内容,版本为6.6。这套指南是针对Wind River公司开发的VxWorks实时操作...
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 ...
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
例如,在`sysctl.conf`中添加`kernel.stack_size = 102400`(表示100KB)后,重启系统生效。 值得注意的是,线程栈大小的设置应根据实际应用的需求来确定。对于计算密集型任务,可能需要较大的栈空间以容纳更多的...