Java, праграмная платформа

З пляцоўкі Вікіпедыя.
Перайсці да: рух, знайсці

Java — сямейства праграмных прадуктаў і спецыфікацый ад кампаніі Sun Microsystems, якія разам складаюць праграмную платформу для распрацоўкі прыкладнога праграмнага забеспячэння і разгортвання яго ў кросплатформеным асяроддзі. Розныя рэалізацыі платформы Java дазваляюць ствараць праграмнае забеспячэнне для прылад шырокага спектру складанасці: ад убудаваных прылад і мабільных тэлефонаў да сервераў і суперкамп'ютараў. Найбольшае распаўсюджанне Java атрымала ў пабудове праграмных сродкаў для абслугоўвання патрэб вялікіх прадпрыемстваў, у мабільных і серверных вэб-тэхналогіях, радзей Java выкарыстоўваецца на настольных кампьютарах, а ў выпадках, калі патрэбна забяспечыць павышаную функцыянальнасць і бяспеку, — дзеля прагляду вэб-старонак. Java не выкарыстоўвае такіх нізкаўзроуневых канструкцый, як указальнікі, праца з памяццю аблегчана тым, што ўсе аб'екты — гэта спасылковыя тыпы, экзэмпляры якіх размяшчаюцца ў купе. За кіраваннем выкарыстоўвання памяці адказвае віртуальная машына Java па сродкам аўтаматызаванага зборшчыка смецця

Платформа[правіць | правіць зыходнік]

Згодна з канцэпцыяй «напісана адзін раз, працуе ўсюды», праграма напісаная для платформы Java кампілюецца не ў машынны код, а ў байт-код, серадой выканання для якога з'яўляецца Java Runtime Environment(JRE). Віртуальная машына Java (JVM) — частка JRE — інтэрпрэтуе байт-код у машынныя інструкцыі, спецыфічныя для той апаратнай і праграмнай платформы, для якой рэалізавана дадзеная версія JRE. Такім чынам дасягаецца кросплатформенасць праграмнага забеспячэння, напісанага для Java.

  • Java Card: тэхналогія, якая дазваляе запускаць у серадзе павышанай бяспекі Java-праэкты на смарт-картах і іншых прыладах, якія максімальна абмежаваны ў памяці і выканаўчых магчымасцях
  • Java ME: набор тэхналогій і спецыфікацый, прызначаных для невялікіх прылад, якія абмежаваны ў памяці, спажыванні энергіі, маюць невялікі дысплэй. З цягам часу былі вылучаны дзве галіны гэтай платформы: Connected Limited Device Configuration (CLDC) з асаблівай увагай на невялікія мабільныя тэлефоны і Connected Device Configuration (СDС) для прылад, якія не так моцна абмежаваны ў рэсурсах і маюць пашыраныя магчымасці, напрыклад, смартфоны.
  • Java SE: базавая платформа, якая можа быць выкарыстана і на ўсталяваных прыладах, і на хатніх кампьютарах, і на вялікіх серверах
  • Java EE: платформа, якая прапануе шырокі функцыянал, неабходны для пабудовы масштабуемых праграмных прадуктаў, якія забяспечваюць вэб патрэбы і патрэбы вялікіх прадпрыемстваў, як сервернае ПЗ

Java Virtual Machine[правіць | правіць зыходнік]

Канцэпцыя віртуальнай машыны Java ляжыць у аснове ўсёй Java-платформы. Java-праграмы кампілююцца ў байт-код аднолькавы для ўсіх апаратных асяроддзяў, бо інтэрпрэтатарам кода з'яўляецца JVM. Першапачаткова JVM проста правярала на бяспеку і выконвала байт-код, які на ёй запускаецца, але, пачынаючы з версіі 1.2, якая выйшла ў 1998 годзе, кампанія Sun выпускае віртуальныя машыны Java, у склад якіх уключан кампілятар часу выканання (just-in-time альбо JIT compiler). Гэта тэхналогія дазваляе пад час выканання аналізаваць уваходны байт-код. Часткі праграмы, якія паўтараюцца, JIT кампілятар перапрацоўвае ў апаратныя інструкцыі спецыфічныя для дадзенай аперацыйнай сістэмы і працэсара. JIT-кампіляцыя значна паскарае працэс інтэпрытацыі, бо скампіляваны код будзе выконвацца так жа хутка, як і код спецыфічны для канкрэтнай сістэмы выканання.

Java Virtual Machine дазваляе пісаць праграмныя прадукты, якія не залежаць ад платформы, але сама JVM кросплатформенай не з'яўляецца, і кожная серада выканання мае сваю асабістую віртуальную машыну.

