Ջավա (ծրագրավորման լեզու)

Վիքիպեդիայից՝ ազատ հանրագիտարանից
Nuvola single chevron right.svg Անվան այլ գործածումների համար տես՝ Ջավա (այլ կիրառումներ)
Java
Java logo.png

Սեմանտիկա

օբյեկտա-կողմնորոշված,ստրուկտուրային,իմպերատիվ

Կատարման ձև

կոմպիլացվում է բայթ կոդ

Առաջացել է

1995

Հեղինակ(ներ)

Ջեյմս Գոսլինգ և Sun Microsystems

Տիպիզացիա

ստատիկ

Հիմնական իրականացումները

OpenJDK, HotSpot և այլն․․․

Ներշնչվել է

Ada 83,C++, C#,Delphi Object Pascal,Eiffel, Generic Java, Mesa,Modula-3, UCSD Pascal, Smalltalk

Ներշնչել է

Ada 2005, BeanShell, C#, Clojure, D, ECMAScript, Groovy, J#, JavaScript, PHP, Python, Scala

Java-ն պլատֆորմից անկախ ծրագրավորման լեզու է։ Այն ծրագրավորվել է C++-ի միջոցով։ Java-ի սինտաքսիսը շատ հեռու չի C++-ի սինտաքսից։ Ի տարբերություն C++-ի Java-ն ունի ինտեգրված լայն կլասսների գրադարան (օրինակ բազմապրոցեսային, համացանց, ֆայլային և այլն), որոնք ի շնորհիվ պլատֆորմային անկախության աշխատում են տարատեսակ օպերացիոն համակարգերում։ Որպեսզի Java լեզվով ստեղծված ծրագիրը կարողանա աշխատել ձեր համակարգչում կամ շարժական էլեկտրոնային սարքում, դուք պետք է ունենաք համապատասխան միջավայր՝ JRE (Java Runtime Environment)։

Պատմությունը[խմբագրել]

Ծրագրավորման մեջ C++ ծրագրավորման լեզվի հեղափոխությունից հետո քչերն էին սպասում ավելի բեկումնային հեղափոխության, որը կատարեց Java-ն։ Կանխատեսելով շարժական էլեկտրոնային սարքերի լայն տարածումը, Sun-ը 1991–ին հիմնեց այդ ուղղությամբ զբաղվող ներքին կորպորատիվ հետազոտական նախագիծ, որը ստացավ Green անվանումը։ Նախագծի արդյունքում ստեղծվեց C/C++ վրա հիմնված ծրագրավորման լեզու, որին նրա ստեղծող Ջեյմս Գոսլինգը անվանեց Oak (կաղնի) ի պատիվ այն կաղնու, որը երևում էր նրա աշխատասենյակից։ Հետագայում հայտնաբերվեց, որ արդեն գոյություն ունի ծրագրավորման լեզու Oak անունով և Sun-ը նրան տվեց նոր անուն Java, որով էլ այն հետագայում ներկայացվեց հասարակությանը։ Sun-ի սպասված շարժական էլեկտրոնային սարքերի արագ առաջընթացը չէր ստացվում և նրա հրապարակումը ուշանում էր։ ՄիաԺամանակ համացանցը սկսել էր մեծ զարգացում ապրել և 1993 թվականին Sun-ի աշխատակիցները սկսեցին Java-ն համալրել համացանցում դինամիկ էջեր ստեղծելու ունակություններով։ Sun-ը Java-ի մասին առաջին անգամ հայտարարեց 1995 թվականին։ Այսօր Java-ն օգտագործվում է դինամիկ պարունակությամբ վեբ էջեր, բազմատեսակ սպառողական ծրագրեր ստեղծելու, շարժական բազմապիսի էլեկտրոնային սարքերը ծրագրերով ապահովելու համար։

Տեխնիկական նկարագրություն[խմբագրել]

Java վիրտուալ մեքենայի աշխատանքի սկզբունքը

Java-ի տեղափոխելությունը պայմանավորված է նրանով, որ կոմպիլացվելուց հետո կոդն անմիջապես չի դառնում միջավայրին համապատասխան մեքենայական կոդ, այլ վերածվում է միջանկյալ կոդի, որը կոչվում է Java բայթկոդ։ Վերջինս աշխատեցվում է Java վիրտուալ մեքենայի կողմից, որն արդեն հատուկ է տվյալ միջավայրին։ Սովորաբար բոլոր օգտագործողների սարքերում էլ տեղադրված է Java Runtime Environment-ը (JRE), որն էլ ապահովում է Java վիրտուալ մեքենայի առկայությունը։ Վերջինիս աշխատանքը ներկայացված է նկարում։ Ինչպես երևում է նկարից՝ Java վիրտուալ մեքենան նախատեսված է ոչ միայն Java-ի, այլ նաև այլ ծրագրավորման լեզուների համար (նկարում ներկայացված է Python-ը)։ Սովորաբար Java-ով գրված ծրագրերը C++-ով գրվածների հեմեմատ ունեն ավելի դանդաղ աշխատելու և շատ հիշողություն օգտագործելու համբավ։ Բայց Java-ի Just-in-time (JIT) կոմպիլացայի ներդրումից հետո ծրագրերի արագագործությունը զգալիորեն մեծացել է։ JIT-ի դերը կայանում է նրանում, որ այն դինամիկ ձևով Java բայթկոդը թարգմանում է մեքենայական կոդի, որն էլ միանգամից կատարվում է։

Java-ն օգտագործում է աղբահավաք՝ (անգլ.՝ Garbage collector - GC) հիշողության ավտոմատ կազմակերպման համար։ Երբ ծրագրի աշխատանքի ժամանակ որևէ օբյեկտ չի օգտագործվում, այսինքն չկա նրա վրա ցուցող որևէ հղում, ապա աղբահավաքը ջնջում է այն հիշողությունից։ Չնայած այս ավտոմատացված կազմակերպմանը՝ հիշողության արտահոսքի (անգլ.՝ Memory leak) վտանգը դեռ մնում է։ Օրինակ հիշողության արտահոսք կարող է լինել, եթե ոչ պետքական օբյեկտի վրա ցուցող հղում (անգլ.՝ Refernce) մնա։ Ի տարբերություն C++-ի Java-ն հնարավորություն չի տալիս ցուցիչների (անգլ.՝ Pointer) հետ աշխատելու, ձեռքով հիշողությունն ազատելու, խելացի ցուցիչներ (անգլ.՝ Smart pointer) օգտագործելու և այլն։ Աղբահավաքը կարող է աշխատել ցանկացած պահի, իդեալական դեպքում այն աշխատում է համեմատաբար պարապուրդի մեջ եղած ժամանակ։ Երաշխավորված է, որ այն կաշխատի, երբ բավարար հիշողություն չլինի նոր օբյեկտ ստեղծելիս։ Ինչ վերաբերում է պրիմիտիվ տիպերն (int, double, boolean, char…), ապա Java-ում դրանք օբյեկտներ չեն և դրանք չեն ստեղծվում դինամիկ հիշողությունում, այլ ստեղծվում են ստեկում (անգլ.՝ Stack) և դրանց համար աղբահավաք չի աշխատում։

Արտաքին հղումներ[խմբագրել]