Skip to content

RustamKuramshin/java-performance

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

3 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

ИсслСдованиС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Java-ΠΊΠΎΠ΄Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΈΠΊΡ€ΠΎΠ±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΎΠ² Π½Π° JMH

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎ Java Microbenchmark Harness (JMH) здСсь -> https://github.com/openjdk/jmh

Π₯ΠΎΡ€ΠΎΡˆΠ°Ρ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π° ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ JVM:

  • Π‘ΠΊΠΎΡ‚Ρ‚ ΠžΡƒΠΊΡ "Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Java. Вюнинг ΠΊΠΎΠ΄Π° Π½Π° Java 8, 11 ΠΈ дальшС"

  • Эванс, Π“ΠΎΡ„, Ньюланд "Java. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² JVM"

Запуск Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΎΠ²

ΠŸΠ΅Ρ€Π΅Π΄ запуском ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅:

mvn clean install
java -jar target/benchmarks.jar [имя класса Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ°]

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ²

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΎΠ² JMH ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ содСрТат нСсколько ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… столбцов, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… прСдоставляСт Π²Π°ΠΆΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.

  • Benchmark: Π­Ρ‚ΠΎ имя тСста. Π’ вашСм случаС, FactorialBenchmark.loopFactorial ΠΈ FactorialBenchmark.recursiveFactorial ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ°: ΠΎΠ΄ΠΈΠ½ с цикличСской Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ с рСкурсивной.

(n): Π­Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ Π² Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ. Π’ вашСм случаС, это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ n для Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. ЗначСния 10 ΠΈ 20 ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ Π±Ρ‹Π» Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ для Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»ΠΎΠ² этих чисСл.

Mode: Π Π΅ΠΆΠΈΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ выполнялся Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ. thrpt ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ "throughput", Ρ‚.Π΅. пропускная ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ. Π­Ρ‚ΠΎ ΠΌΠ΅Ρ€Π° Ρ‚ΠΎΠ³ΠΎ, сколько ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² сСкунду Π±Ρ‹Π»ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ (ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² сСкунду).

Cnt: ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ (measurements) Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹.

Score: Π‘Ρ€Π΅Π΄Π½Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ пропускной способности для всСх ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ. Π­Ρ‚ΠΎ основной ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π’ вашСм случаС, ΠΎΠ½ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, сколько Ρ€Π°Π· ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Π·Π° сСкунду. НапримСр, для loopFactorial с n = 10 ваш ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 236 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² Ρ€Π°Π· Π² сСкунду.

Error: ΠŸΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΡŒ (стандартноС ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅) ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ. Она ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, насколько ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ Π±Ρ‹Π»ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ итСрациями Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ°. МСньшая ошибка ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.

Units: Π•Π΄ΠΈΠ½ΠΈΡ†Ρ‹ измСрСния для показатСля Score. Π’ вашСм случаС, это ops/s, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² сСкунду.

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡ Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ²

ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ½Π°Ρ Π‘ΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ: Π§Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² столбцС Score, Ρ‚Π΅ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π’ вашСм случаС, цикличСская рСализация (loopFactorial) оказалась быстрСС рСкурсивной (recursiveFactorial) для ΠΎΠ±ΠΎΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ n.

Π‘Ρ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ: МСньшая ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΡŒ (Error) ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·ΡƒΠ΅ΠΌΡƒΡŽ ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

ВлияниС Π Π°Π·ΠΌΠ΅Ρ€Π° Π—Π°Π΄Π°Ρ‡ΠΈ: Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΠΎΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сниТаСтся с ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ n. Π­Ρ‚ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ большиС значСния n Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ большС вычислСний для расчСта Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°.

Π­Ρ‚ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² Java.

About

Performance analysis of Java code using microbenchmarks with JMH

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published