当前位置: 首页 > 科技观察

Java反射慢在哪里?

时间:2023-03-15 10:31:34 科技观察

反射到底是如何影响性能的?这引起了我的反思。是的,在解释某个观点的时候确实需要说明原因,证明这个观点是正确的。虽然反射影响性能是众所周知的,我也确实研究过反射是否存在性能问题,但我并没有在文章中详细描述。这让我想起网上很多资料只会告诉你结论,不会说明原因。结果很多学到的东西都是死记硬背,并没有真正掌握。当其他人亲自询问或遇到同样的问题时,他们会目瞪口呆。向上。反射真的有性能问题吗?还是用上一篇文章中的demo。为了将问题放大,找到共性,采用了逐渐扩大测试次数,每次测试取平均值的方法。同一个方法,直接调用方法,反射调用方法,直接调用方法。该方法对应的实例和反射调用方法对应的实例从1到1000000测试,每隔一个数量级:测试代码如下(Person、ICompany、ProgramMonkey这三个类在之前贴过article):publicclassReflectionPerformanceActivityextendsActivity{privateTextViewmExecuteResultTxtView=null;privateEditTextmExecuteCountEditTxt=null;privateExecutormPerformanceExecutor=Executors.newSingleThreadExecutor();privatestaticfinalintAVERAGE_COUNT=10;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_reflection_performance_layout);mExecuteResultTxtView=(TextView)findViewById(R.id.executeResultTxtId);mExecuteCountEditTxt=(EditText)findViewById(R.id.executeCountEditTxtId);}publicvoidonClick(Viewv){switch(v.getId()){caseR.id.executeBtnId:{执行();}休息;默认值:{}break;}}privatevoidexecute(){mExecuteResultTxtView.setText("");mPerformanceExecutor.execute(newRunnable(){@Overridepublicvoidrun(){longcostTime=0;intexecuteCount=Integer.parseInt(mExecuteCountEditTxt.getText().toString());longerflectMethodCostTime=0,normalMethodCostTime=0,reflectFieldCostTime=0,normalFieldCostTime=0;updateResultTextView(executeCount+》毫秒级耗时测试");for(intindex=0;index

最新推荐
猜你喜欢