Worklight:调用 java 静态方法与对象创建的性能

Posted

技术标签:

【中文标题】Worklight:调用 java 静态方法与对象创建的性能【英文标题】:Worklight: Performance of calling java static method vs object creation 【发布时间】:2013-03-03 07:05:26 【问题描述】:

我需要建议我将自定义 java 方法设为静态还是通过适配器从 java 对象访问?

我的场景是:成千上万的用户正在进行交易,每个用户都在一次又一次地访问相同的方法,只是更改了特定于该用户或交易的一些值。

现在如果我将它们作为静态方法,那么它会给用户带来问题,因为我们知道适配器调用是异步的......所以如果多个用户同时调用相同的方法,那么它会导致问题返回价值观不同?

或者,如果我通过首先声明该类对象然后访问方法,提供参数来访问所有自定义 java 方法....所以当多个用户同时访问同一个方法时,他们将获得正确/相关数据?

从性能的角度来看,哪种方法更好,静态方法是否会给用户带来错误的数据.....一个用户的数据给另一个用户,而其他用户的数据给另一个人。

谢谢 阿都阿哈德

------------我的代码是这样的---

java code:

  public static String getBalanceSummaries(String userAct)
            String replyMsg="";
    try 

    replyMsg = getBalanceStatementfromMQ(userAct);

    catch(Exception e) 

    return replyMsg;

    

  -----WL Adapter code:------

    function showAllBalace(userActNo)
        return
            result: com.my.package.getBalanceSummaries(userActNo)
        ;
    

【问题讨论】:

这完全取决于你的方法做什么以及它如何与对象的成员(如果有的话)交互。如果您只有一个简单的public static double add(double a, double b) return a+b; ,那么您当然可以通过多个线程并行使用它。更多关于你正在做什么的信息会有所帮助 @AviramSegal 是的,类似“public static String getMyBalanceMessages(String userAct) return xmlBalanceStatements; ” 现在如果多个用户同时通过 WL 适配器访问它,会带来不同的结果吗?否则它会带来正确的结果.....因为适配器调用是异步的......谢谢 xmlBalanceStatements 是如何定义的?它是一个常数吗? userAct 参数的意义何在,因为您根本不使用它?向我们展示真实的代码。代码很重要。 【参考方案1】:

我相信您将静态方法与静态 字段 混淆了。静态方法只是与对象的任何特定实例无关的代码 - 基本上,任何不使用 thissuper 引用的方法都可能是静态的候选方法,前提是它们没有覆盖另一个方法并且是不打算被覆盖。静态方法没有任何额外的问题 w.r.t.与“普通”方法相比,多线程。

另一方面,

静态字段根据定义在所有线程之间共享,并且对它们的访问应该像任何共享资源一样受到保护。 任何使用静态字段的方法,无论方法本身是否是静态的,都应该检查并发问题。

就性能而言,有轶事证据表明,与普通虚拟方法相比,静态方法可能会提供性能改进,但老实说,在分析器告诉我之前我不会担心它。过早的优化是万恶之源……

【讨论】:

是的,我知道区别。但我不确定 WL 适配器如何在内部处理它们。例如,如果我访问适配器中的静态方法,或者如果我首先创建对象然后访问方法..两者都会以相同的方式在内部处理...以相同的方式调用..当并发用户访问它们时? Bcz 如果先创建对象然后访问方法,那么每次创建一个对象时都会产生 GC 的开销。但另一方面,如果多个用户访问 WL 适配器中的静态方法,那么它会给出不同的结果吗? Worklight 适配器如何与 java 交互。谢谢

以上是关于Worklight:调用 java 静态方法与对象创建的性能的主要内容,如果未能解决你的问题,请参考以下文章

java中静态方法和实例方法的区别

Java学习笔记八---类的静态变量与静态方法的访问与调用方式

java static 方法与普通方法区别

java对象与类

Scala核心编程_第08章 面向对象编程(中级补充)--java动态绑定与静态绑定

Scala核心编程_第08章 面向对象编程(中级补充)--java动态绑定与静态绑定