如何获取“方法”的实际执行时间使用 Java 反射?
大家好,谁能帮我解决这个问题
>我正在使用 Java Reflection 执行 Java 类的方法。现在我想获取方法的实际执行时间,无论反射所花费的时间。
AClass 类{ //方法
void abc(){ System.out.println("你好世界"); }
//现在使用反射我将调用这个方法
AClass aObj=new AClass();
Class _cObj=Class.forName(" A类”); Method _meth_Invoke=cObj.getMethod("abc",null);
//现在听一下,如果我在执行这个 (Method.invoke()) 语句之前使用时间戳,然后在采取另一个时间戳并减去它(使用“System.nanoTime()”)之后,然后我得到两个方法 abc()+ invoke() 方法的时间。这就是我只想知道实际执行的问题方法abc()的时间。
_meth_Invoke.invoke(aObj,...); }
请指导我,我花了很多时间冲浪,但无法找到合适的材料。
Hi can anyone help me in this issue
>I am executing a method of a Java class using Java Reflection.Now i want to get the real execution time of a method regardless the time taken by reflection.
class AClass {
//method
void abc(){
System.out.println("Hello World");
}
//Now using reflection i am going to invoke this method
AClass aObj=new AClass();
Class _cObj=Class.forName("AClass");
Method _meth_Invoke=cObj.getMethod("abc",null);
//Now hear as u see that if i take time Stamp before executing this (Method.invoke())statement and then after take another time stamp and subtract it(using "System.nanoTime()" ), then i get the TIME of both methods abc()+ invoke() method.And thats the problem that i just want to get know the actual execution time of Method abc().
_meth_Invoke.invoke(aObj,...);
}
Kindly guide me i spent a lot of time on surfing but cant fine the right material for it.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用探查器来查明程序执行该方法花费了多少时间。如果您使用的是 Oracle 的 JDK 6(或更高版本),则可以使用 JVisualVM 包含在 JDK 中用于分析。
通过在命令提示符窗口中输入命令
jvisualvm
来启动它。Use a profiler to find out how much time the program is spending executing the method. If you're using Oracle's JDK 6 (or newer), you could use JVisualVM which is included with the JDK for profiling.
Start it by entering the command
jvisualvm
in a command prompt window.通过反射调用方法的成本通常为亚微秒。您可以在您的机器上进行基准测试来确认这一点。如果您尝试对小于 10 微秒的方法进行基准测试,则很难准确地做到这一点。如果比这个多得多,我就不会担心。
The cost of calling a Method via reflection is typically sub-microsecond. You can benchmark this on your machine to confirm this. If you are trying to benchmark a method which is less than 10 micro-seconds this is very hard to do accurately. If its much more than this I wouldn't worry about it.
您可以通过反射测量调用空方法 (
void xyz() {}
) 所需的时间,并从调用abc()
方法测量的时间中减去该时间通过反射。这是您可以通过编程获得的最准确的结果。
否则,您必须使用 JVisualVM 之类的分析器。
You can measure the time it takes to call an empty method (
void xyz() {}
) via reflection and subtract it from the time you measured calling theabc()
method via reflection.This is as accurate as you can get programmatically.
Otherwise you have to use a profiler like JVisualVM.