我有一个java程序,我想要做的是以某种方式存储程序运行时运行的所有函数。但我似乎无法在这件事上找到任何东西。然后还要找出哪个功能已经运行了最多的时间。
我的想法是我可以创建一个数组,为每个函数分配一个带有函数名称的变量,然后每次运行时都将char返回到数组中,并在最后打印出数组。但我不知道如何将它们存储在不同的arr [i]我每次都运行相同的功能,也不知道我怎么会找到最多跑的那个,任何帮助都非常感激。
答案 0 :(得分:0)
我建议为每个方法创建一个布尔值,并在方法的开头将boolean设置为true。然后使用java.io类创建一个save方法,并将布尔名称和值保存到该文件中。
EDIT 我刚刚意识到我把布尔而不是整数。每个方法都有一个整数,并为每个方法运行执行整数++。
答案 1 :(得分:0)
AOP非常适合这样的事情。
有关使用Spring AOP库的示例,请参阅https://dzone.com/articles/monitoring-performance-spring。
答案 2 :(得分:0)
我尝试了一个可能对你有帮助的程序。我创建了一个Interceptor类,它将打印出您可能需要的细节。你没有提到任何框架,所以我给你一个简单的旧java示例程序。
这种方法还可以灵活地在程序执行结束时打印所有细节。
public class Test {
public void demoMethod() throws InterruptedException{
Intercept.printMethodStartTime(System.currentTimeMillis());
Intercept.printMethodName(Thread.currentThread().getStackTrace()[1].getMethodName());
Thread.sleep(5000);
Intercept.printMethodEndTime(System.currentTimeMillis());
}
public static void main(String[] args) throws InterruptedException {
new Test().demoMethod();
}
}
class Intercept{
private static Long startTime;
private static Long endTime;
public static void printMethodName(String methodName){
System.out.println("Current method name: "+methodName);
}
public static void printMethodStartTime(Long time){
startTime = time;
System.out.println("Method started at "+startTime);
}
public static void printMethodEndTime(Long time){
endTime = time;
System.out.println("Method ended at "+endTime);
printMethodRunTime();
}
public static void printMethodRunTime(){
System.out.println("Method ran for "+((endTime-startTime)/1000)+" seconds");
}
}