识别同一个调用堆栈中的重复调用 - java

时间:2017-10-11 10:05:27

标签: java performance methods parameters duplicates

需要一些关于Java性能改进的帮助。有没有办法了解同一个调用堆栈中是否存在任何重复的方法调用(具有相同参数值的相同方法)。

为了更清楚:

MethodA(int A) - 返回int B.

让我们说这个方法是从其他类和其他模块中调用的。在单个长链式事务中,如果使用相同的输入参数MethodA(1)多次调用此方法,则会降低性能。相反,我认为更好的方法必须是每次使用第一次调用的结果,而不是每次都调用MethodA(1)

除了手动分析所有内容之外,是否可以识别重复的呼叫。现在我试图在本地缓存结果,以避免使用相同的查询参数调用相同的方法。但仍然试图识别重复的调用,以便将其缩小到根本原因。

任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

你必须确定给定的方法没有副作用,因为在每个具有参数给定值的调用中,总是会返回相同的值。

您可以使用CGLIB创建方法/类代理,然后使用任何缓存实现,返回相同输入的已知或缓存结果。

示例(参考https://gist.github.com/ksauzz/1563486):

List<String> proxyAry = (List<String>)Enhancer
.create(TargetClass.class, new MyInvocationHandler(ary));

static class MyInvocationHandler implements MethodInterceptor {

    private TargetClass<String> ary;

    public MyInvocationHandler(TargetClass<String> ary) {
        this.ary = ary;
    }

    @Override
    public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
        if (isFouthGet(method, args)) {
            return "Bow!!";
        }
        return proxy.invoke(ary, args);
    }