- 浏览: 66966 次
- 性别:
- 来自: 成都
最新评论
-
qiaohhgz:
public static void String chang ...
一图和几句话解决java参数传值问题 -
ocaicai:
虽然我看懂了你的意思,但是我依然觉得表达得有些欠妥!
一图和几句话解决java参数传值问题 -
ql0722:
特别赞同第二条第三条
如果我再年轻几岁 -
zzc_zj:
很好的知识点,学习了
数据库查询select原理 -
dai03070609:
[url][/url][flash=200,200][/fla ...
数据库查询select原理
基本的HelloWorld类:
C:\demo>javap -verbose HelloWorld
如果加上下面的代码:
会得到下面的指令代码:
Locals=0, Args_size=0
public class HelloWorld{ public static void main(String [] args){ System.out.println("Hello World"); } }
C:\demo>javap -verbose HelloWorld
Compiled from "HelloWorld.java" public class HelloWorld extends java.lang.Object SourceFile: "HelloWorld.java" minor version: 0 major version: 50 Constant pool: //常量池,里面的内容很重要。 //Method:方法 //Field:字段 //String:字符串 //Asciz:方法签名 <init>由jvm调用,其他是不能够去调用它的。 //NameAndType:变量名的类型 //Class:类 //我们看看invokespecial #1 这条语句 //#1是对应的一个方法(Method). //其中右边 #6.#15 表示从常量池的#6(表示偏移量)跳到进入#15去。 //#6对应的是class 到#15对应的是 NameAndType:#7:#8。 //在看#7对应的是:Asciz <init> ,#8对应的是()V 表示没有返回值(void),()表示方法没//有参数。所以invokespecial #1指的是:调用一个Method java/lang/Object."<init>":()V //常见JVM指令: //invokespecial:表示调用超类构造方法,实例初始化方法,私有方法。 //invokevirtual:调用实例方法 //invokestatic:调用静态方法 //invokeinterface:调用接口方法 //new:创建一个对象,并将其引用值压入栈顶 const #1 = Method #6.#15; // java/lang/Object."<init>":()V const #2 = Field #16.#17; // java/lang/System.out:Ljava/io/Print const #3 = String #18; // Hello World const #4 = Method #19.#20; // java/io/PrintStream.println:(Ljava/V const #5 = class #21; // HelloWorld const #6 = class #22; // java/lang/Object const #7 = Asciz <init>; const #8 = Asciz ()V; const #9 = Asciz Code; const #10 = Asciz LineNumberTable; const #11 = Asciz main; const #12 = Asciz ([Ljava/lang/String;)V; const #13 = Asciz SourceFile; const #14 = Asciz HelloWorld.java; const #15 = NameAndType #7:#8;// "<init>":()V const #16 = class #23; // java/lang/System const #17 = NameAndType #24:#25;// out:Ljava/io/PrintStream; const #18 = Asciz Hello World; const #19 = class #26; // java/io/PrintStream const #20 = NameAndType #27:#28;// println:(Ljava/lang/String;)V const #21 = Asciz HelloWorld; const #22 = Asciz java/lang/Object; const #23 = Asciz java/lang/System; const #24 = Asciz out; const #25 = Asciz Ljava/io/PrintStream;; const #26 = Asciz java/io/PrintStream; const #27 = Asciz println; const #28 = Asciz (Ljava/lang/String;)V; public HelloWorld(); //默认构造函数 //Locals表示方法内局部变量个数,该例中是1,有些人疑惑的是HelloWorld()中明明没有参数啊,应该是0。 //当线程调用一个方法的时候,jvm会开辟一个帧出来,这个帧包括操作栈、局部变量列表、常量池的引用 //非static方法,在调用的时候都会给方法默认加上一个当前对象(this)类型的参数,不需要在方法中定义, //这个时候局部变量列表中index为0的位置保存的是this,其他索引号按变量定义顺序累加 //static方法不依赖对象,所以不用传this //Args_size表示参数个数,public HelloWorld();会传一个this进去,所以value是1 Code: Stack=1, Locals=1, Args_size=1 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: return LineNumberTable: line 1: 0 public static void main(java.lang.String[]); Code: Stack=2, Locals=1, Args_size=1 0: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream; 3: ldc #3; //String Hello World 5: invokevirtual #4; //Method java/io/PrintStream.println:(Ljava/lang/St 8: return LineNumberTable: line 3: 0 line 4: 8 }
如果加上下面的代码:
public static void print(){ System.out.println("Hello World"); }
会得到下面的指令代码:
public static void print(); Code: Stack=2, Locals=0, Args_size=0 0: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream; 3: ldc #3; //String Hello World 5: invokevirtual #4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V 8: return LineNumberTable: line 3: 0 line 4: 8
Locals=0, Args_size=0
- jvm指令学习笔记.rar (19.8 KB)
- 下载次数: 91
发表评论
-
MyEclipse插件安装
2012-03-22 10:05 4321:先把plugin的jar文件复制到一个文件夹下 如:C:/ ... -
Hibernate框架使用技术简述
2011-03-24 10:14 1095(1)持久化对象的操 ... -
Coder 爱翻译 How Tomcat Works 第九章 第二部分
2011-01-24 15:20 1133The ManagerBase Class ManagerB ... -
Coder 爱翻译 How Tomcat Works 第九章 第一部分
2010-12-16 20:40 1215Chapter 9: Session Management ... -
Coder 爱翻译 How Tomcat Works 第八章 第二部分
2010-12-12 18:31 1485The Loader Interface 在web应 ... -
Coder 爱翻译 How Tomcat Works 第八章 第一部分
2010-12-06 11:14 1070Chapter 8: Loader 在前几章 ... -
Coder 爱翻译 How Tomcat Works 第七章
2010-12-05 16:29 1142Chapter 7: Logger 日志是一 ... -
Coder 爱翻译 How Tomcat Works 第六章
2010-12-04 22:09 1117Chapter 6: Lifecycle Catalina是 ... -
Coder 爱翻译 How Tomcat Works 第五章 第三部分
2010-12-03 13:31 1109The Context Application 这章的第一个 ... -
Coder 爱翻译 How Tomcat Works 第五章 第二部分
2010-12-03 12:33 3071The Pipeline Interface 我们提到的Pi ... -
Coder 爱翻译 How Tomcat Works 第五章 第一部分
2010-11-28 16:36 1119Chapter 5: Container 一个容器是一个为s ... -
Coder 爱翻译 How Tomcat Works 第四章 第二部分
2010-11-27 15:07 1023Request Objects 在默认的连接器中org.ap ... -
Coder 爱翻译 How Tomcat Works 第四章 第一部分
2010-11-25 16:38 917Chapter 4: Tomcat Default Conne ... -
PreparedStatement字符串拼接
2010-11-18 17:21 1373这在里求JDBC中PreparedStatement的实现,我 ... -
How Tomcat Works 简单目录
2010-11-16 14:51 1414第1章:通过一个简单的HTTP服务器开始这本书的内容。构建一个 ... -
Coder 爱翻译 How Tomcat Works 第三章 第三部分
2010-11-15 19:24 971Parsing Headers 一个HttpHeader类 ... -
Coder 爱翻译 How Tomcat Works 第三章 第二部分
2010-11-14 20:13 1061The Connector(连接器) HttpConnect ... -
回应某面试题
2010-11-10 21:31 1282上午看了一JAVAEYE的一个上机题:http://www.i ... -
quartz简单应用
2010-11-10 11:49 963Job类:实现Job接口,接口中有一个execute()方法, ... -
coder 爱翻译 How Tomcat Works 第三章 第一部分
2010-11-05 11:41 1077第三章: Connector 在正式 ...
相关推荐
用java写的application键盘钢琴,按ABCDEFG是音一到七,有点小BUG
java class和源码 deep-in-jvm ...运行javap分析Class文件字节码 javap -verbose Main > Main.bytecode 分析包含内部类的源码编译出的Class文件 javap -verbose 'Main$Box.class' > 'Main$Box.bytecode'
字节码到源代码映射器这是ExtendJ的扩展,它允许字节码到源代码的映射具有更好的粒度,这意味着可以找到生成特定字节码指令的Java代码的精确部分。如何使用ExtendJ 在主文件夹中,运行: ./gradlew --rerun-tasks...
使用c/c++实现javap的功能,加深对java中class结构的理解
如何使用javap反编译字节码
源文件 ---javac编译--> 字节码文件. 字节码文件 --javap反编译--> 源文件.
Javajavap工具的实现javap打印出传递给它的类的包,受保护的字段以及公共字段和方法。
现象描述: 项目使用springboot启动一个web项目,在启动阶段看到console中出现了异常“1.10.3-1.4.3\hdf5.jar 系统找不到指定的文件”,虽然这些异常不影响项目的正常运行,但作为一个严谨的技术人员,看到这些...
是个很麻烦,很纠结的问题 内部类基本语法 内部类继承 子类与父类的内部类同名 匿名类 内部接口及接口中的内部类 内部类的类文件 为什么需要内部类--内部类用途
使用Java编程语言,对.class文件进行解析,类似于javap -v filename指令的效果,但是没有对attibutes属性进行解析,需要学习的可以下载,程序运行的效果在本人的博客的附录中
该编译器使用1000行以下的Java语言实现,非常适合于学习JVM字节码。 该语言当前支持: 用静态方法生成类 调用静态方法 Java基本类型和字符串的文字 一些内置操作(堆栈操作,布尔逻辑,算术) 条件和循环 class...
Java Development Kit is the official development kit for the ...which displays process information for current Java processes, javap - the class file disassembler, and other components are also included.
Java提供了javap工具来反汇编和检查Java字节码。 这使作者可以查看其代码如何在较低级别上运行,了解如何对高级Scala概念进行编码以及潜在地发现性能问题。 使用javap一个挑战是正确指定类路径。 由于SBT知道您项目...
javap -c xxx.class > xxx.txt 反汇编 方便大家查阅理解JVM执行代码的过程
JVM指令手册.java代码经过javap-v可以查看java指令,配合指令手册可以查看详细操作过程
NULL 博文链接:https://shansun123.iteye.com/blog/658120
这是一个快速查看插件,可让您将Java .class文件预览为字节码。 它使用javap -c命令。 要求 苹果系统 已安装Java 安装 编译目标并将二进制文件复制到/Library/QuickLook或~/Library/QuickLook 。
Java文件想要看字节码通常使用 javap 命令将java的class文件反汇编,具体操作步骤如下: 1. 先写好一个SynchronizedTest.java文件(下面贴出) 2. 在java文件的目录下,使用命令 javac SynchronizedTest.java 编译,...
jad.exe-windows版本,将.class文件反编译为java文件(专业) 使用 java自带的javap -p 名称.class反编译的有可能不正确,例如反编译Enum枚举,所以我们需要使用更加专业的工具