`
vyloy
  • 浏览: 80704 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论

Eclipse JDT与jdk7u10生成的switch代码对比

阅读更多
public static void main(String[] a) {
	String target="abc";
	String r;
	switch(target){
	case "abc":
		r="cba";
		break;
	default:
	case "def":
		r="fed";
	}
	System.out.println(r);
}


Eclipse JDT
Stack: 2, Locals: 4
 0  ldc <String "abc"> [16]
 2  astore_1 [target]
 3  aload_1 [target]
 4  dup
 5  astore_3
 6  invokevirtual java.lang.String.hashCode() : int [18]
 9  lookupswitch default: 66
	  case 96354: 36
	  case 99333: 48
36  aload_3
37  ldc <String "abc"> [16]
39  invokevirtual java.lang.String.equals(java.lang.Object) : boolean [24]
42  ifne 60
45  goto 66
48  aload_3
49  ldc <String "def"> [28]
51  invokevirtual java.lang.String.equals(java.lang.Object) : boolean [24]
54  ifne 66
57  goto 66
60  ldc <String "cba"> [30]
62  astore_2 [r]
63  goto 69
66  ldc <String "fed"> [32]
68  astore_2 [r]
69  getstatic java.lang.System.out : java.io.PrintStream [34]
72  aload_2 [r]
73  invokevirtual java.io.PrintStream.println(java.lang.String) : void [40]
76  return


经过:
1.switch通过hashcode找出大概位置(因为有hashcode冲撞的可能)
2.调用String.equals方法找到正确目标字节码位置,直接执行操作

JDK7u10
stack=2, locals=5, args_size=1
 0: ldc           #2                  // String abc
 2: astore_1      
 3: aload_1       
 4: astore_3      
 5: iconst_m1     
 6: istore        4
 8: aload_3       
 9: invokevirtual #3                  // Method java/lang/String.hashCode:()I
12: lookupswitch  { // 2
		   96354: 40
		   99333: 55
		 default: 67
	}
40: aload_3       
41: ldc           #2                  // String abc
43: invokevirtual #4                  // Method java/lang/String.equals:(Ljava/lang/Object;)Z
46: ifeq          67
49: iconst_0      
50: istore        4
52: goto          67
55: aload_3       
56: ldc           #5                  // String def
58: invokevirtual #4                  // Method java/lang/String.equals:(Ljava/lang/Object;)Z
61: ifeq          67
64: iconst_2      
65: istore        4
67: iload         4
69: lookupswitch  { // 2
			   0: 96
			   2: 102
		 default: 102
	}
96: ldc           #6                  // String cba
98: astore_2      
99: goto          105
102: ldc           #7                  // String fed
104: astore_2      
105: getstatic     #8                  // Field java/lang/System.out:Ljava/io/PrintStream;
108: aload_2       
109: invokevirtual #9                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
112: return        


经过:
1.switch通过hashcode找出大概位置(因为有hashcode冲撞的可能)
2.调用String.equals方法找到正确目标,此目标已经在内部生成字节码时用int值代替
3.通过switch代替的int值,找到正确目标字节码位置,直接执行操作


总结:
Eclipse JDT对switch字符串生成的字节码更高效,更紧凑

作者:翁志艺
分享到:
评论

相关推荐

    基于Eclipse-JDT生成Java源代码的AST并可视化.zip

    Eclipse JDT(Java Development Tools)是Eclipse IDE的一个重要组成部分,提供了丰富的API用于Java源代码的处理,包括生成和操作AST。本教程将介绍如何利用Eclipse JDT生成Java源代码的AST,并通过可视化工具进行...

    Drools报错:The Eclipse JDT Core jar is not in the classpath

    意味着系统在运行时找不到Eclipse JDT Core库,这是一个关键的依赖,因为Drools使用它来编译和加载用户定义的Java代码,特别是那些由DRL规则文件动态生成的代码。 Eclipse JDT Core是Eclipse IDE的一部分,它提供了...

    eclipse JDT的使用

    9. **团队协作**:JDT与Eclipse的团队协作功能紧密集成,支持多种版本控制系统,如Git、SVN等,方便开发者协同开发和管理代码。 10. **Javadoc和源码查看**:Eclipse JDT内置了Javadoc查看器,可以查看API文档,...

    eclipse.jdt.core, jdt/核心项目库( eclipse jdt core ).zip

    eclipse.jdt.core, jdt/核心项目库( eclipse jdt core ) JDT内核这是 Eclipse 开发工具的Java的核心部分。 它包含对编译和使用Java代码的非用户界面支持,包括:可以独立运行或者作为 Eclipse IDE的一部分的增量或者...

    Eclipse JDT AST使用方法(word)

    Eclipse JDT(Java Development Tools)是Eclipse IDE中用于Java开发的核心组件,它提供了诸如编辑器、语法高亮和代码分析等丰富的功能。在Eclipse JDT中,AST(Abstract Syntax Tree,抽象语法树)是解析Java源代码...

    eclipse.jdt

    7. **插件扩展**:Eclipse作为一个开放平台,开发者可以利用Eclipse.jdt提供的API开发自定义插件,扩展其功能,满足特定的开发需求。 8. **代码分析**:它包含静态代码分析工具,可以检查代码质量,发现潜在的问题...

    eclipse-JDT-3.3.1.zip

    1. **源代码编辑器**:Eclipse JDT提供了集成的Java源代码编辑器,支持语法高亮、自动代码完成、错误检测和快速修复,以及重构工具。这些功能极大地提高了开发效率和代码质量。 2. **构建工具**:JDT包含了一个基于...

    org.eclipse.jdt.core_3.2.0.v_671

    标题“org.eclipse.jdt.core_3.2.0.v_671”表明这是一个与Eclipse集成开发环境(IDE)相关的组件,特别是它的Java开发工具(JDT)核心部分。这个版本号“3.2.0.v_671”表示这是JDT核心的特定版本,其中“3.2.0”可能...

    eclipse中jdt相关jar包

    Class not found: org.eclipse.jdt.core.JDTCompilerAdapter。 解决方法: 拷贝下面这些jar包到ant_home/lib org.eclipse.jdt.compiler.tool_1.0.100.v_972_R35x.jar org.eclipse.jdt.core_3.5.2.v_981_R35x.jar org...

    eclipse.jdt.doc.user.3.1.pdf.zip

    1. **安装与配置**:指导用户如何下载、安装Eclipse IDE以及JDT插件,设置Java开发环境,包括JDK的配置和工作空间的设定。 2. **工作台概览**:介绍Eclipse的工作台界面,包括视图、编辑器、透视图等元素的使用,...

    Eclipse jdt 2.0 plugin developer guide

    - JDT用户界面部分主要包括了如何利用Eclipse的UI框架来显示和编辑Java代码。 - 包括Java编辑器、查看器等组件的设计和实现。 ### 五、JDT API的使用 #### 5.1 操作Java代码 - **描述**:介绍如何通过API操纵Java...

    org.eclipse.jdt.core_3.6.1.v_A68_R36x_jar

    1.下载Eclipse plugin 补丁文件 org.eclipse.jdt.core_3.6.1.v_A68_R36x...7. 选择rt.jar,然后点击"Source Attachment"按钮,弹出对话框后选择"External File",然后把你的JDK安装目录下的src.zip文件与rt.jar关联上。

    org.eclipse.jdt.core_3.6.0.v_A58.jar

    这些协议规定了用户如何使用、分发和修改Eclipse的代码,保障了开源社区的协作与创新。 总结起来,"org.eclipse.jdt.core_3.6.0.v_A58.jar"是Eclipse JDT的核心,为Java开发者提供了强大的开发支持。通过理解和掌握...

    org.eclipse.jdt

    org.eclipse.jdt.* 的目录和文件 全部拷贝到 flexbuilder 的plugin (若为myEclipse则是将myEclipse下eclipse\plugins) flashbuilder也一样 ----下面是在FlexBuilder中配置VSS ------- 1. 首先绑定项目到...

    eclipse调试JDK rt.jar

    方便eclipse调试JDK代码 实时查看JDK代码的值

    JDT生成代码实例

    在Java开发中,Eclipse JDT (Java Development Toolkit) 是一个强大的工具,它提供了对Java源代码的抽象语法树(AST, Abstract Syntax Tree)表示,使得我们可以方便地生成、解析和修改Java代码。本示例展示了如何使用...

    eclipse.jdt.core:修改后的Eclipse JDT核心以解析存储库中的Java源代码

    这个名为"eclipse.jdt.core"的模块是JDT的核心部分,它提供了丰富的API和功能,允许开发者进行Java源代码的解析、编译、调试以及代码分析等操作。在"修改后的Eclipse JDT核心以解析存储库中的Java源代码"的场景下,...

Global site tag (gtag.js) - Google Analytics