- 浏览: 69261 次
- 性别:
- 来自: 成都
-
最新评论
-
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 1138(1)持久化对象的操 ... -
Coder 爱翻译 How Tomcat Works 第九章 第二部分
2011-01-24 15:20 1202The ManagerBase Class ManagerB ... -
Coder 爱翻译 How Tomcat Works 第九章 第一部分
2010-12-16 20:40 1284Chapter 9: Session Management ... -
Coder 爱翻译 How Tomcat Works 第八章 第二部分
2010-12-12 18:31 1527The Loader Interface 在web应 ... -
Coder 爱翻译 How Tomcat Works 第八章 第一部分
2010-12-06 11:14 1102Chapter 8: Loader 在前几章 ... -
Coder 爱翻译 How Tomcat Works 第七章
2010-12-05 16:29 1223Chapter 7: Logger 日志是一 ... -
Coder 爱翻译 How Tomcat Works 第六章
2010-12-04 22:09 1191Chapter 6: Lifecycle Catalina是 ... -
Coder 爱翻译 How Tomcat Works 第五章 第三部分
2010-12-03 13:31 1186The Context Application 这章的第一个 ... -
Coder 爱翻译 How Tomcat Works 第五章 第二部分
2010-12-03 12:33 3143The Pipeline Interface 我们提到的Pi ... -
Coder 爱翻译 How Tomcat Works 第五章 第一部分
2010-11-28 16:36 1195Chapter 5: Container 一个容器是一个为s ... -
Coder 爱翻译 How Tomcat Works 第四章 第二部分
2010-11-27 15:07 1075Request Objects 在默认的连接器中org.ap ... -
Coder 爱翻译 How Tomcat Works 第四章 第一部分
2010-11-25 16:38 959Chapter 4: Tomcat Default Conne ... -
PreparedStatement字符串拼接
2010-11-18 17:21 1413这在里求JDBC中PreparedStatement的实现,我 ... -
How Tomcat Works 简单目录
2010-11-16 14:51 1463第1章:通过一个简单的HTTP服务器开始这本书的内容。构建一个 ... -
Coder 爱翻译 How Tomcat Works 第三章 第三部分
2010-11-15 19:24 1062Parsing Headers 一个HttpHeader类 ... -
Coder 爱翻译 How Tomcat Works 第三章 第二部分
2010-11-14 20:13 1111The Connector(连接器) HttpConnect ... -
回应某面试题
2010-11-10 21:31 1342上午看了一JAVAEYE的一个上机题:http://www.i ... -
quartz简单应用
2010-11-10 11:49 1013Job类:实现Job接口,接口中有一个execute()方法, ... -
coder 爱翻译 How Tomcat Works 第三章 第一部分
2010-11-05 11:41 1168第三章: Connector 在正式 ...
相关推荐
javap -verbose HelloWorld.class ``` 这将显示 `HelloWorld.class` 文件的详细信息。 6. **jdb**:Java 调试器 `jdb` 是 Java 的命令行调试器,可以用来单步执行代码、设置断点、查看变量值等。例如: ``` ...
例如,`javac HelloWorld.java`会将`HelloWorld.java`源文件编译成可执行的`HelloWorld.class`。 3. **javaw.exe**: 与`java.exe`类似,但不显示控制台窗口。主要用于运行具有图形用户界面(GUI)的应用程序,...
- `javap`: 反编译.class文件以查看字节码。 - `jdb`: Java调试工具。 - `jps`: 查看正在运行的JVM进程。 - `keytool`: 用于管理密钥库文件。 - `jar`: 创建和管理JAR文件。 - `javadoc`: 生成API文档。 ####...
- `-target+版本`:指定生成的字节码版本。 2. **其他JDK命令**: - `native2ascii`:用于Unicode和ASCII之间的转换。 - `javap`:Java反编译工具。 - `jdb`:Java调试工具。 - `jps`:列出正在运行的Java进程...
2. **`javap`**:将`.class`文件反编译为Java字节码。 3. **`jdb`**:Java调试工具,可用于调试Java程序。 4. **`jps`**:列出正在运行的JVM进程的信息。 5. **`keytool`**:用于管理密钥库文件,常用于生成证书。 6...
- **可移植性**:由于Java代码被编译成字节码而非特定平台的机器码,因此可以在不同的硬件和操作系统上运行。 #### 二、Java的不同版本及应用领域 Java根据用途不同,分为三种主要版本: 1. **Java SE (Standard ...
- **`javap`**:反编译.class文件,查看字节码。 - **`jdb`**:Java调试工具。 - **`jps`**:列出所有正在运行的Java进程。 - **`keytool`**:管理和生成证书。 - **`jar`**:打包多个文件为一个JAR文件。 - *...
4. **测试JDK**:编写一个简单的Java程序,例如“Hello World”,并使用命令行工具编译和运行。 #### 四、JDK常用命令详解 - **javac**:Java编译器,用于将Java源代码编译成字节码(.class文件)。 - `-g`: 生成...