java虚拟机分析-字节码02
2015-11-15 12:55
239 查看
类信息描述后面就是每个Fields和Methods具体定义了。
属性个数: 0 fields
方法个数:2 methods
Method 0:
access flags=1 访问修饰符
name=#7<<init>>
这个方法的名称
descriptor=#8<()V>
这个方法的类型描述,也就是NameAndType
1 field/method attributes:
field/method attribute 0
name=#9<Code>
表示接下来是方法的什么方面的定义。Code表示堆这个方法的具体代码的定义
length=29
4个字节表示这个方法的代码长度,这些编译后的字节码长度就是29个字节,最多64K,也就是说一个方法编译后的字节码最长也就是64K,所以一个方法一般不能超过64K,此处不是说的java源码,而是编译后的字节码不能超过64K。
max stacks:1
该方法使用的最大的栈的深度
max locals:1
该方法使用的本地变量的最大个数,这两个定义在JVM加载这个类的字节码到内存的验证阶段做检查,如果发现超过了这两个值,JVM会拒绝加载这个类。
code length:5
定义了方法中的命令有5个字节
0 aload_0
引用入栈
1 invokespecial #1
4 return
0 exception table entries
表示此方法没有定义抛出的异常
1 code attributes:
表示这个方法中存在的一些代码属性描述,这些代码属性描述的是代码本身的一些额外信息,如用于调试的信息。我们知道调试时只需的代码与源码是通过行号关联在一起的。
code attribute 0:
name=#10<LineNumberTable> 代码属性LineNumberTable
length=6
6个字节都属于代码属性描述
line number table:
length=1
只有一行对应关系
start pc:0 line number:7
前两个字节对应运行时的行指针,后两个字节表示源码中的行号,这两个行号都是两个字节,对应到java源码中的行总数最多只能是65535,而字节码的总字节数也只能是65535,超过这个就不能表示了。
Method 1:
access flags=9
name=#11<main>
descriptor=#12<(Ljava/lang/String;)V>
1 field/method attribute:
field/method attribute 0
name=#9<Code>
length=42
max stack:3
max locals:1
code length:14
0 getstatic #2
3 ldc #3
5 iconst_0
6 anewarray #4
9 invokevitual #5
12 pop
13 return
0 exception table entries
1 code attributes:
code attribute 0:
name=#10<LineNumberTable>
length=10
Line number table:
length=2
start pc:0 line number:9
start pc:13 line number:10
属性个数: 0 fields
方法个数:2 methods
Method 0:
access flags=1 访问修饰符
name=#7<<init>>
这个方法的名称
descriptor=#8<()V>
这个方法的类型描述,也就是NameAndType
1 field/method attributes:
field/method attribute 0
name=#9<Code>
表示接下来是方法的什么方面的定义。Code表示堆这个方法的具体代码的定义
length=29
4个字节表示这个方法的代码长度,这些编译后的字节码长度就是29个字节,最多64K,也就是说一个方法编译后的字节码最长也就是64K,所以一个方法一般不能超过64K,此处不是说的java源码,而是编译后的字节码不能超过64K。
max stacks:1
该方法使用的最大的栈的深度
max locals:1
该方法使用的本地变量的最大个数,这两个定义在JVM加载这个类的字节码到内存的验证阶段做检查,如果发现超过了这两个值,JVM会拒绝加载这个类。
code length:5
定义了方法中的命令有5个字节
0 aload_0
引用入栈
1 invokespecial #1
4 return
0 exception table entries
表示此方法没有定义抛出的异常
1 code attributes:
表示这个方法中存在的一些代码属性描述,这些代码属性描述的是代码本身的一些额外信息,如用于调试的信息。我们知道调试时只需的代码与源码是通过行号关联在一起的。
code attribute 0:
name=#10<LineNumberTable> 代码属性LineNumberTable
length=6
6个字节都属于代码属性描述
line number table:
length=1
只有一行对应关系
start pc:0 line number:7
前两个字节对应运行时的行指针,后两个字节表示源码中的行号,这两个行号都是两个字节,对应到java源码中的行总数最多只能是65535,而字节码的总字节数也只能是65535,超过这个就不能表示了。
Method 1:
access flags=9
name=#11<main>
descriptor=#12<(Ljava/lang/String;)V>
1 field/method attribute:
field/method attribute 0
name=#9<Code>
length=42
max stack:3
max locals:1
code length:14
0 getstatic #2
3 ldc #3
5 iconst_0
6 anewarray #4
9 invokevitual #5
12 pop
13 return
0 exception table entries
1 code attributes:
code attribute 0:
name=#10<LineNumberTable>
length=10
Line number table:
length=2
start pc:0 line number:9
start pc:13 line number:10
相关文章推荐
- (java)Remove Duplicates from Sorted List
- java_12-24-part three
- (java)Climbing Stairs
- Spring笔记
- 如何在JSP页面导入java类
- Java Web(3)Hibernate 的增删改查
- java_12-24-part two
- java多线程断点续传下载
- java虚拟机分析-字节码解析
- Java中如何利用gson解析数据
- 两个java命令行处理工具
- Eclipse设置编码问题
- java之Class Loading Architecture --《Java_Security_2nd_Edition》
- JAVA处理CSV格式文件-javacsv.jar
- Eclipse debug 查看变量
- Java HMAC-SHA1加密算法的实现
- java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.ConditionalTagSupport
- 在struts2框架上上传多张图片
- JFinal资料
- MyEclipse项目自动部署