Skip to content

kitsook/casting-unnecessary

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Performance impact of unnecessary casting

A simple test to see how unnecessary casting will cost in Java.

// direct cast to double
methodWithDoubleAsParam((double)Integer.parseInt(anInteger))

vs

// explicitly cast to float and implicitly to double
methodWithDoubleAsParam((float)Integer.parseInt(anInteger))

Quick start

git clone https://github.com/kitsook/casting-unnecessary.git
./gradlew build
./gradlew bootRun --args="1"

Output:

> Task :bootRun

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/

......

Extra time spent for each extra casting: 2.00ns

What is going on

Looking at the generated bytecode (tested with openjdk 11.0.11 2021-04-20) by running

javap -c -p build/classes/java/main/net/clarenceho/test/castingunnecessary/UnnecessaryCastingApplication.class

Output:

......
  private void lambda$run$2(java.lang.String[], int);
    Code:
       0: aload_0
       1: aload_1
       2: iconst_0
       3: aaload
       4: invokestatic  #20                 // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
       7: i2f
       8: f2d
       9: invokevirtual #21                 // Method dummy:(D)V
      12: return

  private void lambda$run$1(java.lang.String[], int);
    Code:
       0: aload_0
       1: aload_1
       2: iconst_0
       3: aaload
       4: invokestatic  #20                 // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
       7: i2d
       8: invokevirtual #21                 // Method dummy:(D)V
      11: return
......

For direct casting, a single i2d (integer to double) instruction is used. With extra casting, it used i2f to convert integer to float and then f2d to convert the float to double.

About

Performance impact of unnecessary casting

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages