ПредишенСледващото

Но понякога, вече трезвен, когато си мисля за такова сравнение, за цялата си желание да се разбере защо Java по принцип може да бъде не толкова бързо, но поне не по-бавен от C ++, аз нямам аргументи, дори и за себе си.

Да започнем с някои "даден":

Да предположим, А - е на линейната скорост на машината, когато. Б - компилация скорост JVM байткод до машинен код. След това, като цяло скоростта на кода:

Очевидно е, че В1 = 0. защото C ++ генерира машинен код директно и не изисква допълнителна работа за извършване на процесите. B2, но абсолютно не е нула, защото без значение колко е ефективен не е JIT компилатор, тя винаги е нужно малко време да се съберат. Освен това, JIT съставянето не всички наведнъж, и "podkompiliruet", тъй като преминава изпълнение пътеки. Оказва се, винаги има ненулева вероятност, че изведнъж трябва да изпълни код, които не са били длъжни преди това, и това ще отнеме време за съставянето му. Дори ако приемем, че компилаторът JIT използва сложни методи за предсказване на изпълнение на пътища и прави всичко, за да се намали В2. B2, но по дефиниция не 0. Ако имаше 0, няма да има JVM и ще почисти машинен код.

На следващо място, разгледа А1 и А2. Тези настройки определят колко добре компилаторът генерира код (или байт код). По мое лично, субективно и предубедено мнение, C ++ (не C) по-голям шанс за оптимизиране благодарение на шаблони (съставител има пълен семантична информация за inline'a) и генериране на машинен код за определена платформа (съставител знае точно кои машинни инструкции Това ще бъде максимално ефективен във всеки случай). Уви, аз не съм много добър в Java generic'ah и ръководи само от слухове, че в Java те са "нереално", написана много по-късно и по-малък от шаблони C ++. И понеже има издаде стандартен преносим JVM-код, не е възможно да се оптимизира за определена платформа. Надяваме се, че това ще направи СЕР, но няма да има семантична информация за повече оптимизация в дълбочина. И JIT трябва да е бързо, а след това няма да има компромис между качество и оптимизация на скоростта компилация. В C ++, това не е проблем, тъй като можете да компилирате какъв период от време.

Така че, това са моите причини за себе си, измерени в виртуални папагали. Не ме разбирайте се убедя, че Java може да бъде по-бързо, или поне наравно с C ++ за скорост. Ще се радвам за помощта в разбирането на този въпрос.

Ние Стас прекарал няколко прости сравнения, главно в изпълнението на бързасортировка и Java код за линейна скорост загубил някъде в 10%.

Разбираемо е, че 10% не винаги правят времето. Понякога важни инструменти за разработка на самоанализ, развитие на околната среда, се контролира изпълнението на код на подмяната на муха и много повече, което прави на платформата Java, а не "побойник" C ++. Но защо говорим за скоростта?

Свързани статии

Подкрепете проекта - споделете линка, благодаря!