Вы уже поняли почему 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 через скомпиленный код сей.
Это если ещё не говорить о времени выполнения почти в 1.5 раза больше в максимально выгодных условиях JIT и вычислением самого SHA через скомпиленный код сей.