Java执行速度

时间:2010-06-21 23:11:17

标签: java object performance

我是Java编程的新手 我很好奇执行的速度以及对象的创造和破坏的速度 我有几种方法如下:

private static void getAbsoluteThrottleB() {
    int A = Integer.parseInt(Status.LineToken.nextToken());
    Status.AbsoluteThrottleB=A*100/255;
    Log.level1("Absolute Throttle Position B: " + Status.AbsoluteThrottleB);
}

   private static void getWBO2S8Volts() {
        int A = Integer.parseInt(Status.LineToken.nextToken());
        int B = Integer.parseInt(Status.LineToken.nextToken());
        int C = Integer.parseInt(Status.LineToken.nextToken());
        int D = Integer.parseInt(Status.LineToken.nextToken());
        Status.WBO2S8Volts=((A*256)+B)/32768;
        Status.WBO2S8VoltsEquivalenceRatio=((C*256)+D)/256 - 128;

        Log.level1("WideBand Sensor 8 Voltage: " + Double.toString(Status.WBO2S8Volts));
        Log.level1("WideBand Sensor 8 Volt EQR:" + Double.toString(Status.WBO2S8VoltsEquivalenceRatio));

创建一个单独的方法处理数据是否明智,因为它是重复的?或者以单一方法执行它会更快吗?我有几个需要重写的内容,我想知道它是否真的可以提高执行速度,或者它是否同样好,或者是否有一些指令可以创建一个新方法。

基本上,使用单个方法处理对象与使用其他方法处理多个类似对象的速度更快或何时变得更快?

似乎在运行时,拉一个新变量,然后对它执行数学运算比创建一个新方法然后拉一个变量然后对它执行数学运算更快。我的问题确实是速度所在的地方..

这些方法都只被调用来读取数据并设置Status.Variable。我班上有近200种生成数据的方法。

3 个答案:

答案 0 :(得分:4)

在方法内部或外部调用一段代码的速度差异可以忽略不计。特别是与使用正确的算法进行比较。

无论如何,我建议您使用该方法,不是为了性能而是为了可维护性。如果您需要更改一行代码,结果会引入错误或其他内容,并且您在50个不同的地方复制/粘贴此代码段,那么更改(和发现)比在一个地方更难更改。

所以,不要担心使用方法带来的性能损失,因为它几乎没有(甚至更好,VM可能内联一些调用)

答案 1 :(得分:1)

  

我对执行速度以及对象的创建和销毁速度感到好奇。

在Java中创建对象的速度非常快,除非在极端和异常情况下,否则您不必担心它。

在现代Java实现中销毁对象的成本为零......除非您使用终结器。很少有情况你甚至应该认为使用终结器。

  

基本上,使用单个方法处理对象与使用其他方法处理多个类似对象的速度更快或何时变得更快?

相对于正在发生的其他事情,差异可以忽略不计。


正如@ S.Lott所说:“请不要微观优化”。专注于编写简单,清晰,准确和正确的代码,并使用最合适的算法。当您有明确的关键瓶颈证据时,只有“微观”才能优化。

答案 2 :(得分:1)

我认为S. Lott对你的问题的评论可能完美地指出了问题 - 在你确定所讨论的代码确实需要它之前,没有必要优化代码。你最有可能最终会花费大量的时间和精力来获得收益,否则。

我还将支持第二个问题,因为调用单独方法和调用内联代码之间的执行时间差异可以忽略不计(这实际上是我想要发布的内容,但他有点打败了我)。它甚至可能为零,如果优化编译器或JIT决定无论如何内联方法(我不确定是否有任何这样的Java编译器/ JIT)。

然而,单独的方法方法有一个优点 - 如果将数据处理代码分离为单独的方法,理论上可以通过从单独的线程调用该方法来实现一些提高的性能,从而解耦(可能)耗时)处理其他代码中的代码。