Domanda

Attualmente stiamo facendo alcune iterazioni e altre operazioni utilizzando x++; in cui x è un Integer e non un int.

Le operazioni possono essere ripetute per alcune operazioni utente sul nostro sistema, ma niente di troppo complesso o numerose come un'applicazione matematica, massimo fino a 10000 volte per transazione utente.

Questa casella di inscatolamento e successive farà influenzare le nostre prestazioni da alcuni milliseconds ?

È stato utile?

Soluzione

http://download.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html

"The performance of the resulting list is likely to be poor, as it boxes or unboxes on every get or set operation. It is plenty fast enough for occasional use, but it would be folly to use it in a performance critical inner loop.

So when should you use autoboxing and unboxing? Use them only when there is an “impedance mismatch” between reference types and primitives, for example, when you have to put numerical values into a collection. It is not appropriate to use autoboxing and unboxing for scientific computing, or other performance-sensitive numerical code. An Integer is not a substitute for an int; autoboxing and unboxing blur the distinction between primitive types and reference types, but they do not eliminate it."

Altri suggerimenti

Yes, there is a performance impact. The equivalent code produced for ++x involves creating a new Integer object each time. x++ additionally creates a temporary variable to store the previous integer reference, and some manipulation. You can verify this by disassembling the class file.

The speed of auto-boxing depends on the JVM version you're using, the range of the actual numbers you're working with, and your GC settings. See this really interesting in-depth article on (un)boxing performance.

Basically, the JVM caches a number of the Integer objects so it doesn't need to create the "common" ones every time. You can configure this cache size.

As for the specific question: Will your operation be milliseconds slower if you use primitives versus autoboxing? This entirely depends on the size of the list and how often it gets called. It should be easy (i think!) to test the primitive alternative's performance.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top