`

大数据量下的trycatch 损耗大,还是if(object!=null)损耗大

阅读更多

今天和某个同事探讨一段代码的效率

getName1 效率高还是 getName 效率高。

我说getName1比较好,getName效率会比较差。因为有try catch性能会差。他说如果大多数情况下我test能确认不为空,那么是不是可以选getName。随后我做一下实验

 

java version "1.8.0_66"

Java(TM) SE Runtime Environment (build 1.8.0_66-b18)

Java HotSpot(TM) 64-Bit Server VM (build 25.66-b18, mixed mode)

 

public  String getName1(Test test) throws Exception{
   if(test!=null)
      return test.getName();
   else
      throw new Exception("test");

}
public  String getName(Test test) throws Exception{
   try {
      return test.getName();
   }catch (Exception e){
      throw e;
   }
        try {
//            while (index < 10) {
                long start1 = System.currentTimeMillis();
                for (int i = 0; i < 1000000000; i++) {
                    t.getName(test);
                }
                System.out.println("start1 time :" + (System.currentTimeMillis() - start1));
                long start2 = System.currentTimeMillis();

                for (int i = 0; i < 1000000000; i++) {
                    t.getName1(test);
                }

                System.out.println("start2 time :" + (System.currentTimeMillis() - start2));
//                index++;
//            }
        } catch (Exception e) {
            e.printStackTrace();
        }
用这段代码测试10次后得到的结果既然是平手。
如果还有朋友愿意测下别的jdk版本请将结果告诉我。
 }
分享到:
评论
1 楼 107192468a 2016-05-09  
将 1000000000 加大到10000000000 然后统计了10次运行的结果发现:
用if(test!=null)
尽然平均会比try{} catch {} 这种写法多上2000ms。
但是一旦真的出异常了,那么结局就是想反。代码如下
public class A {
	private static class Test {
		private String name;

		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}

	}

	public String getName1(Test test) throws Exception {
		if (test != null)
			return test.getName();
		else
			throw new Exception("test");

	}

	public String getName(Test test) throws Exception {
		try {
			return test.getName();
		} catch (Exception e) {
			throw e;
		}
	}

	public static void main(String[] args) {
		A t = new A();
		Test test = new Test();
		test.setName("123123");

		long start1 = System.currentTimeMillis();

		for (long i = 0; i < 10000000000L; i++) {
			
			try {
				if (i == 1000000000L){
					test = null;
				}
				if (i==1000000001L){
					test=new Test();
					test.setName("123123");
				}
				t.getName(test);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		System.out.println("start1 time :" + (System.currentTimeMillis() - start1));
		long start2 = System.currentTimeMillis();

		for (long i = 0; i < 10000000000L; i++) {
			try {
				if (i == 1000000000L){
					test = null;
				}
				if (i==1000000001L){
					test=new Test();
					test.setName("123123");
				}
				t.getName1(test);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		System.out.println("start2 time :" + (System.currentTimeMillis() - start2));
	}

}


java.lang.NullPointerException
at read.util.A.getName(A.java:27)
at read.util.A.main(A.java:50)
start1 time :13986
java.lang.Exception: test
at read.util.A.getName1(A.java:21)
at read.util.A.main(A.java:68)
start2 time :11423

如果代码有错,或者思路有错,请纠正

相关推荐

    trycatch.zip

    本示例中的"trycatch.zip"文件内容就是展示了如何在Golang中模拟`try...catch`和`try...catch...finally`。 Golang的核心错误处理方式是通过返回错误值。通常,函数会返回一个错误值,如果在执行过程中遇到问题,就...

    java数据库封装类

    = null) { pstmt = conn.prepareStatement(sql); } } catch (SQLException e) { e.printStackTrace(); } return pstmt; } public static PreparedStatement prepare(Connection conn, String ...

    JDBC连接数据库

    }finally{try {if(sta!=null){sta.close();sta=null;}if(con!=null){con.close();con=null;}} catch (SQLException e) {e.printStackTrace();}}}public ResultSet query(String sql){Connection con=null;Statement ...

    Java连接sqlserver2005

    = null) { rs.close(); rs = null; } if(stmt !=null){ stmt.close(); stmt = null; } if(conn != null){ conn.close(); conn = null; }...

    连接数据库

    = null) { rs.close(); } } catch (SQLException e) { System.out.println("rs关闭异常!"); }finally{ try { if (conn!= null) { conn.close(); } } catch (SQLException e) { System.out.println(...

    在Android的应用中实现网络图片异步加载的方法

    Bitmap&gt;&gt; cache = Collections.synchronizedMap(new ...= null) { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } } options.inJustDecodeBounds = false; int width = options.out

    文件内容读取类

    = null) {//使用readLine方法,一次读一行 wordList.add(s.trim()); } } catch (Exception e) { Logger.getLogger(FileUtil.class).info(e); return Collections.emptyList(); } finally { try { if (br !=...

    asp.net实现购物车的几种方法

    try { if (Session["logon"]!...=null||Request.Params["productID"]!="") { AddProID=Request["productID"]; UpdateShoppingCart(); Caculator(); } }// 在此处放置用户代码以初始化页面 }

    jspblog项目

    =null){ if(isFirst){ firstLine=tmp; isFirst=false; } index=tmp.indexOf("finename="); if(index!=-1){ String tailString = tmp.substring(index+10); if(tailString != ...

    ASP四级联动下拉菜单 (XML+Access)

    = null && m_oXMLDoc.xml != "" ) { objSelect.length = 0; aryXMLNodes = m_oXMLDoc.documentElement.selectNodes("TreeNode"); objSelect.options[0] = new Option("==全部=="); for (var i=0; i ; i++) ...

    Springboot全局异常捕获及try catch区别解析

    Springboot全局异常捕获及try catch区别解析 Springboot全局异常捕获是一种机制,用于捕获并处理应用程序中的异常情况,以便提供友好的用户体验和错误处理。try catch语句是Java语言中的一种异常处理机制,用于捕获...

    mysql blob to 向 file转换

    在 MySQL 数据库中,BLOB(Binary Large OBject)是一种二进制大对象类型,常用于存储图像、音频、视频和其他类型的文件。然而,在实际应用中,我们经常需要将 BLOB 数据转换为文件,以便在客户端上进行处理和显示。...

    关于io的一些代码

    =null) { out.println(str); } } catch(IOException e){ System.out.println(e); } finally{ try { if(in!=null) in.close(); if(out!=null) out.close(); }catch(IOException e){ System.out.println...

    jdbc-odbc的基本操作

    = null) { rs.close(); } if (pstmt != null) { pstmt.close(); } if (cn != null) { cn.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } ...

    oracle大数据块添加

    = null && dt.Rows.Count != 0) { bulkCopy.WriteToServer(dt); } } catch (Exception ex) { // Log.WriteLog(err, ex); } finally { conn.Close(); if (bulkCopy != null) bulkCopy.Close(); } }

    MediaEx.zip_The Exception

    try { // create a player to play the media specified in the URL URL mediaURL = new File(“Alarm.mp3”).toURL() Player mediaPlayer = Manager.createRealizedPlayer(mediaURL) Component video = ...

    中文分词检索系统

    =null) { String b = buffer; System.out.println("开始检索关键字:"+b); buffer = URLEncoder.encode(buffer, "UTF-8"); String url = "http://s.wanfangdata.com.cn/Paper.aspx?q=" + buffer + "&f=top"; ...

    jsp 留言板

    =null) rs.close(); } catch(Exception e) { e.printStackTrace(); } try { if (stmt!=null) stmt.close(); } catch(Exception e) { e.printStackTrace(); } try { if ...

    Java判空方法解析.pptx.pptx

    - 对象判空:`if (object != null) { ... }` - 字符串判空:除了检查`null`,还需要考虑字符串长度,即`if (string != null && !string.isEmpty()) { ... }` - 集合判空:使用`isEmpty()`方法,如`if (!...

    wpf的Excel分类导出数据(Aspose)

    = null) ErrorHappened(this, new StringEventArgs("缺少有效的工作表")); return null; } Worksheet ws = wb.Worksheets[0]; string areaKey = "区域"; int areaPos = -1; // 获取区域所在列号 this.m_...

Global site tag (gtag.js) - Google Analytics