У 1996 годзе кампанія Sun выпусціла першую версію спецыфікацыі Java-машыны, вядомую пад назвай «Блакітная кніга». Гэтая спецыфікацыя дэ-факта стала стандартам платформы Java і дазволіла стварыць мноства альтэрнатыўных рэалізацый JVM. Зыходны код на мове C адной з мінімальных рэалізацый віртуальнай машыны Java (Kilo Virtual Machine) прадстаўлены на афіцыйным сайце кампаніі Sun (такая Java-машына звычайна выкарыстоўваецца ў мабільных прыладах у складзе платформы Java ME)

API платформы Java[правіць | правіць зыходнік]

Большасць сучасных аперацыйных сістэм палягчаюць працу праграмістаў шляхам прапановы дынамічна звязаных бібліятэк, у якіх ужо рэалізован найбольш запатрабаваны функцыянал. Бібліятэкі і сігнатуры іх метадаў складаюць інтэрфейс праграмнага прыкладання (API). Цалкам зразумела, што API розных аперацыйных сістэм будуць адрознівацца адзін ад аднаго і іх прамое выкарыстанне прывяло б да залежнасці Java ад той ці іншай платформы

Па гэтай прычыне асяроддзе выканання Java (JRE) уключае ў сябе, разам з віртуальнай машынай, яшчэ і свой асабісты API. Можна вылучыць тры асноўныя задачы, якія ён вырашае. Па-першае, гэта рэалізацыя каранёвых класаў, ад якіх наследуюцца ўсе астатнія (Object, Class, Enum, Exception, Thread...), а таксама рэалізацыя трывіальных праблем праграмавання, такіх як вылічэнне матэматычных функцый, праца з «доўгімі» лічбамі, сарціроўка масіваў і іншае. Па-другое, API Java высока абстрагуе задачы вельмі спецыфічныя для кожнай платформы. Напрыклад сістэмы ўвода-вывада, праца з сеткай і сеткавымі пратаколамі, выкарыстоўванне далучаных прылад. І па-трэцяе, калі ніжэйляжачая платформа не падтрымлівае тэхналогію, якую прадугледжвае Java, наўпрост, то сістэма павінна працягваць каррэктную працу, вынік якой павінен як мага менш адрознівацца ад сістэмы к сістэме

Кампаніяй Sun рэалізаваны тры асноўныя Java-платформы, якія, з пункту гледжання праграмавання, будуць адрозніваюцца сваім API. Базавай для трох платформай з'яўляецца Java SE (стандартнае выданне), на яе аснове пабудаваны Java EE (карпрацыйнае выданне) і Java ME (мікра выданне). Таксама ёсць і іншыя вельмі важныя платформы ці тэхналогіі (Java Card, JavaFX, JavaDB і інш.), API якіх накіравана на вырашэнне спецыфічных праблем сваёй галіны выкарыстання.

Платформа Java дазваляе выкарыстоўваць староннія бібліятэкі не толькі ў сваёй функцыянальнай частцы, але і ў рэалізацыі серады выканання. Усё, што праграмнаму забеспячэнню для гэтага патрэбна - прайсці серыю тэстаў кампаніі Sun на сумяшчальнасць з платформай.

Мовы праграмавання[правіць | правіць зыходнік]

Першапачаткова на платформе Java працавала толькі адна мова праграмавання створаная для яе і названая ў яе гонар, але для віртуальнай машыны няма аніякай розніцы, на якой мове была першапачаткова напісана праграма - галоўнае, каб яна была скампілявана ў карэктны байт-код. Таму нарастаючая папулярнасць платформы прывяла да стварэння Java-кампілятараў для ўжо існуючых моў праграмавання, узнікнення крыху змененых моў праграмавання для лепшага ўжывання магчымасцей платформы, а таксама да стварэння новых моў, якія знаходзяць сваё выкарыстанне ў розных сферах праграмавання

Мова Java-версія
Ada JGNAT
AWK Jawk[1]
BBx BBj
C C to Java Virtual Machine compilers[2]
Cobol Micro Focus JVM Visual COBOL
Veryant isCobol
ColdFusion ColdFusion
Railo
Open BlueDragon
Common Lisp Armed Bear Common Lisp[3]
CLforJava
Jatha (Common LISP)
Component Pascal Gardens Point Component Pascal
Erlang Erjang[4]
Forth myForth[5]
JavaScript Rhino
LOGO jLogo[6]
XLogo[7]
Lua Kahlua[8]
Luaj[9]
Jill[10]
Oberon-2 Canterbury Oberon-2 for JVM
Objective Caml (OCaml) OCaml-Java[11]
Pascal Canterbury Pascal for JVM
MIDletPascal
PHP IBM WebSphere sMash PHP (P8)[12]

