ДЖАВАПОРАЖЕНИЕ УЖЕ 0.000000000000

*лет страданий
Вы уже поняли почему Java это хлам?
Прекрасно! Унизим Увидим FastCGI в работе

Тест FastCGI

Чем тысячу раз рассказывать про недостатки FastCGI (Особенно на джаве (Кто вообще додумался пихать CGI в тяжеловесную нескриптовую жабу?!)), лучше разок показать джава поражение. Как? Как насчёт вполне реальной задачки в подсчитать парочку тысяч хэшей SHA-256?

Код на Java

long startTime = System.nanoTime();
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] encodedhash = digest.digest(queryString.getBytes());
for(int i =0; i < 1000000; i++ ){
    encodedhash = digest.digest(encodedhash);
}
String result = bytesToHex(encodedhash);

long endTime = System.nanoTime();
long durationUs = (endTime - startTime) / 1000;
ResponseSender.sendJSONResponse(result, durationUs);

Код на нормальном языке (тоже использует придурковатый FCGI)

let start_time = Instant::now();

let mut hasher = Sha256::new();
hasher.update(query_string.as_bytes());
let mut current_hash = hasher.finalize();

for _ in 0..1_000_000 {
    let mut h = Sha256::new();
    h.update(current_hash);
    current_hash = h.finalize();
}
let result_hex = hex::encode(current_hash);
let elapsed_us = start_time.elapsed().as_micros();
Здравомыслящий читатель воскликнет - так в чём же будет разница? Довольно скоро у Java сработает JIT и она будет быстрой и эффективной. Справедливости ради, большей частью проблемы тут является чертовски устаревшая технология, которая в любой реализации будет уступать адекватному коду. Тем не менее это не помешает джаве окунуться лицом в грязь.
В любом случае, давайте исполним небольшую демку:
Ждём запуска...
Ждём запуска...

Итоговое использование памяти:

Java: --- МБ
Rust: --- МБ
Что с лицом у JVM? Почему память в канаве?
Это если ещё не говорить о времени выполнения почти в 1.5 раза больше в максимально выгодных условиях JIT и вычислением самого SHA через скомпиленный код сей.