`

比较If else 和 try catch 的jvm指令

阅读更多

编码时过度关注某个点性能,有时候整体性能适得其反!关于if else 和 try catch 的性能争辩,看下其JVM指令,再结合各自的使用场景,自己慢慢理解。在此不做评论!

 

另外强调下java的Exception.class!

public class Exception extends Throwable{}

看下Throwable类的结构和设计有好处,便于理解堆栈信息为啥能从Thread的起点到异常点都能打印出来!

 

 

先上Java Code:

 

public class Test{

    public void viewException(){

         try{
            String a = "123_a_"+3;
         }catch(Exception e){
            System.out.println("exception");
         }

    }

    public void viewThrow(){

        try{

            int a = 1+888;
        }catch(Exception e){
             throw new RuntimeException(e);
        }
    }


    public int viewIfelse(int num){
        if(num==1){
           return 1;
        }else if(num==2){
           return 2;
        }else{
           return 0;
        }
    }

}

 

 

再看反编译的JVM 指令:

 

Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return

public void viewException();
  Code:
   0:   ldc     #2; //String 123_a_3
   2:   astore_1
   3:   goto    7
   6:   astore_1
   7:   return
  Exception table:
   from   to  target type
     0     3     6   Class java/lang/Exception


public void viewThrow();
  Code:
   0:   sipush  889
   3:   istore_1
   4:   goto    17
   7:   astore_1
   8:   new     #4; //class java/lang/RuntimeException
   11:  dup
   12:  aload_1
   13:  invokespecial   #5; //Method java/lang/RuntimeException."<init>":(Ljava/lang/Throwable;)V
   16:  athrow
   17:  return
  Exception table:
   from   to  target type
     0     4     7   Class java/lang/Exception


public int viewIfelse(int);
  Code:
   0:   iload_1
   1:   iconst_1
   2:   if_icmpne       7
   5:   iconst_1
   6:   ireturn
   7:   iload_1
   8:   iconst_2
   9:   if_icmpne       14
   12:  iconst_2
   13:  ireturn
   14:  iconst_0
   15:  ireturn

}
 

 

分享到:
评论

相关推荐

    Java如何优雅地关闭资源try-with-resource及其异常抑制

    在 try-with-resource 语法中,如果在关闭资源时抛出异常,那么这个异常将被抑制,直到当前 try-catch 代码块执行完毕后,才会被抛出。这使得我们可以更好地处理异常。 try-with-resource 语法和异常抑制机制是 ...

    java基础及中级面试题+jvm面试题+集合面试题

    3. **控制结构**:包括条件语句(if-else,switch)和循环(for,while,do-while)。 4. **异常处理**:学习如何使用try-catch-finally语句进行错误处理。 5. **方法与重载**:理解方法的定义、调用,以及方法的...

    JAVA经典教程

    2. Java基础语法:包括数据类型(基本类型和引用类型)、变量、运算符、控制流程语句(if-else, switch, for, while等)、方法定义、类与对象的创建和使用等。 3. 面向对象编程(OOP):Java是一种面向对象的编程...

    java第06章.异常机制.pdf

    异常处理可以有多种方式,传统的方式是通过if-else来处理,但这样做容易造成代码的混乱,难以维护。Java的异常处理机制通过将异常处理代码和业务代码分离,使得程序结构更加清晰,异常处理代码可以集中在特定的catch...

    2023年JAVA面试核心知识点整理(283页).pdf

    异常是 Java 语言的重要特性,可以通过 try-catch 语句捕获和处理异常。 Java 集合框架 * 集合框架概述:Java 集合框架是 Java 语言的重要组成部分,提供了多种集合类,包括 List、Set、Map 等。 * ArrayList 和 ...

    Java面试题合集最新版2024.zip

    控制流语句:熟悉if-else、switch、for、while等控制流语句的用法。 面向对象编程:深入理解Java中的类、对象、继承、封装和多态等概念。 异常处理:了解try-catch-finally块的使用,以及自定义异常的处理。 二、...

    2023年Java编程基础知识点汇总及习题集答案.docx

    条件转移知识点汇总包括 if 语句、if-else 语句、switch 语句、循环语句等知识点。 1. if 语句 if 语句用于判断条件是否满足,如果满足则执行特定的语句。 2. if-else 语句 if-else 语句用于判断条件是否满足,...

    java class反编译后的代码还原

    在这个过程中,可能会出现一些不正常的代码,例如label0 :_L1 MISSING_BLOCK_LABEL_30、JVM INSTR ret 7、JVM INSTR tableswitch1 3: default 269、JVM INSTR monitorexit、JVM INSTR monitorenter等。这些代码通常...

    java圣思园学笔记+文档(张龙)

    3. **异常处理**:了解如何使用try-catch-finally语句来捕获和处理程序运行时可能出现的错误。 4. **集合框架**:学习ArrayList、LinkedList、HashSet、HashMap等集合类的使用,以及泛型和迭代器的概念。 5. **IO...

    java教学课件:第4章 异常.ppt

    例如,通过使用`try-catch`块,当异常发生时,程序会立即跳转到相应的`catch`块进行处理,而不是在多层嵌套的`if-else`结构中寻找错误。 4.2 异常的分类 Java中的异常分为两大类:Error和Exception。Error是Java...

    良葛格Java学习笔记

    2. **控制结构**:包括条件语句(if-else、switch-case)和循环(for、while、do-while),用于根据特定条件执行代码或重复执行某些操作。熟练掌握这些可以编写出逻辑清晰的程序。 3. **函数与方法**:函数是代码的...

    Java编程基础课件

    接下来,我们还会学习控制流程语句,如条件语句(if-else)、循环(for、while和do-while)以及分支结构(switch-case),这些构成了程序逻辑的基础。此外,掌握方法的定义和调用,能够实现代码的复用和模块化。 类...

    Java 基础核心总结.pdf

    控制结构包括条件语句(if、if...else、if...else if...else)和循环语句(while、do...while、for)。这些结构用于根据不同的条件执行不同的代码块或重复执行某段代码。例如,一个简单的if语句: ```java int ...

    groovy基础语法.pdf

    Groovy是一种基于Java虚拟机(JVM)的敏捷开发语言,它融合了Python、Ruby和Smalltalk等语言的特性。Groovy语言能够与Java无缝集成,并且支持动态语言特性,包括动态类型、闭包和元编程等。Groovy的语法非常接近Java...

    Java基础核心总结.pdf

    Java通过try、catch、finally以及throw和throws关键字来处理异常情况。 5. Java的字符串处理:字符串是Java中非常重要的一个部分,Java提供了String类以及一系列的方法来处理字符串。 6. Java集合框架:Java集合...

    java基础核心学习笔记

    - 控制结构:包括条件语句(if-else)、循环(for、while、do-while)和分支结构(switch)。 - 函数(方法):Java中的函数是代码块,用于实现特定功能。函数可以返回值或不返回值。 2. **面向对象编程** - 类...

    二级JAVA笔试21_真题-无答案.pdf

    1. Java基础语法和数据类型:文件中涉及到Java基本数据类型如byte,以及基础的语法结构,例如if-else条件判断,for循环,while循环,try-catch异常处理等。 2. Java类和对象:解释了类的定义以及对象的创建和使用,...

Global site tag (gtag.js) - Google Analytics