Caucho Quercus[13]

Python Jython
Rexx IBM NetRexx
Ruby JRuby
Scheme Bigloo
Kawa
SISC
JScheme
Tcl Jacl
JTcl[14]

Java і.NET Framework[правіць | правіць зыходнік]

Платформа .NET Framework лічыцца адказам карпарацыі Microsoft на ўзрослую к канцу 90-х папулярнасць Java. Калі існаванне прамежкавага байт-кода ў Java было першапачаткова накіравана на падтрымку кросплатформенай канцэпцыі, то.NET Framework выкарыстоўвае CLI (агульная прамежкавая мова) для падтрымкі адной платформай адразу некалькіх моў праграмавання (клас мовы C# наследаваны ад класа Visual Basic.NET, к прыкладу, павінен быў стаць нармальнай практыкай). CLI - мова праграмавання зразумелая чалавеку, яе можна разглядаць як мову асэмблер для віртуальнай машыны.NET. Гэта палягчае задачу дэкампіляцы, што можа быць выкарастана як у карысных мэтах, так і для раскрыцця камерцыйнай тайны.

Платформа.NET, распрацоўкай якой займаецца Microsoft, не з'яўляецца кросплатформенай або значна звужае функцыянал пры пераходзе на іншыя аперацыйныя сістэмы. Аднак існуе праект Mono, які займаецца распрацоўкай ліцэнзаванай Microsoft кросплатформенай версіяй.NET Framework, а таксама не ліцэнзаванымі кросплатформенымі версіямі WinForms, ADO.NET и ASP.NET

Visual J#, створаная для пераходу Java-праграмістаў на платформу.NET, не была сумяшчальнай са спецыфікацыяй Java і, з прычыны нізкай папулярнасці, цалкам перастане падтрымлівацца платформай у 2015 годзе

Java Development Kit[правіць | правіць зыходнік]

JDK - камплект распрацоўшчыка Java, створаны карпарацыяй Sun для патрэб праграмистаў. У яго склад уваходзиць кампилятар (javac), стандартны набор бібліятэк платформы, выканаўчае асяроддзе Java (JRE), а таксама дакументацыю, прыклады і больш за дваццаць утылітаў, такіх як загрузнік праграм, адладчык, прагляднік аплетаў і інш. Усе сучасныя интэграваныя асяроддзі распрацоўкі выкарыстоўваюць JDK дзеля сваёй працы, таму патрабуюць каб JDK быў перадусталёваны, або пастаўляюцца разам з ім

Большая частка кода JDK выйшла 8 мая 2007 года пад адкрытым лицэнзийным пагадненнем GNU

Гісторыя версій[правіць | правіць зыходнік]

Гэта, натуральна, не поўны спіс тэхналогій, якія былі дадзены ў кожнай з версій Java

JDK 1.0
23 студзеня 1996 года
Першая версія Java, стабільная версія 1.0.2 атрымала назву Java 1

JDK 1.1
19 лютага 1997 года
Перагледжана мадэль апрацоўкі падзей у AWT. Дадана магчымасць стварэння ўключаных класаў. Рэалізованы тэхналогіі JDBC i RMI (падключэнне да баз дадзеных і выдалены выклік метадаў адпаведна)

J2SE 1.2
8 снежня 1998 года
Пачынаючы з гэтай версіі, Java выходзіць пакетамі J2SE, J2EE, J2ME, дзе "2" сімвалізуе другое пакаленне платформы
Выкарыстоўванне strictfp-класаў і метадаў дазволіла зрабіць рэзультаты аперацый з плаваючай коскай незалежнымі ад абранага працэсара. У JVM убудованы кампілятар часу выканання. Дададзены бібліятэкі для працы са стандартнымі калекцыямі дадзеных. Грунтоўна перагледжаны клас Thread (метады suspend(), stop() і resume(), да прыкладу, з тых пор лічацца састарэлымі)

J2SE 1.3
8 мая 2000 года
З гэтага часу выкарыстоўваецца віртуальная машына HotSpot, якая кампілюе толькі кавалкі коду, якія будуць выкарыстоўвацца часцей за іншыя (Hot Spot - гарачыя месцы, у перакладзе)

J2SE 1.4
6 лютага 2002 года
Новая канцэпцыя ланцуговых выключэнняў дазволіла захоўваць сістэмную інфармацыю часу ўзнікнення выключнай сітуацыі падчас перадачы выключэння па іерархіі вызываў. Даданы сінтаксічны аналізатар XML і падтрымка IPv6

J2SE 5
30 верасня 2004 года
Даданы пераличэнні, цыкл for у стыле foreach, пераменныя зменнай колькасці. Рэалізавана аўтаабгортка скалярных тыпаў дадзеных, і ўведзены родавыя функцыі і класы

Java SE 6
11 снежня 2006 года
Асноўныя намаганні накіраваны на павелічэнне хуткадзейнасці праз змены ў рэалізацыі каранёвых бібліятэк, кампілятара і зборшчыка смецця

Java SE 7
28 ліпеня 2011 года
Падтрымка дынамічных моў вядзецца праз так званую шматмоўную віртуальную машыну ("машына Да Винчы" ад Sun). Даданы такія сінтаксічныя паляпшэнні як аўтавызначэнне тыпа пры стварэнні аб'ектаў родавых класаў, кіраванне рэсурсамі ў try-блоках і выкарстоўванне радковых тыпаў у switch-блоках

Выданне Java SE 8 анансавана на сакавік 2014 года

Выкарыстанне[правіць | правіць зыходнік]

Выкарыстанне на персанальных камп'ютарах[правіць | правіць зыходнік]

Паводле Sun, JRE выкарыстоўваецца зараз болей як на 700 міліёнах персанальных кампьютараў. Найбольшую папулярнасць набылі такія праграмныя прадукты абапіраючыяся на Java як інтэграваныя асроддзі праграмавання NetBeans і Eclipse, файлаабменныя праграмы LimeWire, Vuze. MATLAB і прыкладанне для сумеснай працы Lotus Notes таксама выкарыстоўваюць Java

Microsoft не пастаўляе JRE у камплекце з Windows з таго часу як кампанія Sun падала на Microsoft судовыя пазовы. Судовыя пазовы былі звязаны з тым, што Microsoft дадавала ў сваё асяроддзе выканання Java класы, якія працавалі выключна на Windows. Асяроддзе выканання Java пастаўляецца з Mac OS X (пазначаецца як састарэлае пачынаючы з версіі 10.6.3 сакавіка 2010 года, таму можа быць не ўключана ў будучыя версіі), шмат якія дыстрыбьюты Linux уключаюць у сабе вольныя рэалізацыі Java: GNU classpath, IcedTea

Мабільныя прылады[правіць | правіць зыходнік]

Платформа Java ME набыла вялікую папулярнасць у галіне выкарыстання на мабільных прыладах, дзе яна паспешна канкуруе з Symbian, BREW і .NET Compact Framework

Шырокая разнастайнасць вытворцаў мабільных тэлефонаў прыввяла да патрэбы распрацоўкі адзіных стандартаў, гэтым стандартам у 2000 годзе стал MIDP — профіль мабильнай прылады з інфармацыйнымі функцыямі. Стандарт, распрацованы ў межах Java Community Process, вызначаў паняцце "мідлет" - кампактнае прыкладанне на мове Java

MIDP1 вызначаў прыладу з невяліким дысплеем, без доступа да аўдыё і абмежаваннем на памеры праграмы ў 32 kB. MIDP2 ужо дазваляў выкаыстоўваць аўдыё і павялічыў максімальны памер прыкладання да 64kB. Некаторыя вытворцы, дзякуючы пашыраным магчымасцям сваіх мабільных прылад паслабляюць гэтыя абмежаванні, напрыклад, каб дазволіць запуск мідлетаў большых памераў

Аперацыйная сістэма Android выкарыстоўвае толькі мову праграмавання Java, бібліятэкі і віртуальная машына для падтрымкі мовы асабістыя і не маюць непасрэднага дачынення да платформы Java

Карпарацыйнае і сэрвернае выкарыстанне[правіць | правіць зыходнік]

Java стала асновай IT-распрацоўкі ў галіне карпарацыйнага выкарыстання, гэта было дасягнута дзвюмя шляхамі

  1. Магчымасцць Java паспяхова парцаваць на вэб-серверах дазволіла ёй стаць вядучай платформай для сувязі інтэрнэта з інфармацыйнамі сістэмамі прадпрыемстваў. Выкарыстоўваючы тэхналогіі Java, камерцыйныя арганізацыі змаглі перанесці частку сваіх паслуг у доступ праз інтэрнэт (банкавыя паслугі ў сістэме рэальнага часу, заказ білетаў праз інтэрнэт)
  2. Java стала стандартам у распрацоўцы праграмнага забяспечання, якое выкарыстоўваецца вялікімі прадпрыемствамі. Да гэтай катэгорыі адносяцца вэб-сервера, сервера праграмных прыкладанняў, базы дадзеных, сістэмы кіравання бізнес-працэсамі і сістэмы кіравання зместам вэб-бачыны

Крытыка[правіць | правіць зыходнік]

Generic-класы[правіць | правіць зыходнік]

Generic або родавыя класы і функцыі былі ўведзены ў мову Java ў версіі J2SE 5.0, але гэта было дадаткам да мовы праграмавання, у той час як у платформе не было зроблена змяненняў для падтрымкі дадзенай магчымасці. Кампанія Sun абгрунтавала гэта тым, што так будзе дасягнута зваротная сумяшчальнасць з бібліятэкамі і праграмнымі прадуктамі напісанымі раней[15]. Але такой падыход запатрабаваў ад распрацоўшчыкаў выкарыстаць метад, пры якім інфармацыя аб тыпе аб'екта родавага класа губляецца пад час выканання, застаўляючы толькі інфармацыю аб інтэрфейсе[16][17]. Гэта не дазваляе джва-распрацоўшчыкам выкарыстоўваць зручныя падыходы даступныя на платформах-канкурэнтах. Напрыклад, аперацыі ніжэй немагчымы ў мове праграмавання Java:

public class MyClass<E> {
    public static void myMethod(Object item) {
        if (item instanceof E) {  //Памылка на этапе кампіляцыі
         ...
        }
        E item2 = new E();   //Памылка на этапе кампіляцыі
        E[] iArray = new E[10]; //Памылка на этапе кампіляцыі
    }
}

Хуткадзейнасць[правіць | правіць зыходнік]

На пачатку свайго існавання Java сутыкалася з небезгрунтоўнай крытыкай хуткадзейнасці праграм напісаных на ёй: яна не ішла не ў якія параўнанні з вынікамі для кампілюемых моў праграмавання. Вялікім крокам у выпраўленні такога становішча быў пераход да выкарыстання віртуальнай машыны Java HotSpot[18], які адбыўся ў версіі 1.3 (2000 год). На 2011 год Java паказвае лепшыя рэзультатаў вытворчасці ў сваім класе, платформ з кампіляцыяй пад час выканання, у разы выйграе ў інтэрпрытуемых моў праграмавання і скарачае адставанне ад моў C\C++ [19]

JIT-кампіляцыя, якая з'явілася ў версіі 1.1 дазваляе кампіляваць байт-код пад час выканання і такім чынам у разы павысіць хуткадзейнасць,але гэта ў сваю чаргу вядзе да вялікіх часовых затрат падчас загрузкі праграмы. Натуральна, што быў абраны падыход пры якім кампілююцца толькі найбольш ужываныя часткі кода, і пасля паўзы пры запуску вытворчасць Java-праграмы становіцца параўнальнай з машынным кодам

Бяспека[правіць | правіць зыходнік]

Даследаванні праведзеныя кампаніяй Microsoft у 2010 годзе паказалі, што Java стала прычынай большасці атак на такой шырокавыкарыстоўвемы праграмны прадукт як Adobe Reader[20]. Атакі правродзіліся з выкарыстаннем шырокавядомых дзір у бяспецы Java-машыны, і яны былі б немагчычы пры ўсталяваных абнаўленнях, але Java усталяванана такім мностве машын, што вялікая колькасць карыстальнікаў проста не ведае, што абнаўленні патрэбны або не ведае, як іх праводзіць. З іншага боку, карпаратыўныя карыстальнікі свядома адцягваюць момант абнаўлення свайго праграмнага забяспечання.

Зноскі

  1. Jawk source forge project
  2. see for example AMPC project
  3. ABCL project
  4. [1]
  5. myForth project
  6. JavaLogo project
  7. XLogo project
  8. Kahlua project
  9. Luaj
  10. Jill
  11. OCaml-Java project
  12. IBM WebSphere sMash PHP project
  13. Caucho Quercus project
  14. JTcl
  15. Type Erasure.
  16. Generics in Java. Object Computing, Inc.. Праверана 9 снежня 2006.
  17. What's Wrong With Java: Type Erasure (2006-12-06). Праверана 9 снежня 2006.
  18. Кампанія Sun аб Java HotSpot. shootout.alioth.debian.org. Праверана 25 студзеня 2012.
  19. Computer Language Benchmarks Game. shootout.alioth.debian.org. Праверана 2 June 20111.
  20. Researchers Highlight Recent Uptick in Java Security Exploits. Праверана 17 лютага 2012.