• final效率分析


    1. 被final修饰的类

    public final class FinalClass {
    
    	public void getJava() {
    		String str1 = "Java ";
    		String str2 = "final ";
    		for (int i = 0; i < 10000; i++) {
    			str1 += str2;
    		}
    	}
    
    	public void getJava_Final() {
    		String str1 = "Java ";
    		String str2 = "final ";
    		for (int i = 0; i < 10000; i++) {
    			str1 += str2;
    		}
    	}
    
    }

    2: 被final修饰的方法

    public class FinalFunction {
    
    	public void getJava() {
    		String str1 = "Java ";
    		String str2 = "final ";
    		for (int i = 0; i < 10000; i++) {
    			str1 += str2;
    		}
    	}
    
    	public final void getJava_Final() {
    		String str1 = "Java ";
    		String str2 = "final ";
    		for (int i = 0; i < 10000; i++) {
    			str1 += str2;
    		}
    	}
    }

    3. 测试类:

    public class TestFinal {
    
    	@Test
    	public void test5() {
    		FinalClass finalClass = new FinalClass();
    		FinalFunction finalFunction = new FinalFunction();
    		long t1=0;
    		long t2=0;
    		long t3=0;
    		long t4=0;
    		long t5=0;
    		
    		long tim1 = 0;
    		long tim2 = 0;
    		long tim3 = 0;
    		long tim4 = 0;
    		long tim5 = 0;
    		for(int j=0; j<10;j++){
    			System.out.println("正常执行:========================");
    			long start = System.nanoTime();
    			String str1 = "Java ";
    			String str2 = "final ";
    			for (int i = 0; i < 10000; i++) {
    				str1 += str2;
    			}
    			
    			tim1 = (System.nanoTime() - start)/1000000;
    			System.out.println("正常的执行时间为:" + (tim1)
    					+ "毫秒时间");
    			t1 = t1 + tim1;
    			System.out.println("finalClass:=====================");
    			start = System.nanoTime();
    			finalClass.getJava();
    			tim2 = (System.nanoTime() - start)/1000000;
    			System.out.println("调用不带final修饰的方法执行时间为:"
    					+ tim2 + "毫秒时间");
    			t2 = t2 + tim2;
    			start = System.nanoTime();
    			finalClass.getJava_Final();
    			tim3 = (System.nanoTime() - start)/1000000;
    			System.out.println("调用final修饰的方法执行时间为:"
    					+ tim3 + "毫秒时间");
    			t3 = t3 + tim3;
    			System.out.println("finalFunction:=====================");
    			start = System.nanoTime();
    			finalFunction.getJava();
    			tim4 = (System.nanoTime() - start)/1000000;
    			System.out.println("调用不带final修饰的方法执行时间为:"
    					+ tim4 + "毫秒时间");
    			t4 = t4 + tim4;
    			start = System.nanoTime();
    			finalFunction.getJava_Final();
    			tim5 = (System.nanoTime() - start)/1000000;
    			System.out.println("调用final修饰的方法执行时间为:"
    					+ tim5 + "毫秒时间");
    			t5 = t5+ tim5;
    		}
    		System.out.println("正常执行:========================");
    		System.out.println("正常的执行10次平均时间为:" + t1/10 + "毫秒时间");
    		System.out.println("finalClass:=====================");
    		System.out.println("调用不带final修饰的方法执行10次平均时间为:"+ t2/10 + "毫秒时间");
    		System.out.println("调用final修饰的方法执行10次平均时间为:" + t3/10 + "毫秒时间");
    		System.out.println("finalFunction:=====================");
    		System.out.println("调用不带final修饰的方法执行10次平均时间为:" + t4/10 + "毫秒时间");
    		System.out.println("调用final修饰的方法执行10次平均时间为:"+ t5/10 + "毫秒时间");
    	}
    }

    4. 结果

    正常执行:========================
    正常的执行时间为:1573毫秒时间
    finalClass:=====================
    调用不带final修饰的方法执行时间为:1410毫秒时间
    调用final修饰的方法执行时间为:1402毫秒时间
    finalFunction:=====================
    调用不带final修饰的方法执行时间为:1285毫秒时间
    调用final修饰的方法执行时间为:1339毫秒时间
    正常执行:========================
    正常的执行时间为:1523毫秒时间
    finalClass:=====================
    调用不带final修饰的方法执行时间为:1444毫秒时间
    调用final修饰的方法执行时间为:1457毫秒时间
    finalFunction:=====================
    调用不带final修饰的方法执行时间为:1446毫秒时间
    调用final修饰的方法执行时间为:1480毫秒时间
    正常执行:========================
    正常的执行时间为:1355毫秒时间
    finalClass:=====================
    调用不带final修饰的方法执行时间为:1321毫秒时间
    调用final修饰的方法执行时间为:1330毫秒时间
    finalFunction:=====================
    调用不带final修饰的方法执行时间为:1435毫秒时间
    调用final修饰的方法执行时间为:1328毫秒时间
    正常执行:========================
    正常的执行时间为:1277毫秒时间
    finalClass:=====================
    调用不带final修饰的方法执行时间为:1350毫秒时间
    调用final修饰的方法执行时间为:1390毫秒时间
    finalFunction:=====================
    调用不带final修饰的方法执行时间为:1323毫秒时间
    调用final修饰的方法执行时间为:1271毫秒时间
    正常执行:========================
    正常的执行时间为:1406毫秒时间
    finalClass:=====================
    调用不带final修饰的方法执行时间为:1352毫秒时间
    调用final修饰的方法执行时间为:1336毫秒时间
    finalFunction:=====================
    调用不带final修饰的方法执行时间为:1267毫秒时间
    调用final修饰的方法执行时间为:1436毫秒时间
    正常执行:========================
    正常的执行时间为:1322毫秒时间
    finalClass:=====================
    调用不带final修饰的方法执行时间为:1308毫秒时间
    调用final修饰的方法执行时间为:1270毫秒时间
    finalFunction:=====================
    调用不带final修饰的方法执行时间为:1431毫秒时间
    调用final修饰的方法执行时间为:1315毫秒时间
    正常执行:========================
    正常的执行时间为:1273毫秒时间
    finalClass:=====================
    调用不带final修饰的方法执行时间为:1300毫秒时间
    调用final修饰的方法执行时间为:1368毫秒时间
    finalFunction:=====================
    调用不带final修饰的方法执行时间为:1090毫秒时间
    调用final修饰的方法执行时间为:1099毫秒时间
    正常执行:========================
    正常的执行时间为:1081毫秒时间
    finalClass:=====================
    调用不带final修饰的方法执行时间为:1133毫秒时间
    调用final修饰的方法执行时间为:1079毫秒时间
    finalFunction:=====================
    调用不带final修饰的方法执行时间为:1089毫秒时间
    调用final修饰的方法执行时间为:1068毫秒时间
    正常执行:========================
    正常的执行时间为:1111毫秒时间
    finalClass:=====================
    调用不带final修饰的方法执行时间为:1098毫秒时间
    调用final修饰的方法执行时间为:1086毫秒时间
    finalFunction:=====================
    调用不带final修饰的方法执行时间为:1113毫秒时间
    调用final修饰的方法执行时间为:1046毫秒时间
    正常执行:========================
    正常的执行时间为:1144毫秒时间
    finalClass:=====================
    调用不带final修饰的方法执行时间为:1057毫秒时间
    调用final修饰的方法执行时间为:1114毫秒时间
    finalFunction:=====================
    调用不带final修饰的方法执行时间为:1094毫秒时间
    调用final修饰的方法执行时间为:1064毫秒时间
    正常执行:========================
    正常的执行10次平均时间为:1306毫秒时间
    finalClass:=====================
    调用不带final修饰的方法执行10次平均时间为:1277毫秒时间
    调用final修饰的方法执行10次平均时间为:1283毫秒时间
    finalFunction:=====================
    调用不带final修饰的方法执行10次平均时间为:1257毫秒时间
    调用final修饰的方法执行10次平均时间为:1244毫秒时间
    

    5. 总结

    基本上带final的效率比不加稍微快点,但也不是很明显。同样这个测试跑了多次,有时带final的效率比不带final的低,个人觉得final在效率的提升上不是很明显。

    final的用途主要是它修饰在类,方法,变量上体现的一些特性上。

  • 相关阅读:
    站点防攻击之禁止国外ip
    docker 安装rabbitMQ
    【转】浅析支付系统的整体架构
    【转】MQ详解及四大MQ比较
    SQL server 中的dbo、guest
    网站加载速度的优化(1):优化前端页面
    【转】Apache ab压力测试
    Asp.Net Core 部署发布后EFCore数据库断连和Google浏览器无法存储Cookie
    C# 使用nuget.exe发布类库及更新类库
    .net core 读取Excal文件数据及注意事项
  • 原文地址:https://www.cnblogs.com/marcotan/p/4256911.html
Copyright © 2020-2023  润新知