Академия за модерно програмиране

виртуалната машина
модерно

Java и OOP

Разлики и характеристики на Java

Java първоначално е замислена като технология, чиято основна цел е да позволи на потребителите на различни операционни системи да стартират едни и същи приложения на своите компютри, разположени на отдалечени машини. Необходимостта от това възникна поради факта, че поради разликата в операционната система създателите на интернет сайтове бяха ограничени в способността си да добавят функционалност към своите страници (програмата, публикувана на сайта, ще работи само на платформата, за която беше написано). Полученото технологично решение на този проблем обаче стана широко разпространено като инструмент за разработване на по-широк клас приложения. Някои функции на Java са разгледани по-долу.

1.1 Независимост от платформата

Една от основните цели на Java беше да може да изпълнява една и съща програма на различни платформи. В Java този проблем се решава чрез компонент, наречен Java виртуална машина (JVM - Java Virtual Machine). По този начин има два компонента на Java технологията:

  • Език за програмиране + компилатор
  • Java виртуална машина

Разликата между Java компилатора и компилаторите на такива езици като C/C ++, Pascal е, че резултатът от компилирането на програма е файл с така наречения байт код - междинен език, който не е набор от инструкции за специфичен процесор. За да се стартира програмата, файлът на байт кода се подава към входа на виртуалната машина, която преобразува инструкциите за байт кода в инструкции на процесора. По този начин, за да се осигури междуплатформена платформа, е достатъчно да се напише Java виртуална машина за всяка операционна система. В момента тази задача е изпълнена за всички често срещани операционни системи.

1.2 Липса на директна работа с памет

Според създателите на Java повечето програми не са стабилни поради факта, че разработчиците получават директен достъп до програмната памет (в C/C ++, Pascal, тази функция е реализирана с помощта на указатели). В Java този проблем беше решен по радикален начин, като се забрани на програмиста да има директен достъп до паметта. По този начин програмите, написани на Java, са по-здрави. Увеличаването на стабилността обаче е придружено от намаляване на производителността (например всеки път, когато има достъп до елемент от масив, машината Java проверява дали масивът е надвишен).

1.3 Събиране на боклука

Друг недостатък на традиционните езици за програмиране е, че при разработването на програми се отделя много време за ръчно изтриване на създадените обекти, които вече не трябва да се използват (пишете изтриване за всяко ново в C ++ или изхвърляне за всяко ново в Pascal ). Грешките на програмиста в тази част на програмата могат да доведат до изтичане на памет по време на изпълнение. За да се реши този проблем, във виртуалната машина Java е включен компонент, който следи всички създадени обекти и премахва тези, които вече не могат да се използват. Този компонент се нарича събирач на боклук (сметосъбирач), и неговият процес е събиране на боклук. По този начин програмистът вече няма нужда да следи всички създадени обекти. Освен това в Java няма ръчно изтриване на обекти.

Трябва да се отбележи, че събирачът на боклук е една от сложните части на машината Java. Да разгледаме например един от алгоритмите за сглобяване: за всеки създаден обект ще съхраним броя на препратките към него. В случай, че броят на връзките стане нула, изтрийте обекта. Проблемът с този подход е, че два обекта могат вътрешно да съдържат препратки един към друг и поради това те никога няма да бъдат изтрити (в ранните версии на Java на програмистите се препоръчва да прекъсват такива кръгови препратки сами, когато обектите вече не са използвано).

1.4 Байт код на Java

Компилаторите на традиционни програмни езици извършват оптимизации на изходния код, за да подобрят производителността на програмата по време на компилацията. Компилаторът на Java не си поставя такава задача. Освен това байтовият код, получен в резултат на компилиране на програма на Java, може да бъде почти 100% трансформиран в изходния код. Байткодът съхранява имената на функции, класове и програмни променливи (строго погледнато, това твърдение не е вярно за всички програмни идентификатори, например имената на локални променливи не се запазват). Неяснотата може да възникне и поради факта, че някои различни версии на изходния код (например различни цикли) могат да се компилират в един и същ байт код.

Такова свойство на Java ви позволява да извиквате функции и да създавате обекти на класа, знаейки само техните имена (т.нар отражение).

1.5 JIT - компилатор

Нито едно от горните свойства не подобри производителността на програмата, така че беше добавена машината Java JIT (Just In Time) - компилатор. JIT - компилаторът е част от виртуалната машина и е ангажиран с факта, че оптимизира байт кода на програмата по време на изпълнение и го превръща в инструкции на родния процесор. Трябва да се отбележи обаче, че всички промени, направени от JIT компилатора, са ефективни само по време на изпълнението на програмата и се отхвърлят при нейното прекратяване. Предимството на JIT компилатора е, че по време на изпълнението на програмата компилаторът има достъп до програмните данни, което позволява по-гъвкава оптимизация (технология HotSpot). Подобренията могат да бъдат толкова значителни, че за някои (специално подбрани) примери Java програмите работят по-бързо от другите езици.

1.6 Стандартна библиотека на Java

Програмите ще се разработват по-бързо и ще заемат по-малко място, ако повечето от стандартните алгоритми, най-приложимите типове данни и други действия се изпълнят предварително и се доставят с езика за програмиране. По този начин едно от най-съществените предимства на Java е наличието на стандартна библиотека като част от езика. Стандартната библиотека на Java се разраства от версия на версия и в момента обхваща огромен брой възможни приложения. От друга страна, доста съществен проблем е, че тъй като няма алтернатива на стандартната библиотека, грешките, срещани в нея, често се разхождат от версия на версия.

1.7 Слънчев монопол

Java технологията е собственост на Sun и определя езиковия стандарт. Следователно думата „Java“ може да се отнася само за сертифициран от Sun продукт. Има обаче доста технологии, които имат почти пълна съвместимост с Java, но не са. Един от най-известните проекти - Waba (www.waba.com, www.superwaba.com) - е технология за разработване на програми за мобилни устройства. Важно е да се има предвид, че подобни проекти може да не поддържат пълната функционалност на виртуалната машина или да предоставят пълна стандартна библиотека.

1.8 Език Java

Java е обектно ориентирани език.

Нека разгледаме плюсовете и минусите на тези функции на Java: