Но понякога, вече трезвен, когато си мисля за такова сравнение, за цялата си желание да се разбере защо 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 ++. Но защо говорим за скоростта?
Свързани статии