- 浏览: 68577 次
- 性别:
- 来自: 成都
最新评论
-
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 1133(1)持久化对象的操 ... -
Coder 爱翻译 How Tomcat Works 第九章 第二部分
2011-01-24 15:20 1171The ManagerBase Class ManagerB ... -
Coder 爱翻译 How Tomcat Works 第九章 第一部分
2010-12-16 20:40 1264Chapter 9: Session Management ... -
Coder 爱翻译 How Tomcat Works 第八章 第二部分
2010-12-12 18:31 1517The Loader Interface 在web应 ... -
Coder 爱翻译 How Tomcat Works 第八章 第一部分
2010-12-06 11:14 1097Chapter 8: Loader 在前几章 ... -
Coder 爱翻译 How Tomcat Works 第七章
2010-12-05 16:29 1189Chapter 7: Logger 日志是一 ... -
Coder 爱翻译 How Tomcat Works 第六章
2010-12-04 22:09 1169Chapter 6: Lifecycle Catalina是 ... -
Coder 爱翻译 How Tomcat Works 第五章 第三部分
2010-12-03 13:31 1155The Context Application 这章的第一个 ... -
Coder 爱翻译 How Tomcat Works 第五章 第二部分
2010-12-03 12:33 3109The Pipeline Interface 我们提到的Pi ... -
Coder 爱翻译 How Tomcat Works 第五章 第一部分
2010-11-28 16:36 1170Chapter 5: Container 一个容器是一个为s ... -
Coder 爱翻译 How Tomcat Works 第四章 第二部分
2010-11-27 15:07 1058Request Objects 在默认的连接器中org.ap ... -
Coder 爱翻译 How Tomcat Works 第四章 第一部分
2010-11-25 16:38 948Chapter 4: Tomcat Default Conne ... -
PreparedStatement字符串拼接
2010-11-18 17:21 1406这在里求JDBC中PreparedStatement的实现,我 ... -
How Tomcat Works 简单目录
2010-11-16 14:51 1444第1章:通过一个简单的HTTP服务器开始这本书的内容。构建一个 ... -
Coder 爱翻译 How Tomcat Works 第三章 第三部分
2010-11-15 19:24 1034Parsing Headers 一个HttpHeader类 ... -
Coder 爱翻译 How Tomcat Works 第三章 第二部分
2010-11-14 20:13 1093The Connector(连接器) HttpConnect ... -
回应某面试题
2010-11-10 21:31 1323上午看了一JAVAEYE的一个上机题:http://www.i ... -
quartz简单应用
2010-11-10 11:49 1001Job类:实现Job接口,接口中有一个execute()方法, ... -
coder 爱翻译 How Tomcat Works 第三章 第一部分
2010-11-05 11:41 1132第三章: Connector 在正式 ...
相关推荐
标题“javap---application--键盘钢琴”所指的是一款用Java编程语言开发的应用程序,它模拟了一款键盘钢琴。在Java编程中,"Application"通常指的是具有图形用户界面(GUI)的桌面应用程序,而非Web应用或移动应用。...
标题 "wtl_wtl-implementation_of_javap-master_C++_" 暗示这是一个C++项目,其目标是实现Java的`javap`工具的功能。`javap`是Java开发工具包(JDK)的一部分,它用于反汇编Java字节码,帮助开发者查看和理解类文件...
java class和源码 deep-in-jvm ...运行javap分析Class文件字节码 javap -verbose Main > Main.bytecode 分析包含内部类的源码编译出的Class文件 javap -verbose 'Main$Box.class' > 'Main$Box.bytecode'
通过 `javap`,开发者能够深入了解 Java 编译器是如何处理源代码并生成字节码的,这对于优化程序性能和理解 Java 虚拟机 (JVM) 的工作原理至关重要。 #### 二、基本概念 在深入了解 `javap` 的使用之前,我们首先...
字节码到源代码映射器这是ExtendJ的扩展,它允许字节码到源代码的映射具有更好的粒度,这意味着可以找到生成特定字节码指令的Java代码的精确部分。如何使用ExtendJ 在主文件夹中,运行: ./gradlew --rerun-tasks...
javap 使用说明文档 javap 是 JDK 中的一个命令行工具,主要用于对给定的 class 文件进行反编译,了解 Java 编译器内部的工作机制,并提高程序执行的效率。下面是 javap 的使用说明。 1. javap 的基本用法 javap ...
在`javap-Tool-master`这个压缩包中,很可能包含了一个关于如何使用`javap`工具的示例项目或教程。通过研究这个项目,你可以深入理解`javap`的用法,并学会如何在实际开发中运用它来提升你的编程技能。对于Java...
`Javap`是Java开发工具包(JDK)中自带的一个命令行工具,专门用于分析Java字节码,帮助开发者理解类文件的内部结构。在这个话题中,我们将深入探讨如何使用`Javap`作为类分解器来解析和理解Java字节码。 首先,让...
本教程将探讨Java字节码的组织形式以及如何使用`javap`命令来查看和分析字节码。 1. **Java字节码的组织形式** - 类文件结构:每个Java类文件都以魔数`OxCAFEBABE`开头,用于识别文件格式。接着是小版本号和大版本...
javap 可以将类文件(.class)中的字节码反编译成 Java 源代码的形式,打印出类中的公共域、方法、构造函数和静态初始值。 javap 的用法语法为:javap <选项> <类名>,其中选项包括: * -b:向后兼容 JDK 1.1 中的...
以简单的`Add`类为例,我们看到`javap`命令用于反编译字节码。`add`方法的字节码非常直观,主要由`iload`(加载整数到堆栈)、`iadd`(执行加法操作)和`ireturn`(返回结果)指令组成。这显示了JVM如何通过字节码...
例如:`javap -c HelloWorld` 显示HelloWorld类的字节码指令。 6. **jdb命令**: - Java调试器,用于调试Java程序。例如:`jdb MyProgram` 启动MyProgram并连接到调试器。 7. **jconsole命令**: - Java可视化...
javap -verbose HelloWorld.class ``` 这将显示 `HelloWorld.class` 文件的详细信息。 6. **jdb**:Java 调试器 `jdb` 是 Java 的命令行调试器,可以用来单步执行代码、设置断点、查看变量值等。例如: ``` ...
因此,本文从最简单的Java程序——打印"Hello, World"开始,逐步介绍如何将Java源文件编译成字节码文件,以及字节码文件中所包含的一些基本信息。 首先,我们需要编写一个简单的Java程序(Hello.java),程序中包含...
是个很麻烦,很纠结的问题 内部类基本语法 内部类继承 子类与父类的内部类同名 匿名类 内部接口及接口中的内部类 内部类的类文件 为什么需要内部类--内部类用途
查看`HelloWorld.class`的字节码: ``` javap -c HelloWorld ``` 6. **jdb**:Java调试器 `jdb` 是Java的命令行调试器,它允许你在运行时检查和修改程序状态。例如,启动`HelloWorld`并设置断点: ``` jdb -...
其次,JDK内置的`javap`命令用于反汇编Java字节码,从而查看类和方法的内部结构。例如,要查看`String`类的方法,可以运行: ```shell javap -public java.lang.String ``` 这会显示`String`类的所有公共方法,...