Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ java: ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ C++ vs. Java vs. PHP vs. Python. ВСст Β«Π² Π»ΠΎΠ±Β» / Π₯Π°Π±Ρ€

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Π˜Π·ΠΌΠ΅Ρ€ΡΠ΅ΠΌ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° Java ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ JMH) / Π₯Π°Π±Ρ€

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π₯Π°Π±Ρ€!

Π­Ρ‚ΠΎ вводная ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΡ€ΠΎ Ρ‚ΠΎ, ΠΊΠ°ΠΊ слСдуСт Π΄Π΅Π»Π°Ρ‚ΡŒ тСсты ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π° JVM языках (java, kotlin, scala ΠΈ Ρ‚Π΄.). Она ΠΏΠΎΠ»Π΅Π·Π½Π° для случая, ΠΊΠΎΠ³Π΄Π° трСбуСтся Π² Ρ†ΠΈΡ„Ρ€Π°Ρ… ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΡ‚ использования ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

ВсС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π½Π° языкС kotlin ΠΈ для систСмы сборки gradle. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° доступСн Π½Π° github.

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ°

JMH

Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ остановимся Π½Π° основной части Π½Π°ΡˆΠΈΡ… Π·Π°ΠΌΠ΅Ρ€ΠΎΠ² β€” использовании JMH. Java Microbenchmark Harness β€” Π½Π°Π±ΠΎΡ€ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ для тСстирования ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Π΅Ρ…, Π³Π΄Π΅ ΠΏΠ°ΡƒΠ·Π° GC ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² Ρ€Π°Π·Ρ‹).

ΠŸΠ΅Ρ€Π΅Π΄ запуском тСста JMH ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ:

  1. Для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ вычислСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Ρ‘ N Ρ€Π°Π·, ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° N.
  2. Для этого трСбуСтся ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ запуск Π² Π²ΠΈΠ΄Π΅ Ρ†ΠΈΠΊΠ»Π° ΠΈ Π²Ρ‹Π·ΠΎΠ²Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Однако Π² этом случаС Π½Π° врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ повлияСт сам Ρ†ΠΈΠΊΠ», Π° Ρ‚Π°ΠΊΠΆΠ΅ сам Π²Ρ‹Π·ΠΎΠ² замСряСмой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. А ΠΏΠΎΡ‚ΠΎΠΌΡƒ вмСсто Ρ†ΠΈΠΊΠ»Π° Π±ΡƒΠ΄Π΅Ρ‚ вставлСн нСпосрСдствСнно ΠΊΠΎΠ΄ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π±Π΅Π· reflection ΠΈΠ»ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² runtime.

ПослС ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»ΠΊΠΈ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° тСстированиС ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π²ΠΈΠ΄Π° java -jar benchmarks.jar, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΡƒΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΏΠ°ΠΊΠΎΠ²Π°Π½Ρ‹ Π² ΠΎΠ΄ΠΈΠ½ jar Ρ„Π°ΠΉΠ».

JMH Gradle Plugin

Как понятно ΠΈΠ· описания Π²Ρ‹ΡˆΠ΅, для тСстирования ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠΎΠ΄Π° нСдостаточно просто Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² classpath ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ тСсты Π² стилС JUnit. А ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π΅Π»ΠΎ, Π° Π½Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π² особСнности написания Π±ΠΈΠ»Π΄ скриптов, Π½Π°ΠΌ Π½Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· ΠΏΠ»Π°Π³ΠΈΠ½Π° ΠΊ maven/gradle. Для Π½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² прСимущСство остаСтся Π·Π° gradle, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Π΅Π³ΠΎ.

Для JMH Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ»Π°Π³ΠΈΠ½ для gradle β€” jmh-gradle-plugin. ДобавляСм Π΅Π³ΠΎ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚:

buildscript {
    repositories {
        mavenCentral()
        maven {
            url "https://plugins. gradle.org/m2/"
        }
    }
    dependencies {
        classpath "me.champeau.gradle:jmh-gradle-plugin:$jmh_gradle_plugin_version"
    }
}
apply plugin: "me.champeau.gradle.jmh"

Плагин Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΎΠΌ создаст Π½ΠΎΠ²Ρ‹ΠΉ source set (это «Π½Π°Π±ΠΎΡ€ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ рСсурсов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ вмСстС», ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ»ΠΈ ΡΡ‚Π°Ρ‚ΡŒΡŽ Π½Π° Ρ…Π°Π±Ρ€Π΅ Π·Π° авторством svartalfar, ΠΈΠ»ΠΈ ΠΆΠ΅ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ gradle). jmh source set автоматичСски ссылаСтся Π½Π° main, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹:

  1. Код, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ, пишСм Π² стандартном main source set, Ρ‚Π°ΠΌ ΠΆΠ΅, Π³Π΄Π΅ ΠΈ всСгда.
  2. Код с настройкой ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π΅Π²ΠΎΠΌ тСстов пишСм Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ source set. ИмСнно Π΅Π³ΠΎ byte code ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ, сюда ΠΏΠ»Π°Π³ΠΈΠ½ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ зависимости, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ опрСдСлСния аннотация ΠΈ Ρ‚Π΄.

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ²:

  • src
    • jmh / kotlin/ <Имя java ΠΏΠ°ΠΊΠ΅Ρ‚Π°> / <ΠΊΠΎΠ΄, Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΠΈΠΉ тСсты (ΠΈ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ JMH Π°Ρ‚Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ)>
    • main / kotlin / <Имя java ΠΏΠ°ΠΊΠ΅Ρ‚Π°> / <ΠΊΠΎΠ΄ для тСстирования>

Или ΠΊΠ°ΠΊ это выглядит Π² IntelliJ Idea:

Π’ ΠΈΡ‚ΠΎΠ³Π΅, послС настройки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ тСсты простым Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ . \gradlew.bat jmh (ΠΈΠ»ΠΈ .\gradlew jmh для Linux, Mac, BSD)

Π‘ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠΌ Π΅ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π° интСрСсных особСнностСй Π½Π° Windows:

  • JMH ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ fork java процСсса. Π’ случаС Windows это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ просто нСльзя, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π½ΠΎΠ²Ρ‹ΠΉ процСсс просто запускаСтся с Ρ‚Π΅ΠΌ ΠΆΠ΅ classpath. И вСсь список jar Ρ„Π°ΠΉΠ»ΠΎΠ² пСрСдаСтся Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½. Π’ ΠΈΡ‚ΠΎΠ³Π΅, Ссли GRADLE_USER_HOME (ΠΏΠ°ΠΏΠΊΠ°, Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π»Π΅ΠΆΠΈΡ‚ Π² Ρ‚ΠΎΠΌ числС кСш gradle) находится Π² Π³Π»ΡƒΠ±ΠΈΠ½Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ структуры, список jar Ρ„Π°ΠΉΠ»ΠΎΠ² для fork становится Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ большим, Ρ‡Ρ‚ΠΎ Windows отказываСтся Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ процСсс с Ρ‚Π°ΠΊΠΈΠΌ Π³Ρ€ΠΎΠΌΠ°Π΄Π½Ρ‹ΠΌ число Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли JMH отказываСтся Π΄Π΅Π»Π°Ρ‚ΡŒ fork β€” просто пСрСмСститС кСши Gradle Π² ΠΏΠ°ΠΏΠΊΡƒ с ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Ρ‚.Π΅. Π·Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ Π² environment variable GRADLE_USER_HOME Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ c:\gradle
  • Иногда ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ процСсс JMH Π΄Π΅Π»Π°Π΅Ρ‚ lock Π½Π° Ρ„Π°ΠΉΠ»Π΅ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, это Π΄Π΅Π»Π°Π΅Ρ‚ byte code rewrite). Π’ ΠΈΡ‚ΠΎΠ³Π΅, повторная компиляция ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ„Π°ΠΉΠ» с нашим benchmark ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ ΠΊΠ΅ΠΌ-Ρ‚ΠΎ Π½Π° запись. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ просто ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ deamon процСссы gradle (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ компилятора): .\gradlew.bat --stop
  • Для чистоты экспСримСнтов, Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ сборки для Π½Π°ΡˆΠΈΡ… тСстов. ΠžΡ‚ΡΡŽΠ΄Π°, ΠΏΠ΅Ρ€Π΅Π΄ тСстированиСм всСгда Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ .\gradlew.bat clean

ВСстированиС

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° я Π²ΠΎΠ·ΡŒΠΌΡƒ вопрос (Ρ€Π°Π½Π΅Π΅ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° kotlin discussions), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡƒΡ‡Π°Π» мСня Ρ€Π°Π½Π΅Π΅ β€” Π·Π°Ρ‡Π΅ΠΌ Π² конструкции use ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ inline ΠΌΠ΅Ρ‚ΠΎΠ΄?

О конструкции use

Π’ Java Π΅ΡΡ‚ΡŒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ β€” try with resources, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт автоматичСски Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ close Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ°, Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ β€” бСзопасно ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π½Π΅ пСрСкрывая ΡƒΠΆΠ΅ лСтящСС. Аналог ΠΈΠ· ΠΌΠΈΡ€Π° .Net β€” конструкция using для интСрфСйсов IDisposable.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ java ΠΊΠΎΠ΄Π°:

