java反射耗時測試案例解析
java反射相對與普通的對象調(diào)用原理上來說更加耗時,在調(diào)用次數(shù)較少的情況下可忽略性能損失,但當(dāng)調(diào)用次數(shù)非常多時,需要考慮到此問題,即調(diào)用次數(shù)過多時不宜使用反射,以下舉例:
package com.test.reflection;
import java.lang.reflect.Method;
public class ReflectionDemo {
public static void main(String[] args) throws Exception {
// 常規(guī)方式
Student student = new Student();
long startNormal = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
student.setName("hello");
}
System.out.println("timeNormal=" + (System.currentTimeMillis() - startNormal));
//反射方式
Class<?> cla=Class.forName("com.test.reflection.Student");
long startReflection = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
Method method=cla.getDeclaredMethod("setName", String.class);
method.invoke(cla.newInstance(), "hello");
}
System.out.println("timeReflection=" + (System.currentTimeMillis() - startReflection));
}
}
運(yùn)行結(jié)果:
timeNormal=8 timeReflection=537
這是在簡單使用反射調(diào)用某個方法的場景下1000000調(diào)用的性能差距。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot中MyBatis-Flex的集成和使用實(shí)現(xiàn)
MyBatis-Flex是一個基于MyBatis的數(shù)據(jù)訪問框架,MyBatis-Flex能夠極大地提高我們的開發(fā)效率和開發(fā)體驗(yàn),本文主要介紹了SpringBoot中MyBatis-Flex的集成和使用實(shí)現(xiàn),具有一定的參考價值,感興趣的可以了解一下2023-12-12
SpringBoot 整合Tess4J庫實(shí)現(xiàn)圖片文字識別案例詳解
Tess4J是一個基于Tesseract OCR引擎的Java接口,可以用來識別圖像中的文本,說白了,就是封裝了它的API,讓Java可以直接調(diào)用,今天給大家分享一個SpringBoot整合Tess4j庫實(shí)現(xiàn)圖片文字識別的小案例2023-10-10
Spring中@Async注解實(shí)現(xiàn)異步調(diào)詳解
在本篇文章里小編給大家分享的是關(guān)于Spring中@Async注解實(shí)現(xiàn)異步調(diào)詳解內(nèi)容,需要的朋友們可以學(xué)習(xí)下。2020-04-04
SpringCloud中使用Sentinel實(shí)現(xiàn)限流的實(shí)戰(zhàn)
限流在很多地方都可以使用的到,本篇博客將介紹如何使用SpringCloud中使用Sentinel實(shí)現(xiàn)限流,從而達(dá)到服務(wù)降級的目的,感興趣的可以了解一下2022-01-01
Java使用Ajax實(shí)現(xiàn)跨域上傳圖片功能
這篇文章主要介紹了Java使用Ajax實(shí)現(xiàn)跨域上傳圖片功能,需要的朋友可以參考下2017-09-09

