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】:
我相信您将静态方法与静态 字段 混淆了。静态方法只是与对象的任何特定实例无关的代码 - 基本上,任何不使用 this
或 super
引用的方法都可能是静态的候选方法,前提是它们没有覆盖另一个方法并且是不打算被覆盖。静态方法没有任何额外的问题 w.r.t.与“普通”方法相比,多线程。
静态字段根据定义在所有线程之间共享,并且对它们的访问应该像任何共享资源一样受到保护。 任何使用静态字段的方法,无论方法本身是否是静态的,都应该检查并发问题。
就性能而言,有轶事证据表明,与普通虚拟方法相比,静态方法可能会提供性能改进,但老实说,在分析器告诉我之前我不会担心它。过早的优化是万恶之源……
【讨论】:
是的,我知道区别。但我不确定 WL 适配器如何在内部处理它们。例如,如果我访问适配器中的静态方法,或者如果我首先创建对象然后访问方法..两者都会以相同的方式在内部处理...以相同的方式调用..当并发用户访问它们时? Bcz 如果先创建对象然后访问方法,那么每次创建一个对象时都会产生 GC 的开销。但另一方面,如果多个用户访问 WL 适配器中的静态方法,那么它会给出不同的结果吗? Worklight 适配器如何与 java 交互。谢谢以上是关于Worklight:调用 java 静态方法与对象创建的性能的主要内容,如果未能解决你的问题,请参考以下文章
Java学习笔记八---类的静态变量与静态方法的访问与调用方式