try (BufferedReader reader = Files.newBufferedReader(file, charset)) { //ΠΈΠΌΠ΅Π½Π½ΠΎ этот try ΠΈ являСтся ΠΎΠ·Π²ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ конструкциСй
    /*Ρ‡ΠΈΡ‚Π°Π΅ΠΌ ΠΈΠ· reader'Π°*/
}

Π’ kotlin Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π°Π½Π°Π»ΠΎΠ³, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ синтаксис:

Files. newBufferedReader(file, charset)).use { reader ->
    /*Ρ‡ΠΈΡ‚Π°Π΅ΠΌ ΠΈΠ· reader'Π°*/
}

Π’ΠΎ Π΅ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ:

  1. Use β€” это просто ΠΌΠ΅Ρ‚ΠΎΠ΄-Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅, Π° Π½Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ конструкция языка
  2. Use являСтся inline ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ конструкции Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ‡Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π°, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ Π² Ρ‚Π΅ΠΎΡ€ΠΈΠΈ JIT`Ρƒ Π±ΡƒΠ΄Π΅Ρ‚ слоТнСС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΈ Ρ‚.Π΄. И Π²ΠΎΡ‚ эту Ρ‚Π΅ΠΎΡ€ΠΈΡŽ ΠΌΡ‹ ΠΈ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ.

Π˜Ρ‚Π°ΠΊ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

  1. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ use, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ поставляСтся Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ kotlin
  2. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠ΄Π½Π°ΠΊΠΎ Π±Π΅Π· inline. Π’ ΠΈΡ‚ΠΎΠ³Π΅ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Π² ΠΊΡƒΡ‡Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ для лямбды.

Код с JMH Π°Ρ‚Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

@BenchmarkMode(Mode.All) // тСстируСм Π²ΠΎ всСх Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ…
@Warmup(iterations = 10) // число ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ для ΠΏΡ€ΠΎΠ³Ρ€Π΅Π²Π° нашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
@Measurement(iterations = 100, batchSize = 10) // число ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΡ‡Π½Ρ‹Ρ… ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
open class CompareInlineUseVsLambdaUse {
    @Benchmark
    fun inlineUse(blackhole: Blackhole) {
        NoopAutoCloseable(blackhole). use {
            blackhole.consume(1)
        }
    }
    @Benchmark
    fun lambdaUse(blackhole: Blackhole) {
        NoopAutoCloseable(blackhole).useNoInline {
            blackhole.consume(1)
        }
    }
}

Dead Code Elimination

Java Compiler & JIT довольно ΡƒΠΌΠ½Ρ‹Π΅ ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ряд ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ, ΠΊΠ°ΠΊ Π² compile time, Ρ‚Π°ΠΊ ΠΈ Π² runtime. ΠœΠ΅Ρ‚ΠΎΠ΄ Π½ΠΈΠΆΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π² ΠΎΠ΄Π½Ρƒ строку (ΠΊΠ°ΠΊ для kotlin, Ρ‚Π°ΠΊ ΠΈ для java):

fun sum() : Unit {
    val a = 1
    val b = 2
    a + b;
}

И Π² ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄:

fun sum() : Unit {
    3;
}

Однако Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ вСдь Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ компиляторы (byte code + JIT) Π² ΠΈΡ‚ΠΎΠ³Π΅ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π²Ρ‹ΠΊΠΈΠ½ΡƒΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этого, Π² JMH сущСствуСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс «Ρ‡Π΅Ρ€Π½Π°Ρ Π΄Ρ‹Ρ€Π°» β€” Blackhole. Π’ Π½Π΅ΠΌ Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ с ΠΎΠ΄Π½ΠΎΠΉ стороны Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ, Π° с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны β€” Π½Π΅ Π΄Π°ΡŽΡ‚ JIT Π²Ρ‹ΠΊΠΈΠ½ΡƒΡ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ.

А для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ javac Π½Π΅ пытался ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ-Ρ‚Π°ΠΊΠΈ a ΠΈ b Π² процСссС компиляции, Π½Π°ΠΌ трСбуСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ state, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ наши значСния. Π’ ΠΈΡ‚ΠΎΠ³Π΅ Π² самом тСстС ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ Ρ‚Ρ€Π°Ρ‚ΠΈΠΌ врСмя Π½Π° Π΅Π³ΠΎ созданиС ΠΈ Π½Π΅ Π΄Π°Π΅ΠΌ компилятору ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ).

Π’ ΠΈΡ‚ΠΎΠ³Π΅ для Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎΠ³ΠΎ тСстирования нашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ трСбуСтся Π΅Ρ‘ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²ΠΎΡ‚ Π² Ρ‚Π°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅:

fun sum(blackhole: Blackhole) : Unit {
    val a = state.a // компилятор Π½Π΅ Π·Π½Π°Π΅Ρ‚ Π·Π°Ρ€Π°Π½Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ a
    val b = state.b
    val result = a + b;
    blackhole.consume(result) // JIT Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΊΠΈΠ½ΡƒΡ‚ΡŒ слоТСниС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ всС-Ρ‚Π°ΠΊΠΈ Π½ΡƒΠΆΠ΅Π½
}

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ взяли a ΠΈ b ΠΈΠ· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ state, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠ΅ΡˆΠ°Π΅Ρ‚ компилятору сразу ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. А Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΡ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ Π² Ρ‡Π΅Ρ€Π½ΡƒΡŽ Π΄Ρ‹Ρ€Ρƒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠ΅ΡˆΠ°Π΅Ρ‚ JIT Π²Ρ‹ΠΊΠΈΠ½ΡƒΡ‚ΡŒ послСднюю Ρ‡Π°ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ ΠΌΠΎΠ΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  1. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ для Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° close я создам Π² самом тСстС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ практичСски всСгда ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° close Ρƒ нас Π΄ΠΎ этого создавался ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.
  2. Π’Π½ΡƒΡ‚Ρ€ΠΈ нашСго ΠΌΠ΅Ρ‚ΠΎΠ΄Π° придСтся Π²Ρ‹Π·Ρ‹Π²Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ· blackhole, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΏΡ€ΠΎΠ²ΠΎΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ созданиС лямбды Π² ΠΊΡƒΡ‡Π΅ (ΠΈ Π½Π΅ Π΄Π°Ρ‚ΡŒ JIT Π²Ρ‹ΠΊΠΈΠ½ΡƒΡ‚ΡŒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄).

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ тСста

Запустив ./gradle jmh, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π°Π² Π΄Π²Π° часа, я ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° ΠΌΠΎΠ΅ΠΌ mac mini:

# Run complete. Total time: 01:51:54
Benchmark                                                  Mode       Cnt         Score       Error  Units
CompareInlineUseVsLambdaUse.inlineUse                     thrpt      1000  11689940,039 Β± 21367,847  ops/s
CompareInlineUseVsLambdaUse.lambdaUse                     thrpt      1000  11561748,220 Β± 44580,699  ops/s
CompareInlineUseVsLambdaUse.inlineUse                      avgt      1000        β‰ˆ 10⁻⁷               s/op
CompareInlineUseVsLambdaUse.lambdaUse                      avgt      1000        β‰ˆ 10⁻⁷               s/op
CompareInlineUseVsLambdaUse.inlineUse                    sample  21976631        β‰ˆ 10⁻⁷               s/op
CompareInlineUseVsLambdaUse.inlineUse:inlineUseΒ·p0.00    sample                  β‰ˆ 10⁻⁷               s/op
CompareInlineUseVsLambdaUse.inlineUse:inlineUseΒ·p0. 50    sample                  β‰ˆ 10⁻⁷               s/op
CompareInlineUseVsLambdaUse.inlineUse:inlineUseΒ·p0.90    sample                  β‰ˆ 10⁻⁷               s/op
CompareInlineUseVsLambdaUse.inlineUse:inlineUseΒ·p0.95    sample                  β‰ˆ 10⁻⁷               s/op
CompareInlineUseVsLambdaUse.inlineUse:inlineUseΒ·p0.99    sample                  β‰ˆ 10⁻⁷               s/op
CompareInlineUseVsLambdaUse.inlineUse:inlineUseΒ·p0.999   sample                  β‰ˆ 10⁻⁡               s/op
CompareInlineUseVsLambdaUse.inlineUse:inlineUseΒ·p0.9999  sample                  β‰ˆ 10⁻⁡               s/op
CompareInlineUseVsLambdaUse.inlineUse:inlineUseΒ·p1.00    sample                   0,005               s/op
CompareInlineUseVsLambdaUse.lambdaUse                    sample  21772966        β‰ˆ 10⁻⁷               s/op
CompareInlineUseVsLambdaUse.lambdaUse:lambdaUseΒ·p0.00    sample                  β‰ˆ 10⁻⁸               s/op
CompareInlineUseVsLambdaUse.lambdaUse:lambdaUseΒ·p0.50    sample                  β‰ˆ 10⁻⁷               s/op
CompareInlineUseVsLambdaUse. lambdaUse:lambdaUseΒ·p0.90    sample                  β‰ˆ 10⁻⁷               s/op
CompareInlineUseVsLambdaUse.lambdaUse:lambdaUseΒ·p0.95    sample                  β‰ˆ 10⁻⁷               s/op
CompareInlineUseVsLambdaUse.lambdaUse:lambdaUseΒ·p0.99    sample                  β‰ˆ 10⁻⁷               s/op
CompareInlineUseVsLambdaUse.lambdaUse:lambdaUseΒ·p0.999   sample                  β‰ˆ 10⁻⁡               s/op
CompareInlineUseVsLambdaUse.lambdaUse:lambdaUseΒ·p0.9999  sample                  β‰ˆ 10⁻⁡               s/op
CompareInlineUseVsLambdaUse.lambdaUse:lambdaUseΒ·p1.00    sample                   0,010               s/op
CompareInlineUseVsLambdaUse.inlineUse                        ss      1000        β‰ˆ 10⁻⁡               s/op
CompareInlineUseVsLambdaUse.lambdaUse                        ss      1000        β‰ˆ 10⁻⁡               s/op
Benchmark result is saved to /Users/imanushin/git/use-performance-test/src/build/reports/jmh/results.txt

Или, Ссли ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ:

Benchmark  Mode        Cnt         Score       Error  Units
inlineUse   thrpt      1000  11689940,039 Β± 21367,847  ops/s
lambdaUse   thrpt      1000  11561748,220 Β± 44580,699  ops/s
inlineUse    avgt      1000        β‰ˆ 10⁻⁷               s/op
lambdaUse    avgt      1000        β‰ˆ 10⁻⁷               s/op
inlineUse  sample  21976631        β‰ˆ 10⁻⁷               s/op
lambdaUse  sample  21772966        β‰ˆ 10⁻⁷               s/op
inlineUse      ss      1000        β‰ˆ 10⁻⁡               s/op
lambdaUse      ss      1000        β‰ˆ 10⁻⁡               s/op

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ самыС Π²Π°ΠΆΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ:

  1. Inline ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠΊΠ°Π·Π°Π» ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ 11,6 * 10^6 Β± 0,02 * 10^6 ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² сСкунду. 6 ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² сСкунду.
  2. Inline ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² ΠΈΡ‚ΠΎΠ³Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Π΅Π΅ ΠΏΠΎ скорости. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, увСличСнная ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΡŒ для lambdaUse связана с Π±ΠΎΠ»Π΅Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ.
  3. Π― Ρ‚Π°ΠΊΠΈ Π±Ρ‹Π» Π½Π΅ΠΏΡ€Π°Π² Π½Π° Ρ‚ΠΎΠΌ Ρ„ΠΎΡ€ΡƒΠΌΠ΅ β€” Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ kotlin Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ПО Π΅ΡΡ‚ΡŒ Π΄Π²Π° довольно частых способа сравнСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ:

  1. Π—Π°ΠΌΠ΅Ρ€ скорости Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ†ΠΈΠΊΠ»Π° с N итСрациями ΠΏΠΎΠ΄ΠΎΠΏΡ‹Ρ‚Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
  2. ЀилософскиС рассуТдСния Π²ΠΈΠ΄Π° «Ρ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ быстрСС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сдвиг, Ρ‡Π΅ΠΌ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° 2», «ΡΠΊΠΎΠ»ΡŒΠΊΠΎ я ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽ, всСгда XML сСриализация Π±Ρ‹Π»Π° самой быстрой» ΠΈ Ρ‚Π΄.

Однако, ΠΊΠ°ΠΊ Π·Π½Π°Π΅Ρ‚ любой тСхничСски ΠΏΠΎΠ΄ΠΊΠΎΠ²Π°Π½Π½Ρ‹ΠΉ спСциалист, ΠΎΠ±Π° этих Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ приводят ΠΊ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΌ суТдСниям, Ρ‚ΠΎΡ€ΠΌΠΎΠ·Π°ΠΌ Π² прилоТСниях ΠΈ ΠΏΡ€. Π― надСюсь, Ρ‡Ρ‚ΠΎ эта ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ ΠΈ быстроС ПО.

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π½Π° английский язык Ρ‚ΡƒΡ‚.

Java ΠΈ C++: тСст Π½Π° быстродСйствиС | Java World

Π’ Ρ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π°, ΠΊΠΎΠ³Π΄Π° всС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Java прСдставляли собой ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, эта тСхнология Π²Ρ‹Π·Ρ‹Π²Π°Π»Π° справСдливыС нарСкания Π·Π° свою Π½ΠΈΠ·ΠΊΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Но ΠΏΠΎ ΠΏΡ€ΠΎΡˆΠ΅ΡΡ‚Π²ΠΈΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° Ρ€Ρ‹Π½ΠΊΠ΅ появились Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ компиляторы just-in-time (JIT), ΠΈ сСгодня тСсты ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎ Π±Ρ‹ΡΡ‚Ρ€ΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ Java Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… областях практичСски ΡΡ€Π°Π²Π½ΡΠ»Π°ΡΡŒ с C++. ΠΠ°ΠΌΠ΅Ρ‚ΠΈΠ²ΡˆΠΈΠ΅ΡΡ Ρ‚Π΅Π½Π΄Π΅Π½Ρ†ΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π½Π°Π΄Π΅ΡΡ‚ΡŒΡΡ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ Π² самоС блиТайшСС врСмя Java Π½Π΅ уступит Π² скорости C++.

Как соотносится ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Java ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° C++, максимально ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΡŽ быстродСйствия? Π”ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π±Ρ‹Π»ΠΎ Π±Ρ‹ интСрСсно ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ ΠΊΠ°ΠΊ с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ тСорСтичСского сравнСния, Ρ‚Π°ΠΊ ΠΈ с Π²Ρ‹Π²ΠΎΠ΄Π°ΠΌΠΈ, сдСланными Π½Π° основС Π°Π½Π°Π»ΠΈΠ·Π° тСстовых ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΎΠ², Π½Π΅ ТСлая ΡƒΠ³Π»ΡƒΠ±Π»ΡΡ‚ΡŒΡΡ Π² хитросплСтСния слоТных Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, с Ρ…ΠΎΠ΄Ρƒ Π·Π°ΡΠ²Π»ΡΡŽΡ‚, Ρ‡Ρ‚ΠΎ Java всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ языкам ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ многоплатформСнности Java. Π’Π°ΠΊΠΈΠ΅ утвСрТдСния ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΡΡ‚Π°Ρ‚ΡŒΡΡ…, посвящСнных Java ΠΈ сСтСвым ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°ΠΌ.

ΠœΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ провСсти ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ исслСдованиС ΠΈ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, Π² Ρ‡Π΅ΠΌ Java уступаСт C++ (спСциалисты Π»ΡŽΠ±ΡΡ‚ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ эти Π΄Π²Π° языка). Π‘Ρ‹Π»ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Java ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ характСристики быстродСйствия ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных Π½Π° Java ΠΈ Π½Π° C++.

ΠœΡ‹ Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈΡΡŒ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Java Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΡΡ‚Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎ всСм показатСлям, хотя ΠΈ Π½Π΅ Π²Π΅Ρ€ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ C++ окаТСтся Π² нСсколько Ρ€Π°Π· быстрСС. К Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ Π½Π°ΡˆΠ΅ΠΌΡƒ ΡƒΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΡŽ, ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ практичСски Π½Π΅ ΠΎΡ‰ΡƒΡ‰Π°Π»ΠΎΡΡŒ. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Java Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ уступала этому ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ Ρƒ C++, Ρ‡Ρ‚ΠΎ, Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, Π»Π΅Π³ΠΊΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ΠΌ строгой ΠΌΠΎΠ΄Π΅Π»ΠΈ бСзопасности ΠΈ ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠ°ΠΌΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ «ΡΠ±ΠΎΡ€ΠΊΠΈ мусора».

Π›ΡŽΠ±ΠΎΠ΅ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ языка слСдуСт Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π² строго ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ контСкстС. Π‘ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° появлСния Java ΠΏΡ€ΠΎΡˆΠ»ΠΎ ΡƒΠΆΠ΅ Π½Π΅ΠΌΠ°Π»ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΈ это врСмя Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΏΠΎΡ‚Ρ€Π°Ρ‡Π΅Π½ΠΎ Π²ΠΏΡƒΡΡ‚ΡƒΡŽ. НСслучайно сСгодня ΠΏΠΎ ΡƒΡ€ΠΎΠ²Π½ΡŽ быстродСйствия этогот язык Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв сравним с C++ (Π° C++ славится своСй высокой ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ).

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС: Visual C++ 5.0 ΠΈ Sun JDK 1.1.5.

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΠΎΠ΄ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ понимаСтся комбинация процСссора ΠΈ ОБ. НапримСр, ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ ОБ Windows NT ΠΈ процСссора Intel, ОБ Linux ΠΈ процСссора Intel ΠΈΠ»ΠΈ ΠΆΠ΅ ОБ Linux ΠΈ процСссора Digital Alpha.

Π—ΠΠ“Π Π£Π—ΠšΠ Π˜Π‘ΠŸΠžΠ›ΠΠ―Π•ΠœΠžΠ“Πž ΠšΠžΠ”Π

ΠŸΡ€ΠΈ создании Π½ΠΎΠ²ΠΎΠ³ΠΎ прилоТСния Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ сначала Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько исходных Ρ„Π°ΠΉΠ»ΠΎΠ². ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€/ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ транслируСт исходный ΠΊΠΎΠ΄ Π² исполняСмый. Π’ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ исполняСмый ΠΊΠΎΠ΄. На ΠΏΠ΅Ρ€Π²ΠΎΠΌ этапС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ исполняСмый ΠΊΠΎΠ΄ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°.

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° исполняСмого ΠΊΠΎΠ΄Π°: Java ΠΏΡ€ΠΎΡ‚ΠΈΠ² C++

Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° находится Π½Π° локальном дискС, Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π΄Π°ΠΆΠ΅ слоТного прилоТСния Π½Π΅ Π·Π°ΠΉΠΌΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Если ΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° хранится Π½Π° Web-ΡƒΠ·Π»Π΅ Π² Internet ΠΈΠ»ΠΈ Π² ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ сСти intranet, Ρ€Π°Π·ΠΌΠ΅Ρ€ исполняСмого ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ сущСствСнно ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ рСсурсы Java Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ мСньшС мСста Π½Π° дискС ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ C++ ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ ΠΈΠ· Internet ΠΈ intranet Π³ΠΎΡ€Π°Π·Π΄ΠΎ быстрСС. ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ скорости Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ исполняСмого ΠΊΠΎΠ΄Π° ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

Π Π°Π·ΠΌΠ΅Ρ€ исполняСмого ΠΊΠΎΠ΄Π°

Π˜ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Windows NT, написанныС Π½Π° C++, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ Π½Π° дискС Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ большС мСста, Ρ‡Π΅ΠΌ исполняСмыС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Java. На Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ исполняСмого ΠΊΠΎΠ΄Π° ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ влияниС Ρ‚Ρ€ΠΈ Ρ„Π°ΠΊΡ‚ΠΎΡ€Π°:

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ исполняСмого ΠΊΠΎΠ΄Π° C++ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΊΠΎΠ΄ΠΎΠΌ Java ΠΏΠΎΡ‡Ρ‚ΠΈ Π² Π΄Π²Π° Ρ€Π°Π·Π°.

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, тСхнология Java прСдусматриваСт Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ использованиС ряда Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, содСрТащих матСматичСскиС ΠΈ сСтСвыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, классы для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с составными элСмСнтами ΠΈ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΉ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π’ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Java (JVM) встроСна ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° этих Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Π’ C++ ΠΆΠ΅, Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ интСрфСйсы ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (API), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ доступ ΠΊ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. К соТалСнию, Ссли программист Π·Π°Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ имСя доступа ΠΊ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡƒ API C++, Π΅ΠΌΡƒ придСтся самому Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ для своСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ΄Π²ΠΎΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΡƒΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

Π’ Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ Java входят ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с графичСскими ΠΈ Π·Π²ΡƒΠΊΠΎΠ²Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, записанными Π² сТатом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ, Π² частности, графичСскиС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ Joint Photographic Expert Group (JPEG) ΠΈ Graphics Interchange Format (GIF), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π°ΡƒΠ΄ΠΈΠΎΡ„ΠΎΡ€ΠΌΠ°Ρ‚ AU. БрСдства Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° C++ для Windows NT ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСсТатыС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹: bitmap (BMP) для ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ wave (WAV) для Π°ΡƒΠ΄ΠΈΠΎΡ„Π°ΠΉΠ»ΠΎΠ². Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π° порядок ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ графичСских Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π° — Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π°ΡƒΠ΄ΠΈΠΎΡ„Π°ΠΉΠ»ΠΎΠ². Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°ΠΌΠΈ графичСских ΠΈ Π·Π²ΡƒΠΊΠΎΠ²Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ классов.

Π˜Π·Π±ΠΈΡ€Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°

Π—Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных Π½Π° C++, ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ выполнСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ исполняСмый Ρ„Π°ΠΉΠ». Π’ срСдС Win32 имССтся Π΄Π²Π° способа связи с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ DLL: статичСский ΠΈ динамичСский. БтатичСски связанныС DLL (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв) Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ случаС динамичСского связывания Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ DLL Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ ΠΏΠΎ запросу. Однако Ρ‚Π°ΠΊΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΌΠ΅Π½Π΅Π΅ популярСн, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ написаниС ΠΊΠΎΠ΄Π° динамичСской Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ обращСния ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹ΠΌ функциям Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… усилий.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ сущСствуСт способов ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ цСлостности динамичСски связанной DLL Π½Π° этапС выполнСния. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π±Π΅Π· Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ нСльзя Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, измСнялась Π»ΠΈ DLL Π² процСссС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. НаконСц, Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ с ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ диска, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒ. РСализация Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π² автоматичСском Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Ρ‚Ρ€Π°Ρ‚ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ Java способСн Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ классы ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости. Рассмотрим, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΏΠΎΠ»Π½ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ тСкстовый процСссор со встроСнным тСзаурусом, орфографичСским ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ ΠΈ срСдствами создания ΠΈ экспорта ΠΏΠΎΡ‡Ρ‚Ρ‹. РСализация Π΄Π°Π½Π½Ρ‹Ρ… возмоТностСй ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

Π‘Ρ€Π΅Π΄Π½ΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π² любой ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ лишь ΠΌΠ°Π»ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π° срСдств Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±Ρ‹Π»Π° написана Π½Π° C++, ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ обязан Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ. Π’ случаС, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° написана Π½Π° Java, Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ этапС Π² памяти размСщаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ самоС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ), Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости.

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° исполняСмого ΠΊΠΎΠ΄Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 1 прСдставлСны Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ протСстированных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ ΠΈΡ… рСсурсов. ΠžΠ³Ρ€ΠΎΠΌΠ½Π°Ρ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΊΠΎΠ΄Π° C++ ΠΈ Java ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ C++. ΠžΠ±ΡŠΠ΅ΠΌΡ‹ рСсурсов ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ вслСдствиС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ прилоТСния Java Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ со сТатыми Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ (Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ GIF), Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ C++ — с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ bitmap.

Π’Π°Π±Π»ΠΈΡ†Π° 1

Имя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠšΠ±Π°ΠΉΡ‚ (C++/Java)РСсурсы, ΠšΠ±Π°ΠΉΡ‚ (C++/Java)
Simple Loop46/3,9-/-
Memory Allocation34/1,4-/-
Bouncing Globes103/21485/13

Π’Π«ΠŸΠžΠ›ΠΠ•ΠΠ˜Π• ΠŸΠ ΠžΠ“Π ΠΠœΠœΠΠ«Π₯ Π˜ΠΠ’Π‘Π’Π Π£ΠšΠ¦Π˜Π™

ПослС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ исполняСмого ΠΊΠΎΠ΄Π° процСссор Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ инструкции. ΠŸΡ€ΠΈ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° C++ исполняСмый Ρ„Π°ΠΉΠ» содСрТит Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ инструкции процСссора Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. Для пСрСноса прилоТСния Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ потрСбуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ исполняСмый Ρ„Π°ΠΉΠ» ΠΏΡƒΡ‚Π΅ΠΌ пСрСкомпиляции исходного ΠΊΠΎΠ΄Π°. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, особСнности ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π·Π°ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π²Π½ΠΎΡΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ измСнСния Π² исходный ΠΊΠΎΠ΄. Π˜ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡ‹Π΅ ΠΆΠ΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹Π΅ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ компилятора Java, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ процСссором Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ прСобразования Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π­Ρ‚ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ возлагаСтся Π½Π° JVM. Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ двумя способами: с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ посрСдством компилятора just-in-time (JIT).

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… инструкций: Java ΠΏΡ€ΠΎΡ‚ΠΈΠ² C++

Π£ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных Π½Π° Java, Π½Π΅ слишком Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ рСпутация. Π˜Ρ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ заставляСт вспомнит ΠΎ старых JVM, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… интСрпрСтация Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° Π±Ρ‹Π»Π° СдинствСнным способом выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… инструкций.

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π² нСсколько Ρ€Π°Π· ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ исполняСмого ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ C++, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π² Ρ…ΠΎΠ΄Π΅ выполнСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π­Ρ‚ΠΎ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎ ΠΊ Π½Π΅ΠΎΠΏΡ€Π°Π²Π΄Π°Π½Π½Ρ‹ΠΌ расходам. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» состоит ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ инструкций. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ JVM снова ΠΈ снова ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, ΠΏΡ€ΠΈ этом Π½Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ довольно ΠΌΠ½ΠΎΠ³ΠΎ процСссорного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Но ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ Ρ€Π°Π±ΠΎΡ‚Π° старых JVM, ΡƒΠΆΠ΅ уходят Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ΅. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ соврСмСнных Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин Java оснащаСтся JIT-компиляторами. Π­Ρ‚ΠΈ компиляторы Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΡƒΡŽΡ‚ ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ сразу вСсь исходный Ρ„Π°ΠΉΠ». Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΡ‚ΠΏΠ°Π΄Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ трансляции ΠΊΠ°ΠΆΠ΄ΠΎΠΉ инструкции Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… компиляторов

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹ C++ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… частСй ΠΊΠΎΠ΄Π° ΠΏΡƒΡ‚Π΅ΠΌ выявлСния нСэффСктивных участков ΠΈ ΠΈΡ… ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ прСобразования. Π­Ρ‚ΠΎΡ‚ процСсс носит Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ компилятор способСн Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Ρ‚ΡŒ Π½Π΅Π±Ρ€Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ программиста ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° «ΡΡ‚атичСскиС» вычислСния. Под «ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΌΠΈ» вычислСниями понимаСтся Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ нСзависимо ΠΎΡ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ всСгда являСтся константа.

Распознав Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ, компилятор Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π΅Π΅ Π·Π° Ρ€Π°ΠΌΠΊΠΈ Ρ†ΠΈΠΊΠ»Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ константы вычисляСтся Π΅Ρ‰Π΅ Π΄ΠΎ Π²Ρ…ΠΎΠ΄Π° Π² Ρ†ΠΈΠΊΠ» ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ, сокращая врСмя выполнСния ΠΈ Π½Π΅ измСняя Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ называСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Для Π΅Π³ΠΎ выполнСния компилятору Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ нСсколько ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΎΠ² ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ всС инструкции Ρ†ΠΈΠΊΠ»Π°. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ пСрСмСщСния выраТСния всС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ†ΠΈΠΊΠ»Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Ρ‹, ΠΈ компилятор обязан ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ любой ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ выраТСния являСтся константа.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ JIT-компилятора, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ «Π½Π° Π»Π΅Ρ‚Ρƒ». ВСхнология JIT-компилятора позволяСт ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» классов Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, СдинствСнная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ обрабатываСмая JIT-компилятором ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Java ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ C++ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Ρ€Π°Π·Π½ΠΎΠΉ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ, — это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ трансляции Ρ„Π°ΠΉΠ»Π° классов; ΠΎΠ½Π° ΠΆΠ΅, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, зависит ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ.

ΠžΠ±Ρ‰Π΅Π΅ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅ΠΉ Π² сСбя большоС количСство классов, складываСтся ΠΈΠ· Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ трСбуСтся Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ этих классов, ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ процСссором Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π’ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ классы, поэтому Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ всСгда ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΠΈΠΆΠ΅ Π·Π°Ρ‚Ρ€Π°Ρ‚ Π½Π° нСпосрСдствСнноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

На Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ этапС Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ, Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π²ΡˆΠΈΡ… компиляторы JIT, ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ классы слСдуСт ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π° ΠΊΠ°ΠΊΠΈΠ΅ — Π½Π΅Ρ‚. Π­Ρ‚ΠΎ зависСло ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ часто ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ классы Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. ВпослСдствии ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ ΠΎΡ‚ΠΊΠ°Π·Π°Π»ΠΈΡΡŒ ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΈ компиляторы стали Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вСсь исходный ΠΊΠΎΠ΄, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±Ρ‰Π΅Π΅ врСмя выполнСния ΠΏΡ€ΠΈ этом практичСски Π½Π΅ измСнялось.

ВСория ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°

ВСорСтичСски скорости выполнСния Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° Java, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ JIT-компилятором, ΠΈ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π‘++ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ сущСствСнно Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π²Π° Ρ„Π°ΠΊΡ‚ΠΎΡ€Π°, ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… сущСствСнноС влияниС Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ инструкции Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ процСссора. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния этих ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π½ΠΎ врСмя ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈ этом Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ. Если ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹Π΅ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ JIT-компилятора ΠΈ компилятора C++, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ количСства Ρ‚Π°ΠΊΡ‚ΠΎΠ² процСссора, быстродСйствиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Java ΠΈ C++ оказываСтся практичСски ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ. (Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС всС зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, насколько Ρ…ΠΎΡ€ΠΎΡˆΠΎ компилятор ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ исполняСмый ΠΊΠΎΠ΄ ΠΏΠΎ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΡŽ быстродСйствия.)

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ количСство ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΎΠ² компилятора, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… участков ΠΊΠΎΠ΄Π°. Π’ рассмотрСнном Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ «ΡΡ‚атичСских» вычислСний, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, измСняСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ выраТСния ΠΈΠ»ΠΈ Π½Π΅Ρ‚, компилятору, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, потрСбуСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ всС ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°.

Один ΠΈΠ· Π²ΠΈΠ΄ΠΎΠ² Π±ΠΎΠ»Π΅Π΅ слоТной ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ — это устранСниС Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС компилятор Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΠΉΡ‚ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½ΠΈ ΠΏΡ€ΠΈ ΠΊΠ°ΠΊΠΈΡ… условиях. Если Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚, ΠΎΠ½ΠΈ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² исполняСмый ΠΊΠΎΠ΄.

УстранСниС Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ сущСствСнному ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡŽ быстродСйствия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΡ€ΠΈ этом Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ увСличиваСтся ΠΈ врСмя компиляции. НСобходимо ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ появлСниС Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° — это Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ошибок программиста. ΠžΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, облСгчая Ρ‚Π΅ΠΌ самым Π·Π°Π΄Π°Ρ‡Ρƒ компилятора.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС Π² зависимости ΠΎΡ‚ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹ΡˆΠ° Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π·Π°Ρ‚Ρ€Π°Ρ‚ всС Π²ΠΈΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° нСсколько ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°ΡŽΡ‚ быстродСйствиС Π½Π° 10-15 % ΠΏΡ€ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Ρ‚Ρ€Π°Ρ‚Π°Ρ….

Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ позволяСт ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π΅Ρ‰Π΅ Π½Π° 5 %, ΠΎΠ΄Π½Π°ΠΊΠΎ это обойдСтся Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΡ€ΠΎΠΆΠ΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 2 ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ выполнСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ Java ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных Π½Π° C++. НСтрудно Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ отсутствии JIT-компилятора ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Java Π² Ρ‚Ρ€ΠΈ-Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ€Π°Π·Π° уступаСт этому ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ для C++.

Π’Π°Π±Π»ΠΈΡ†Π° 2

Π’Π΅ΡΡ‚ΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅Π’Ρ€Π΅ΠΌΡ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ C++, сСк.ВрСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Java (JIT-
компилятор), сСк.
ВрСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Java (ΠΈΠ½Ρ‚Π΅Ρ€-
ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°), сСк.
ЦСлочислСнноС Π΄Π΅Π»Π΅Π½ΠΈΠ΅Π’ Ρ†ΠΈΠΊΠ»Π΅ 10 тыс. Ρ€Π°Π· Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡŒ опСрация цСлочислСнного дСлСния.1,81,84,8
ΠΠ΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄Π’ Ρ†ΠΈΠΊΠ»Π΅ 10 ΠΌΠ»Π½. Ρ€Π°Π· Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΎΡΡŒ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅3,73,79,5
ΠšΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ цСлочислСнного дСлСнияВ Ρ†ΠΈΠΊΠ» Π±Ρ‹Π»Π° встроСна ΠΎΠ΄Π½Π° исполняСмая ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈ 10 ΠΌΠ»Π½. Ρ€Π°Π· Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ5,45,720
Π”Π΅Π»Π΅Π½ΠΈΠ΅ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉΠ’ Ρ†ΠΈΠΊΠ»Π΅ 10 ΠΌΠ»Π½. Ρ€Π°Π· Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΎΡΡŒ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ1,61,68,7
БтатичСский ΠΌΠ΅Ρ‚ΠΎΠ΄Π’ Ρ†ΠΈΠΊΠ»Π΅ 10 ΠΌΠ»Π½. Ρ€Π°Π· вызывался статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ цСлочислСнноС Π΄Π΅Π»Π΅Π½ΠΈΠ΅1,81,86,0
ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄Π’ Ρ†ΠΈΠΊΠ»Π΅ 10 ΠΌΠ»Π½. Ρ€Π°Π· вызывался ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ цСлочислСнноС Π΄Π΅Π»Π΅Π½ΠΈΠ΅1,81,810
Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄*Π’ Π΄Π°Π½Π½ΠΎΠΌ тСстС 10 ΠΌΠ»Π½. Ρ€Π°Π· вызывался Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ цСлочислСнноС Π΄Π΅Π»Π΅Π½ΠΈΠ΅1,81,810
Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ с ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ Ρ‚ΠΈΠΏΠ° Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ выполнСния (RTTI)Π’ Π΄Π°Π½Π½ΠΎΠΌ тСстС 10 ΠΌΠ»Π½. Ρ€Π°Π· вызывался Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ класса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡŒ опСрация привСдСния Ρ‚ΠΈΠΏΠΎΠ²114,312
Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ с Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΠ° ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ Ρ‚ΠΈΠΏΠ° Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ выполнСния (RTTI)Π’ Π΄Π°Π½Π½ΠΎΠΌ тСстС 10 ΠΌΠ»Π½. Ρ€Π°Π· вызывался Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ класса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡŒ опСрация привСдСния Ρ‚ΠΈΠΏΠΎΠ²-**-**-**
ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ:
* ВСст ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π΅ Π²ΠΏΠΎΠ»Π½Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Java всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ.
** АварийноС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅

Π’ ΠΏΠΎΠ»Π½ΠΎΠΌ соотвСтствии с тСорСтичСскими исслСдованиями быстродСйствиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Java, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… JIT-компилятором, практичСски Π½Π΅ отличаСтся ΠΎΡ‚ этого показатСля для ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ C++. ЕдинствСнноС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ — Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ привСдСния Ρ‚ΠΈΠΏΠΎΠ², Π³Π΄Π΅ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ C++ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ прСвосходит ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Java.

Π‘Π»ΠΎΠΆΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ, вслСдствиС Ρ‡Π΅Π³ΠΎ часто приходится Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ прСобразования Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса Π² Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ. Данная опСрация называСтся ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΠΎΠ².

Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ провСряСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ прСобразования Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса Π² Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ (идСнтификация Ρ‚ΠΈΠΏΠ° Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ выполнСния — run-time type identification, RTTI). ΠŸΡ€ΠΈ эксплуатации слоТных систСм, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ RTTI, часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ошибки. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сниТаСт ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ всСй систСмы ΠΈ ΠΏΠΎΠ΄Ρ€Ρ‹Π²Π°Π΅Ρ‚ Π΄ΠΎΠ²Π΅Ρ€ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ программистов, ΠΏΠΈΡˆΡƒΡ‰ΠΈΡ… Π½Π° C++, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ RTTI, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ быстродСйствиС. ВСхнология Java Π½Π΅ позволяСт Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΈΠΌ ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡŽ систСмы бСзопасности. Наши тСсты Π΅Ρ‰Π΅ Ρ€Π°Π· продСмонстрировали, насколько ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ RTTI Π·Π°ΠΌΠ΅Π΄Π»ΡΡŽΡ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π ΠΠ‘ΠŸΠ Π•Π”Π•Π›Π•ΠΠ˜Π• ПАМЯВИ

Для хранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ выполнСния вычислСний ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ эффСктивно ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉΡΡ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Π² Ρ€Π°Π½Π΅Π΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ области памяти ΠΎΡ‚ΠΏΠ°Π΄Π°Π΅Ρ‚, эта ΠΏΠ°ΠΌΡΡ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ освобоТдСна ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π° систСмС. ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ выдСлСния памяти C++ ΠΈ Java ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ. Π§Ρ‚ΠΎ касаСтся освобоТдСния, здСсь ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ отличия. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ C++ обязаны явно ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ. ΠžΡ‡Π΅Π½ΡŒ часто ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ C++ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ошибки, Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹Π΅ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ программист Π·Π°Π±Ρ‹Π» явно ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π­Ρ‚Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ «Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ся» ΠΈ становится нСдоступной Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния.

Π’ срСдС Java Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ встроСнный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ освобоТдСния памяти, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ «ΡΠ±ΠΎΡ€ΠΊΠΎΠΉ мусора». Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ автоматичСски опрСдСляСт ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° конкрСтная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти большС Π½Π΅ Π½ΡƒΠΆΠ½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, послС Ρ‡Π΅Π³ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ возвращаСтся систСмС.

РаспрСдСлСниС памяти: Java ΠΏΡ€ΠΎΡ‚ΠΈΠ² C++

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ «ΡΠ±ΠΎΡ€Ρ‰ΠΈΠΊ мусора» Java Π΄ΠΎΠ»ΠΆΠ΅Π½ автоматичСски Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ нСзадСйствованныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ области памяти, ΠΎΠ±Ρ‰ΠΈΠ΅ расходы Java Π½Π° распрСдСлСниС памяти Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ расходы C++. Но ΠΏΡ€ΠΈ этом ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ освобоТдСния памяти Java обСспСчиваСт Π΄Π²Π° ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹Ρ… прСимущСства.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ фактичСски Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΎΡ‚ ΡƒΡ‚Π΅Ρ€ΠΈ памяти. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ошибки, связанныС с ΠΏΠΎΡ‚Π΅Ρ€Π΅ΠΉ областСй памяти, ΠΎΡ‡Π΅Π½ΡŒ часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Π² слоТных систСмах, ΠΎΡ‚ΠΏΠ°Π΄Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ поиска Ρ‚Π°ΠΊΠΈΡ… ошибок ΠΈ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ изучСния ΠΊΠΎΠ΄Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°, Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сокращаСтся Ρ†ΠΈΠΊΠ» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ нСдостаток слоТных систСм — фрагмСнтация памяти, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰Π°Ρ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ многочислСнных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ выдСлСния ΠΈ освобоТдСния памяти ΠΈ сущСствСнно ΡΠ½ΠΈΠΆΠ°ΡŽΡ‰Π°Ρ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния прилоТСния. Π₯ΠΎΡ€ΠΎΡˆΠΎ написанный «ΡΠ±ΠΎΡ€Ρ‰ΠΈΠΊ мусора» Java способСн, эффСктивно пСрСраспрСдСляя ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Java ΠΈ C++ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ распрСдСлСния памяти, характСрная для Java, достигаСтся Π·Π° счСт сниТСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ стратСгии «ΡΠ±ΠΎΡ€ΠΊΠΈ мусора» Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ освобоТдСния памяти Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Если программист Ρ‚Π²Π΅Ρ€Π΄ΠΎ придСрТиваСтся ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ философии, процСсс «ΡΠ±ΠΎΡ€ΠΊΠΈ мусора» обойдСтся ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅Π΄ΠΎΡ€ΠΎΠ³ΠΎ. Π’ случаС ΠΆΠ΅ использования ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°, ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ взаимосвязСй Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚ поиск Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

На Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ освобоТдСниС памяти для 10 ΠΌΠ»Π½. 32-разрядных Ρ†Π΅Π»Ρ‹Ρ… чисСл ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° C++ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ 0,812 сСк., Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° Java — 1,592 сСк. На основании Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Ρ…ΠΎΡ€ΠΎΡˆΠΎ прослСТиваСтся сниТСниС быстродСйствия Java. И всС ΠΆΠ΅ нСсмотря Π½Π° ΠΎΠ³Ρ€ΠΎΠΌΠ½ΡƒΡŽ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½ΡƒΡŽ «ΡΠ±ΠΎΡ€Ρ‰ΠΈΠΊΠΎΠΌ мусора», ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Java Π²ΠΏΠΎΠ»Π½Π΅ соизмСрима с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ C++.

Π”ΠžΠ‘Π’Π£ΠŸ К Π‘Π˜Π‘Π’Π•ΠœΠΠ«Πœ Π Π•Π‘Π£Π Π‘ΠΠœ

Помимо распрСдСлСния памяти ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ доступ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ систСмным слуТбам, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ Π²Ρ‹Π²ΠΎΠ΄ графичСских ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ², ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π·Π²ΡƒΠΊΠ° ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°ΠΌΠΈ. Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° C++ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊ систСмным функциям ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ интСрфСйсов ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (API). КаТдой ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ соотвСтствуСт свой API, поэтому ΠΏΡ€ΠΈ пСрСносС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ приходится ΠΏΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ сущСствСнныС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Java ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊ систСмным слуТбам любой ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ СдинствСнного API. КаТдая ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ‚ сходныС интСрфСйсы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° обращСния Java Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ рСсурсы.

Доступ ΠΊ систСмным рСсурсам: Java ΠΏΡ€ΠΎΡ‚ΠΈΠ² C++

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС прСимущСства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½ΠΎΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ систСмным слуТбам, ΠΎΠΏΡ€Π°Π²Π΄Ρ‹Π²Π°ΡŽΡ‚ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… интСрфСйсов Java. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Java, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ систСмныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚Π°ΠΊ ΠΆΠ΅ быстро, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ C++.

ЕдинствСнным ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ· этого ΠΏΡ€Π°Π²ΠΈΠ»Π° являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ срСдства, эквивалСнтныС функциям API Java, ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π½Π΅ Π½Π° всСх ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…. Π’ частности, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² Macintosh Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, поэтому ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ API Java Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Macintosh.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

ΠœΡ‹ протСстировали ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΡƒΡŽ извСстным спСциалистом Π² области Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ ΠΈ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Π΄ΠΈΠ° Π”ΠΆΠ΅Π΅ΠΌ Π‘Π°Ρ€Ρ‚ΠΎΡ‚ΠΎΠΌ. БыстродСйствиС Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ Π΅Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π°ΠΏΠΏΠ»Π΅Ρ‚Π° Java Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°Π»ΠΎΡΡŒ ΠΎΡ‚ этого показатСля ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, написанной ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ срСдств Win32 SDK.

Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ Π΄Π²ΡƒΡ… Π²Π°ΠΆΠ½Π΅ΠΉΡˆΠΈΡ… постулатов.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Java зависит ΠΎΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ JVM. ВСстовая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Ρ€Π°Π±ΠΎΡ‚Π°Π²ΡˆΠ°Ρ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Internet Explorer 4.0 ΠΈ Netscape Communicator Π² срСдС Windows NT, Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°Π»Π°ΡΡŒ высокой ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ выполнСния. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π»ΠΈΡΡŒ Π½Π° экранС нССстСствСнно, с высокой Π΄ΠΈΡΠΊΡ€Π΅Ρ‚Π½ΠΎΡΡ‚ΡŒΡŽ. Однако стоило Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹ Π² срСдС Windows 95, ΠΊΠ°ΠΊ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ стала Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ.

Π Π°Π·Π½ΠΈΡ†Π° Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ, ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π½Π½ΠΎΠΉ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ быстродСйствиС Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ² Π² срСдС Windows 95. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ различия Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° Π² ΠΎΠ±Π΅ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах.

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΏΠ°ΠΊΠ΅Ρ‚ JDK for Win32, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ†ΠΈΠ΅ΠΉ Sun, являСтся общСпринятым стандартом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обязаны ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ всС Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹ ΠΈ JVM.

ΠšΠžΠœΠŸΠ•Π’Π•ΠΠ’ΠΠžΠ‘Π’Π¬ Π ΠΠ—Π ΠΠ‘ΠžΠ’Π§Π˜ΠšΠ — Π“ΠΠ ΠΠΠ’Π˜Π― Π’Π«Π‘ΠžΠšΠžΠ™ ΠŸΠ ΠžΠ˜Π—Π’ΠžΠ”Π˜Π’Π•Π›Π¬ΠΠžΠ‘Π’Π˜

БоздаСтся Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ, ΡƒΠΏΡ€Π΅ΠΊΠ°ΡŽΡ‰ΠΈΠ΅ Java Π² нСдостаточной ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ пСрСвСдутся. Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, Ρ‚ΠΎ ΠΆΠ΅ самоС наблюдалось ΠΏΡ€ΠΈ появлСнии языков Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ поколСния, структурного ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования. КаТдая новая тСхнология ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π½ΠΎ ΠΈ заставляСт ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ дисциплину. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Java — это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ Π΅Π³ΠΎ нСприятиС ощущаСтся со стороны Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π΄ΠΎ сих ΠΏΠΎΡ€ Π½Π΅ осознал прСимущСств Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹.

ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½Π°ΠΌΠΈ Π°Π½Π°Π»ΠΈΠ· ΠΏΠΎΠΊΠ°Π·Π°Π», Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΊ с тСорСтичСской, Ρ‚Π°ΠΊ ΠΈ с практичСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ C++ ΠΈ Java Π½Π΅ Π½Π°Π±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ. А Ссли такая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΈ сущСствуСт, программист, ΠΏΠΈΡˆΡƒΡ‰ΠΈΠΉ Π½Π° Java, оказываСтся Π² Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹Π³ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° C++.

Если ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Java ΠΈ Π½Π° C++, оказываСтся, Ρ‡Ρ‚ΠΎ Ρƒ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ, бСзусловно, Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ основных прСимущСства, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ быстродСйствиС слоТных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

ΠžΡΡ‚Π°Π΅Ρ‚ΡΡ лишь ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ эти прСимущСства:

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ Java Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ?

ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, Π²Ρ‹ Π·Π°Π΄Π°Π΅Ρ‚Π΅ Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… вопроса:

  1. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ Java Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, ΠΈ Ссли Π΄Π°, Ρ‚ΠΎ ΠΏΠΎΡ‡Π΅ΠΌΡƒ?
  2. ΠŸΠΎΡ‡Π΅ΠΌΡƒ Java считаСтся ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ, хотя ΠΎΠ½Π° быстрСС ΠΌΠ½ΠΎΠ³ΠΈΡ… Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²?

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… Π±ΠΎΠ»Π΅Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° вопрос «Π΄Π»ΠΈΠ½Π½ΠΎΠΉ Π»ΠΈ Π²Π΅Ρ€Π΅Π²ΠΊΠΈ». Π­Ρ‚ΠΎ сводится ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ Β«ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΒ». По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с чистым ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ Java Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ быстр. По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ языками, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ) ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, Π° Π·Π°Ρ‚Π΅ΠΌ динамичСски ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, C# ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Π΅ Π² . NET), Java находится ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅. По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с языками, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² чистый ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ (часто большиС) Π³Ρ€ΡƒΠΏΠΏΡ‹ людСй, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Π΄ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ΠΌ своих ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, C, C++, Fortran, Ada), Java довольно Ρ…ΠΎΡ€ΠΎΡˆΠΎ справляСтся с нСсколько Π²Π΅Ρ‰Π΅ΠΉ , Π½ΠΎ Π² Ρ†Π΅Π»ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, нСсколько ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅.

МногоС ΠΈΠ· этого связано Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ β€” Π² основном, это сводится ΠΊ Ρ‚ΠΎΠΌΡƒ Ρ„Π°ΠΊΡ‚Ρƒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚, ΠΏΠΎΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ динамичСский/JIT-компилятор, поэтому, Ссли Ρƒ вас Π½Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, которая выполняСтся довольно Π΄ΠΎΠ»Π³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ с , Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΠΏΡ€Π°Π²Π΄Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ компилятор Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ компиляторов Java (ΠΈ C# ΠΈ Ρ‚. Π΄.) Π½Π΅ ΠΏΡ€ΠΈΠ»Π°Π³Π°ΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ усилий для Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ слоТной ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях Π΄Π΅Π»ΠΎ Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ, сколько Π² Ρ‚ΠΎΠΌ, Π³Π΄Π΅ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ. МногиС Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ NP-ΠΏΠΎΠ»Π½Ρ‹ΠΌΠΈ, поэтому врСмя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ½ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚, быстро растСт с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π°Ρ‚Π°ΠΊΡƒΠ΅ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Один ΠΈΠ· способов ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ врСмя Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Ρ€Π°Π·ΡƒΠΌΠ½ΠΎΠ³ΠΎ β€” ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Ρ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° Ρ€Π°Π·. Когда компилятор ΠΆΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ сСбС ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚Ρƒ ΠΆΠ΅ ΡΠ°ΠΌΡƒΡŽ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊ Π³ΠΎΡ€Π°Π·Π΄ΠΎ большим частям ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠΎΠ΄ для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ довольно Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΉ (ΠΈ поэтому ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ довольно большим). ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΆΠ΄Π΅Ρ‚, ΠΏΠΎΠΊΠ° загрузится этот ΠΊΠΎΠ΄ (Π° врСмя запуска JVM часто являСтся Π²Π°ΠΆΠ½Ρ‹ΠΌ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ Π² ΠΎΠ±Ρ‰Π΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ), рСализация Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠ±Π°Π»Π°Π½ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ врСмя, сэкономлСнноС Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС, ΠΈ потСрянноС Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ β€” ΠΈ учитывая, ΠΊΠ°ΠΊ ΠΌΠ°Π»ΠΎ ΠΊΠΎΠ΄Π° ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ Π²Ρ‹Π³ΠΎΠ΄Ρƒ ΠΈΠ· слоТной ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, сохранСниС нСбольшого Ρ€Π°Π·ΠΌΠ΅Ρ€Π° JVM ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹Π³ΠΎΠ΄Π½ΠΎ.

Вторая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ с Java Π²Ρ‹ часто ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. НапримСр, для ΠΌΠ½ΠΎΠ³ΠΈΡ… Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Swing, ΠΏΠΎ сути, являСтся СдинствСнной доступной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ ΠΎΠΊΠΎΠ½ . Π’ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ C++ Π΅ΡΡ‚ΡŒ Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ дСсятки ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ Ρ‚. Π΄., каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ свой собствСнный Π½Π°Π±ΠΎΡ€ компромиссов ΠΌΠ΅ΠΆΠ΄Ρƒ простотой использования ΠΈ быстрым Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ, согласованным внСшним Π²ΠΈΠ΄ΠΎΠΌ ΠΈ Ρ€ΠΎΠ΄Π½Ρ‹ΠΌ внСшним Π²ΠΈΠ΄ΠΎΠΌ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ЕдинствСнным ΠΊΠ°ΠΌΠ½Π΅ΠΌ прСткновСния являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Qt) ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ довольно Π΄ΠΎΡ€ΠΎΠ³ΠΈΠΌΠΈ (ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, для коммСрчСского использования).

Π’-Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, большая Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°, написанного Π½Π° C++ (ΠΈ Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Π½Π° C), просто устарСла ΠΈ стала Π±ΠΎΠ»Π΅Π΅ Π·Ρ€Π΅Π»ΠΎΠΉ. МногиС ΠΈΠ· Π½ΠΈΡ… содСрТат ядро ​​подпрограмм, написанных дСсятилСтия Π½Π°Π·Π°Π΄, ΠΊΠΎΠ³Π΄Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя Π½Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π° Π±Ρ‹Π»ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ, ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ. Π­Ρ‚ΠΎ часто ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ прСимущСство Π² ΠΊΠΎΠ΄Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ мСньшС ΠΈ быстрСС. C++ (ΠΈΠ»ΠΈ C) ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ·Π½Π°Π½ΠΈΠ΅ Π·Π° нСбольшой ΠΈ быстрый ΠΊΠΎΠ΄, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ это Π² большСй стСпСни ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈ ограничСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ Π±Ρ‹Π» написан. Π’ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ стСпСни это ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡΠ°ΠΌΠΎΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΌΡƒΡΡ пророчСству: ΠΊΠΎΠ³Π΄Π° люди заботятся ΠΎ скорости, ΠΎΠ½ΠΈ часто Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ C++, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρƒ Π½Π΅Π³ΠΎ такая рСпутация. Они тратят Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя ΠΈ усилия Π½Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΈ ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ быстрого ΠΊΠΎΠ΄Π° Π½Π° C++.

Подводя ΠΈΡ‚ΠΎΠ³, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ рСализация Java Π΄Π΅Π»Π°Π΅Ρ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ Π² Π»ΡƒΡ‡ΡˆΠ΅ΠΌ случаС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎΠΉ. Π₯ΡƒΠΆΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‚Π°ΠΌ, Π³Π΄Π΅ Java Π²ΠΈΠ΄Π½Π° , Ρ‚Π°ΠΊΠΈΠ΅ Π²Π΅Ρ‰ΠΈ, ΠΊΠ°ΠΊ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ инструмСнты ΠΈ врСмя запуска JVM, Π² любом случаС часто ΠΈΠ³Ρ€Π°ΡŽΡ‚ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ€ΠΎΠ»ΡŒ, Ρ‡Π΅ΠΌ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния самого языка. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях C ΠΈ C++ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΏΡ€ΠΈΠ·Π½Π°Π½ΠΈΠ΅ Π·Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ являСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ просто усСрдной Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ.

Π§Ρ‚ΠΎ касаСтся Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ вопроса, я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ это Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ вопрос чСловСчСской ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹ Π² дСйствии. НСсколько Ρ„Π°Π½Π°Ρ‚ΠΈΠΊΠΎΠ² Π΄Π΅Π»Π°ΡŽΡ‚ довольно ΠΏΡ€Π΅ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ заявлСния ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Java ΠΎΡΠ»Π΅ΠΏΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстр. ΠšΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅Ρ‚ ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚, Ρ‡Ρ‚ΠΎ запуск Π΄Π°ΠΆΠ΅ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ нСсколько сСкунд, Π° ΠΏΡ€ΠΈ запускС ΠΎΠ½Π° каТСтся ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ ΠΈ Π½Π΅ΡƒΠΊΠ»ΡŽΠΆΠ΅ΠΉ. НСмногиС, вСроятно, ΡƒΡ‚Ρ€ΡƒΠΆΠ΄Π°ΡŽΡ‚ сСбя Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ Π²Π΅Ρ‰Π΅ΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ это врСмя запуска JVM ΠΈ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΏΡ€ΠΎΠ±ΡƒΡŽΡ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, ΠΊΠΎΠ΄ Π΅Ρ‰Π΅ Π½Π΅ скомпилирован β€” Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° интСрпрСтируСтся, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ ΠΆΠ΄ΡƒΡ‚. Π₯ΡƒΠΆΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π΄Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ достаточно быстро, внСшний Π²ΠΈΠ΄ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ каТСтся Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ странным ΠΈ Π½Π΅ΡƒΠΊΠ»ΡŽΠΆΠΈΠΌ, поэтому Π΄Π°ΠΆΠ΅ Ссли Π±Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ измСрСния ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΈ быстроС врСмя ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ°, ΠΎΠ½ всС Ρ€Π°Π²Π½ΠΎ казался Π±Ρ‹ Π½Π΅ΡƒΠΊΠ»ΡŽΠΆΠΈΠΌ.

Если ΠΈΡ… ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‚ΠΎ получится довольно простая ΠΈ СстСствСнная рСакция: Java мСдлСнная, уродливая ΠΈ нСповоротливая. Учитывая ΡˆΡƒΠΌΠΈΡ…Ρƒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстро, сущСствуСт тСндСнция слишком остро Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ Π½Π΅ΠΌ ΠΊΠ°ΠΊ ΠΎ уТасно ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΌ вмСсто (Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ) Β«Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, ΠΈ это Π² основном ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°Ρ…Β». Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, это самоС Ρ…ΡƒΠ΄ΡˆΠ΅Π΅ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, ΠΏΠΈΡˆΡƒΡ‰Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ нСсколько ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° этом языкС. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Β«hello worldΒ» Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ языков каТСтся ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΌ, Π½ΠΎ Π² Java Π΅ΡΡ‚ΡŒ Π»Π΅Π³ΠΊΠΎ замСтная ΠΏΠ°ΡƒΠ·Π° ΠΏΡ€ΠΈ запускС JVM. Π”Π°ΠΆΠ΅ чистый ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Π² ΡƒΠ·ΠΊΠΈΡ… Ρ†ΠΈΠΊΠ»Π°Ρ… ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌ, всС Ρ€Π°Π²Π½ΠΎ часто Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ быстрСС для Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° просто ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒΡΡ ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅.

ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ количСствСнно ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ C++ ΠΈ Java?

Π£ языков Π½Π΅Ρ‚ скорости. Ни Π² спСцификациях языка Java, Π½ΠΈ Π² C++ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ Β«ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ скомпилированы, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π½Π° эффСктивными».

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ язык опрСдСляСт список Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π΄Π΅Π»Π°Ρ‚ΡŒ, ΠΈΠ»ΠΈ, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, каТСтся, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ , Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях устанавливаСт Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ Ρ‚ΠΎΠ³ΠΎ, насколько эффСктивной ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π½ΠΎ часто ΡƒΠΌΠ½Ρ‹ΠΉ компилятор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эти ΠΏΡ€Π°Π²ΠΈΠ»Π°. Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ всС, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Π΅Π΄Π΅Ρ‚ сСбя , ΠΊΠ°ΠΊ Ссли Π±Ρ‹ спСцификация Π±Ρ‹Π»Π° соблюдСна. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ встроСны, Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΡƒΡ‡ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π² стСк ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ зависит ΠΎΡ‚ Ρ‚Ρ€Π΅Ρ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ²: компилятора, Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹/оборудования ΠΈ самого ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

НС «ΡΠ·Ρ‹ΠΊ». Π‘Π°ΠΌΠΎΠ΅ Π±Π»ΠΈΠ·ΠΊΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅, это компилятор.

Π•ΡΡ‚ΡŒ вСскиС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ΄ΠΈΠ½ язык ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ быстрСС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. C++ Π΄Π°Π΅Ρ‚ мСньшС ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½ΠΎ Java обрабатываСтся JIT, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎ C++ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π»Π΅Π³ΠΊΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ… И ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅, Π½ΠΈΠ³Π΄Π΅ Π² Π² спСцификации сказано, Ρ‡Ρ‚ΠΎ C++ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ , Π° Π½Π΅ . Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ я ΡΡ‡ΠΈΡ‚Π°ΡŽ, Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ компиляторы Java, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ собствСнный ΠΊΠΎΠ΄ вмСсто Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° JVM.

Π’Π°Ρˆ вопрос ΠΈΠΌΠ΅Π΅Ρ‚ смысл Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ компилятор для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ языка ΠΈ конкрСтная рСализация вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ языкС, , ΠΈ Π² этом случаС Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… самый быстрый .

Π‘Π±ΠΎΡ€ΠΊΠ° мусора β€” Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, сборка мусора связана с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹ΠΌΠΈ расходами, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ сокращСния. Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΡƒΡ‡ΠΈ смСхотворно дСшСво Π² управляСмых языках, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Java ΠΈΠ»ΠΈ . NET, , ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ управляСтся сборщиком мусора. Π’ Π‘++ это… Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½ΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ОБ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΊΡƒΡ‡Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ свободный Π±Π»ΠΎΠΊ памяти Π² Π±ΠΎΠ»Π΅Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ пространствС памяти. Какой самый быстрый? Зависит ΠΎΡ‚ ОБ. Зависит ΠΎΡ‚ компилятора. Зависит ΠΎΡ‚ исходного ΠΊΠΎΠ΄Π°.

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ большоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Если Π²Ρ‹ Π²ΠΎΠ·ΡŒΠΌΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° Java ΠΈ Π½Π°ΠΈΠ²Π½ΠΎ пСрСнСсСтС Π΅Π΅ Π½Π° C++, ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π΄Π΅Ρ€ΡŒΠΌΠΎ. C++ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ функциями ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠΈΠ΅ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСсто Π½ΠΈΡ…. Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΡƒΡ‡ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ Π² C++, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ повторная рСализация ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Java Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΡ€Π°ΠΉΠ½Π΅ нСэффСктивной. Π’ΠΎ ΠΆΠ΅ самоС ΠΈ ΠΏΡ€ΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ. МногиС ΠΈΠ΄ΠΈΠΎΠΌΡ‹ C++ Π±ΡƒΠ΄ΡƒΡ‚ излишнС ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌΠΈ, Ссли ΠΈΡ… ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСпосрСдствСнно Π½Π° Java. Π˜Ρ‚Π°ΠΊ, Π΄Π°ΠΆΠ΅ Ссли Π²Ρ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡŒ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ ΠΈ ΠΎΠ΄Π½ΠΎΠΌ компиляторС, ΠΊΠ°ΠΊ Π²Ρ‹ сравниваСтС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹? Π§Ρ‚ΠΎΠ±Ρ‹ Π΄Π°ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ компилятору, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π²Π΅ Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈ Ρ‚ΠΎΠ³Π΄Π° это ΡƒΠΆΠ΅ Π½Π΅ ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°.

This entry was posted in ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΠ΅