Comparison of Java and C++
જાવા અને સી + + એ બે અગ્રણી ઓબ્જેક્ટ-ઓરિએન્ટેડ પ્રોગ્રામિંગ ભાષાઓ છે. ઘણી ભાષાની લોકપ્રિયતા મેટ્રિક્સ દ્વારા, બંને ભાષાઓએ 21મી સદીના મોટાભાગના સમય માટે ઓબ્જેક્ટ-ઓરિએન્ટેડ અને ઉચ્ચ-પ્રદર્શન સોફ્ટવેર વિકાસમાં પ્રભુત્વ જમાવ્યું છે, અને ઘણીવાર સીધી સરખામણી અને વિરોધાભાસ થાય છે. જાવાનું વાક્યરચના સી/સી + + પર આધારિત હતું. ડિઝાઇનના ઉદ્દેશો પ્રોગ્રામિંગ ભાષાઓ C + + અને જાવા વચ્ચેના તફાવતોને તેમના વારસામાં શોધી શકાય છે, કારણ કે તેમની પાસે વિવિધ ડિઝાઇન લક્ષ્યાંકો છે. સી + + ની રચના પ્રણાલીઓ અને કાર્યક્રમો માટે કરવામાં આવી હતી (એટલે કે. ઇન્ફ્રાસ્ટ્રક્ચર પ્રોગ્રામિંગ), પ્રક્રિયાગત પ્રોગ્રામિંગ લેંગ્વેજ સીનું વિસ્તરણ, જે કાર્યક્ષમ અમલ માટે ડિઝાઇન કરવામાં આવી હતી. સી માટે, સી + + એ ઓબ્જેક્ટ-ઓરિએન્ટેડ પ્રોગ્રામિંગ, એક્સેપ્શન હેન્ડલિંગ, લાઇફટાઇમ-બેઝ્ડ રિસોર્સ મેનેજમેન્ટ (આરએઆઈઆઈ), જેનેરિક પ્રોગ્રામિંગ, ટેમ્પલેટ મેટાપ્રોગ્રામિંગ અને સી + + સ્ટાન્ડર્ડ લાઇબ્રેરી માટે સપોર્ટ ઉમેર્યો છે જેમાં જેનેરિક કન્ટેનર અને અલ્ગોરિધમ્સ (સ્ટાન્ડર્ડ ટેમ્પલેટ લાઇબ્રેરી અથવા એસટીએલ) અને અન્ય ઘણી સામાન્ય હેતુ સુવિધાઓ શામેલ છે. જાવા એક સામાન્ય હેતુ, સહવર્તી, વર્ગ-આધારિત, ઓબ્જેક્ટ-ઓરિએન્ટેડ પ્રોગ્રામિંગ લેંગ્વેજ છે જે અમલીકરણની નિર્ભરતાને ઘટાડવા માટે રચાયેલ છે. તે સુરક્ષિત અને અત્યંત પોર્ટેબલ બનવા માટે જાવા વર્ચ્યુઅલ મશીન પર આધાર રાખે છે. તે અંતર્ગત પ્લેટફોર્મનું અમૂર્ત પ્રદાન કરવા માટે રચાયેલ એક વ્યાપક પુસ્તકાલય સાથે જોડાયેલું છે. જાવા એ સ્થિર રીતે ટાઇપ કરેલી ઓબ્જેક્ટ-ઓરિએન્ટેડ ભાષા છે જે સી + + જેવી (પરંતુ તેની સાથે અસંગત) વાક્યરચનાનો ઉપયોગ કરે છે. તેમાં જાવાડોક નામની દસ્તાવેજીકરણ પ્રણાલીનો સમાવેશ થાય છે. સી + + અને જાવાના વિકાસમાં જુદા જુદા લક્ષ્યાંકો ભાષાઓ વચ્ચે જુદા જુદા સિદ્ધાંતો અને ડિઝાઇન વિનિમયમાં પરિણમ્યા. તફાવતો નીચે મુજબ છેઃ ભાષાની વિશેષતાઓ વાક્યરચના જાવા વાક્યરચના સંદર્ભ-મુક્ત વ્યાકરણ ધરાવે છે જેને સરળ LALR પદચ્છેદન દ્વારા પદચ્છેદન કરી શકાય છે. C + + નું પાર્સિંગ વધુ જટિલ છે. ઉદાહરણ તરીકે, ફૂ <1> (3); એ સરખામણીઓનો ક્રમ છે જો ફૂ ચલ છે, પરંતુ જો ફૂ એ વર્ગ નમૂનાનું નામ હોય તો ઑબ્જેક્ટ બનાવે છે. સી + + નેમસ્પેસ-સ્તર સ્થિરાંકો, ચલ અને કાર્યોને મંજૂરી આપે છે. જાવામાં, આવી સંસ્થાઓ અમુક આપેલ પ્રકારની હોવી જોઈએ, અને તેથી તેને પ્રકારની વ્યાખ્યામાં વ્યાખ્યાયિત કરવી આવશ્યક છે, ક્યાં તો વર્ગ અથવા ઇન્ટરફેસ. C + + માં, પદાર્થો મૂલ્યો છે, જ્યારે જાવામાં તેઓ નથી. સી + + મૂળભૂત રીતે મૂલ્ય શબ્દાર્થનો ઉપયોગ કરે છે, જ્યારે જાવા હંમેશા સંદર્ભ શબ્દાર્થનો ઉપયોગ કરે છે. સી + + માં સંદર્ભ શબ્દાર્થની પસંદગી કરવા માટે, નિર્દેશક અથવા સંદર્ભનો ઉપયોગ કરી શકાય છે. C + + માં, ક્લાયન્ટ કોડને તેમાં ફેરફાર કરતા અટકાવવા માટે પોઇન્ટર અથવા કોન્સ્ટ ઓબ્જેક્ટનો સંદર્ભ જાહેર કરવો શક્ય છે. કાર્યો અને પદ્ધતિઓ એ પણ ખાતરી આપી શકે છે કે તેઓ "કોન્સ્ટ" મુખ્ય શબ્દનો ઉપયોગ કરીને નિર્દેશક દ્વારા નિર્દેશિત ઑબ્જેક્ટમાં ફેરફાર કરશે નહીં. આ સ્થિરતાને લાગુ કરે છે. જાવામાં, અંતિમ મુખ્ય શબ્દ સી + + માં કોન્સ્ટ મુખ્ય શબ્દ જેવો જ છે, પરંતુ તેનો ઉપયોગ વધુ મર્યાદિત છે. મોટા ભાગના ભાગ માટે, કોન્સ્ટ-કરેક્ટેનસને ક્લાસ ઇન્ટરફેસના શબ્દાર્થ પર આધાર રાખવો આવશ્યક છે, એટલે કે, તે મજબૂત રીતે લાગુ કરવામાં આવતું નથી, સિવાય કે જાહેર ડેટા સભ્યો કે જેને અંતિમ લેબલ આપવામાં આવે છે. સી + + ગોટો સ્ટેટમેન્ટને સપોર્ટ કરે છે, જે સ્પાઘેટ્ટી કોડ પ્રોગ્રામિંગ તરફ દોરી શકે છે. ગોટો સ્ટેટમેન્ટના અપવાદ સાથે (જે વાસ્તવિક કોડમાં ખૂબ જ ભાગ્યે જ જોવા મળે છે અને અત્યંત નિરુત્સાહિત થાય છે), જાવા અને સી + + બંને મૂળભૂત રીતે સમાન નિયંત્રણ પ્રવાહ માળખાં ધરાવે છે, જે માળખાગત નિયંત્રણ પ્રવાહને લાગુ કરવા માટે રચાયેલ છે, અને કેટલાક ગોટો જેવા કાર્યો પ્રદાન કરવા માટે વિરામ અને ચાલુ નિવેદનો પર આધાર રાખે છે. કેટલાક ટિપ્પણીકારો નિર્દેશ કરે છે કે આ લેબલ થયેલ પ્રવાહ નિયંત્રણ નિવેદનો સંરચિત પ્રોગ્રામિંગના સિંગલ પોઇન્ટ-ઓફ-એક્ઝિટ પ્રોપર્ટીને તોડે છે. સી + + નિમ્ન-સ્તરની સુવિધાઓ પ્રદાન કરે છે જેનો જાવામાં મોટે ભાગે અભાવ હોય છે (એક નોંધપાત્ર અપવાદ ડાયરેક્ટ મેમરી એક્સેસ અને મેનીપ્યુલેશન માટે sun.misc.Unsafe API છે). સી + + માં, પોઇન્ટરનો ઉપયોગ ચોક્કસ મેમરી સ્થાનોને હેરફેર કરવા માટે થઈ શકે છે, જે નિમ્ન-સ્તરના ઓપરેટિંગ સિસ્ટમ ઘટકો લખવા માટે જરૂરી કાર્ય છે. તેવી જ રીતે, ઘણા C + + કમ્પાઇલર્સ ઇનલાઇન એસેમ્બલરને સપોર્ટ કરે છે. એસેમ્બલી લેંગ્વેજ કોડને સી પ્રોગ્રામમાં આયાત કરી શકાય છે અને તેનાથી ઊલટું. આ સી ભાષાને વધુ ઝડપી બનાવે છે. જાવામાં, આવા કોડ બાહ્ય પુસ્તકાલયોમાં હોવા જોઈએ, અને દરેક કોલ માટે નોંધપાત્ર ઓવરહેડ સાથે, ફક્ત જાવા નેટિવ ઇન્ટરફેસ દ્વારા જ ઍક્સેસ કરી શકાય છે. સિમેન્ટિક્સ C + + ફંક્શન/પદ્ધતિની દલીલો માટે મૂળભૂત મૂલ્યોને મંજૂરી આપે છે. જાવા નથી. જો કે, પદ્ધતિ ઓવરલોડિંગનો ઉપયોગ જાવામાં સમાન પરિણામો મેળવવા માટે થઈ શકે છે પરંતુ બિનજરૂરી સ્ટબ કોડ પેદા કરી શકાય છે. C + + માટે સંકલન કરવા માટે જરૂરી ન્યૂનતમ કોડ એક કાર્ય છે, જાવા માટે એક વર્ગ છે. સી + + મૂળ પ્રકારો (કેટલાક સંકુચિત રૂપાંતરણો સહિત) વચ્ચે ગર્ભિત રૂપાંતરણોની શ્રેણીને મંજૂરી આપે છે, અને વપરાશકર્તા-નિર્ધારિત પ્રકારોને સંડોવતા ગર્ભિત રૂપાંતરણોને વ્યાખ્યાયિત કરવાની પણ મંજૂરી આપે છે. જાવામાં, માત્ર મૂળ પ્રકારો વચ્ચેના વિસ્તૃત રૂપાંતરણો ગર્ભિત છે; અન્ય રૂપાંતરણો માટે સ્પષ્ટ કાસ્ટ વાક્યરચનાની જરૂર પડે છે. આનું પરિણામ એ છે કે જાવા અને સી + + માં લૂપ શરતો (જો, જ્યારે અને બહાર નીકળવાની સ્થિતિ માટે) બંને બુલિયન અભિવ્યક્તિની અપેક્ષા રાખે છે, તેમ છતાં કોડ જેમ કે જો (એ = 5) જાવામાં સંકલન ભૂલનું કારણ બનશે કારણ કે ત્યાં કોઈ ગર્ભિત સંકુચિત રૂપાંતર નથી ઇન્ટથી બુલિયનમાં, પરંતુ સી + + માં સંકલન કરશે. જો કોડ ટાઇપો હોય અને જો (a = = 5) નો ઈરાદો હોય તો આ સરળ છે. જો કે, વર્તમાન C + + કમ્પાઇલર્સ સામાન્ય રીતે ચેતવણી પેદા કરે છે જ્યારે આવી સોંપણી શરતી અભિવ્યક્તિમાં કરવામાં આવે છે. તેવી જ રીતે, એકલ તુલનાત્મક નિવેદનો, દા. ત. a = = 5;, આડઅસર વિના સામાન્ય રીતે ચેતવણી તરફ દોરી જાય છે. વિધેયોમાં પરિમાણો પસાર કરવા માટે, C + + પાસ-બાય-રેફરન્સ અને પાસ-બાય-વેલ્યુ બંનેને સપોર્ટ કરે છે. જાવામાં, આદિમ પરિમાણો હંમેશા મૂલ્ય દ્વારા પસાર થાય છે. વર્ગ પ્રકારો, ઈન્ટરફેસ પ્રકારો અને એરે પ્રકારોને સામૂહિક રીતે જાવામાં સંદર્ભ પ્રકારો કહેવામાં આવે છે અને તે હંમેશા મૂલ્ય દ્વારા પસાર થાય છે. જાવા બિલ્ટ-ઇન પ્રકારો ભાષા સ્પષ્ટીકરણ દ્વારા વ્યાખ્યાયિત ચોક્કસ કદ અને શ્રેણીના હોય છે. સી + + માં, બિલ્ટ-ઇન પ્રકારો માટે મૂલ્યોની ન્યૂનતમ શ્રેણી વ્યાખ્યાયિત કરવામાં આવે છે, પરંતુ ચોક્કસ રજૂઆત (બિટ્સની સંખ્યા) આપેલ પ્લેટફોર્મ પર ગમે તે મૂળ પ્રકારોને પસંદ કરવામાં આવે તે રીતે મેપ કરી શકાય છે. દાખલા તરીકે, જાવા અક્ષરો 16-બીટ યુનિકોડ અક્ષરો છે, અને શબ્દમાળાઓ આવા અક્ષરોના ક્રમથી બનેલી હોય છે. સી + + સાંકડા અને પહોળા બંને અક્ષરો આપે છે, પરંતુ દરેકનું વાસ્તવિક કદ પ્લેટફોર્મ આધારિત છે, જેમ કે અક્ષર સમૂહ વપરાય છે. દોરીઓ કોઈપણ પ્રકારમાંથી બનાવી શકાય છે. આ એ પણ સૂચવે છે કે સી + + કમ્પાઇલર્સ આપમેળે લક્ષ્ય પ્લેટફોર્મ માટે સૌથી કાર્યક્ષમ રજૂઆત પસંદ કરી શકે છે (એટલે કે, 64-બીટ પ્લેટફોર્મ માટે 64-બીટ પૂર્ણાંકો), જ્યારે રજૂઆત જાવામાં નિશ્ચિત છે, એટલે કે મૂલ્યો ક્યાં તો સંગ્રહિત કરી શકાય છે ઓછા-કાર્યક્ષમ કદમાં, અથવા બાકીના બિટ્સને પેડ કરવા જોઈએ અને ઘટાડેલી-પહોળાઈ વર્તણૂકનું અનુકરણ કરવા માટે કોડ ઉમેરવો જોઈએ. સી + + માં ફ્લોટિંગ પોઇન્ટ મૂલ્યો અને કામગીરીનું ગોળાકાર અને ચોકસાઇ અમલીકરણ-નિર્ધારિત છે (જોકે માત્ર ખૂબ જ વિચિત્ર અથવા જૂના પ્લેટફોર્મ આઇ. ઇ. ઇ. ઇ. 754 ધોરણથી અલગ પડે છે). જાવા વૈકલ્પિક કડક ફ્લોટિંગ-પોઇન્ટ મોડેલ (સ્ટ્રિક્ટએફપી) પ્રદાન કરે છે જે પ્લેટફોર્મ પર વધુ સુસંગત પરિણામોની બાંયધરી આપે છે, જોકે સંભવતઃ ધીમી રન-ટાઇમ કામગીરીની કિંમત પર. જો કે, જાવા IEEE 754 ધોરણનું કડક પાલન કરતું નથી. મોટાભાગના C + + કમ્પાઇલર્સ, મૂળભૂત રીતે, IEEE 754 (સામાન્ય રીતે કડક ગોળાકાર નિયમોને બાદ કરતાં અને NaN પરિણામો પર અપવાદો ઉભા કરે છે) નું આંશિક રીતે પાલન કરશે, પરંતુ કેટલાક ઓપ્ટિમાઇઝિંગ માટે પરવાનગી આપવા માટે વિવિધ કડકતાના પાલન વિકલ્પો પ્રદાન કરે છે. જો આપણે તે વિકલ્પોને ઓછામાં ઓછા સુસંગતથી સૌથી વધુ સુસંગત તરીકે ઝડપી, સુસંગત (જાવાનું સ્ટ્રિક્ટએફપી), નજીક-આઇ. ઇ. ઇ. ઇ. અને કડક-આઇ. ઇ. ઇ. ઇ. તરીકે લેબલ કરીએ, તો આપણે કહી શકીએ કે મોટાભાગના સી + + અમલીકરણ ઝડપી અથવા કડક-આઇ. ઇ. ઇ. ઇ. પર સ્વિચ કરવાના વિકલ્પો સાથે, નજીકના-આઇ. ઇ. ઇ. ઇ. માટે મૂળભૂત છે, જ્યારે જાવા સુસંગત પર સ્વિચ કરવાના વિકલ્પ સાથે ઝડપી કરવા માટે મૂળભૂત છે. સી + + માં, પોઇન્ટરને સીધા મેમરી એડ્રેસ મૂલ્યો તરીકે હેરફેર કરી શકાય છે. જાવા સંદર્ભો પદાર્થોના નિર્દેશક છે. જાવા સંદર્ભો મેમરી સરનામાંની સીધી પહોંચને મંજૂરી આપતા નથી અથવા પોઇન્ટર અંકગણિત સાથે મેમરી સરનામાંઓને હેરફેર કરવાની મંજૂરી આપતા નથી. સી + + માં કોઈ પણ પોઇન્ટર માટે પોઇન્ટર, ઇન્ટ અને ડબલ્સ માટે પોઇન્ટર અને મનસ્વી મેમરી સ્થાનો માટે પોઇન્ટર બનાવી શકે છે. જાવા સંદર્ભો ફક્ત ઓબ્જેક્ટ્સને જ ઍક્સેસ કરે છે, ક્યારેય પ્રિમિટિવ્સ, અન્ય સંદર્ભો અથવા મનસ્વી મેમરી સ્થાનો નહીં. જાવામાં, મેમરીને sun.misc.Unsafe API નો ઉપયોગ કરીને મનસ્વી મૂલ્યો દ્વારા વાંચી અને લખી શકાય છે, જો કે તે અપ્રચલિત છે અને ભલામણ કરાયેલ નથી. સી + + માં, પોઇન્ટર કાર્યો અથવા સભ્ય કાર્યો (ફંક્શન પોઇન્ટર) તરફ નિર્દેશ કરી શકે છે. જાવામાં સમકક્ષ પદ્ધતિ ઓબ્જેક્ટ અથવા ઇન્ટરફેસ સંદર્ભોનો ઉપયોગ કરે છે. સ્ટૅક-એલોકેટેડ ઓબ્જેક્ટ્સ દ્વારા, સી + + સ્કોપ્ડ રિસોર્સ મેનેજમેન્ટને સપોર્ટ કરે છે, જે એક એવી તકનીક છે જેનો ઉપયોગ આપમેળે મેમરી અને અન્ય સિસ્ટમ સંસાધનોનું સંચાલન કરવા માટે થાય છે જે નિર્ધારિત ઓબ્જેક્ટ વિનાશને સપોર્ટ કરે છે. જ્યારે સી + + માં અવકાશ સંસાધન વ્યવસ્થાપનની બાંયધરી આપી શકાતી નથી (યોગ્ય વિનાશક વસ્તુઓ પણ નવા અને બાકી રહેલા અનડિલીટેડનો ઉપયોગ કરીને ફાળવી શકાય છે) તે સંસાધન વ્યવસ્થાપનનું અસરકારક માધ્યમ પ્રદાન કરે છે. વહેંચાયેલ સંસાધનોને શેર્ડ _ પીટીઆરનો ઉપયોગ કરીને સંચાલિત કરી શકાય છે, સાથે સાથે ચક્રીય સંદર્ભોને તોડવા માટે વીક _ પીટીઆરનો ઉપયોગ કરી શકાય છે. જાવા કચરો સંગ્રહનો ઉપયોગ કરીને સ્વચાલિત મેમરી વ્યવસ્થાપનને ટેકો આપે છે જે ચક્રીય સંદર્ભોની હાજરીમાં પણ પહોંચી ન શકાય તેવી વસ્તુઓને મુક્ત કરી શકે છે, પરંતુ અન્ય સિસ્ટમ સંસાધનો (ફાઇલો, પ્રવાહો, બારીઓ, સંચાર બંદરો, થ્રેડો, વગેરે) સ્પષ્ટપણે બહાર પાડવું આવશ્યક છે કારણ કે છેલ્લા ઓબ્જેક્ટ સંદર્ભને ત્યજી દેવાયા પછી તરત જ કચરો સંગ્રહ થવાની બાંયધરી નથી. સી + + વપરાશકર્તા-નિર્ધારિત ઓપરેટર ઓવરલોડિંગની સુવિધા આપે છે. ઓપરેટર ઓવરલોડિંગ ઓપરેટર (અંકગણિત, સરખામણીઓ, વગેરે) ને ટેકો આપવા માટે વપરાશકર્તા-નિર્ધારિત પ્રકારો માટે પરવાનગી આપે છે. જેમ કે આ ઓપરેટરો માટે વપરાશકર્તા-નિર્ધારિત અમલીકરણ દ્વારા આદિમ પ્રકારો. સામાન્ય રીતે ઓપરેટરોના શબ્દાર્થને જાળવી રાખવાની ભલામણ કરવામાં આવે છે. જાવા ઓપરેટર ઓવરલોડિંગના કોઈ સ્વરૂપને ટેકો આપતું નથી (જોકે તેની લાઇબ્રેરી સ્ટ્રિંગ કોન્કેટેનેશન માટે એડિશન ઓપરેટરનો ઉપયોગ કરે છે). જાવામાં મનસ્વી નવા કોડના પ્રતિબિંબ અને ગતિશીલ લોડિંગ માટે પ્રમાણભૂત એપ્લિકેશન પ્રોગ્રામિંગ ઇન્ટરફેસ (API) સપોર્ટ છે. સી + + દ્વિસંગીઓના સ્થિર અને ગતિશીલ જોડાણને ટેકો આપે છે. જાવામાં જેનરિક છે, જેનો મુખ્ય હેતુ પ્રકાર-સુરક્ષિત કન્ટેનર પ્રદાન કરવાનો છે. સી + + માં સંકલન-સમયના નમૂનાઓ છે, જે સામાન્ય પ્રોગ્રામિંગ અને મેટાપ્રોગ્રામિંગ માટે વધુ વ્યાપક ટેકો પૂરો પાડે છે. જાવામાં એનોટેશન્સ છે, જે વર્ગોમાં મનસ્વી કસ્ટમ મેટાડેટા ઉમેરવાની અને એનોટેશન પ્રોસેસિંગ ટૂલ દ્વારા મેટાપ્રોગ્રામિંગની મંજૂરી આપે છે. જાવા અને સી + + બંને મૂળ પ્રકારો (જેને મૂળભૂત અથવા બિલ્ટ-ઇન પ્રકારો પણ કહેવાય છે) અને વપરાશકર્તા-નિર્ધારિત પ્રકારો (જેને સંયોજન પ્રકારો પણ કહેવાય છે) વચ્ચે તફાવત કરે છે. જાવામાં, મૂળ પ્રકારોમાં માત્ર મૂલ્ય શબ્દાર્થ હોય છે, અને સંયોજન પ્રકારોમાં માત્ર સંદર્ભ શબ્દાર્થ હોય છે. સી + + માં તમામ પ્રકારોમાં મૂલ્ય શબ્દાર્થ હોય છે, પરંતુ કોઈપણ પ્રકાર માટે સંદર્ભ બનાવી શકાય છે, જે સંદર્ભ શબ્દાર્થ દ્વારા પદાર્થને હેરફેર કરવાની મંજૂરી આપશે. સી + + મનસ્વી વર્ગોના બહુવિધ વારસાને ટેકો આપે છે. જાવામાં વર્ગ માત્ર એક જ વર્ગમાંથી મેળવી શકાય છે, પરંતુ વર્ગ બહુવિધ ઇન્ટરફેસોને અમલમાં મૂકી શકે છે (બીજા શબ્દોમાં કહીએ તો, તે પ્રકારોના બહુવિધ વારસાને ટેકો આપે છે, પરંતુ અમલીકરણનો માત્ર એક જ વારસો). જાવા સ્પષ્ટ રીતે ઇન્ટરફેસ અને વર્ગો વચ્ચે તફાવત કરે છે. સી + + માં, બહુવિધ વારસો અને શુદ્ધ વર્ચ્યુઅલ કાર્યો એવા વર્ગોને વ્યાખ્યાયિત કરવાનું શક્ય બનાવે છે જે થોડા નાના તફાવતો સાથે જાવા ઇન્ટરફેસોની જેમ કાર્ય કરે છે. જાવા પાસે મલ્ટી-થ્રેડિંગ માટે ભાષા અને પ્રમાણભૂત લાઇબ્રેરી સપોર્ટ બંને છે. જાવામાં સિંક્રનાઇઝ કરેલ મુખ્ય શબ્દ મલ્ટી-થ્રેડેડ એપ્લિકેશનોને ટેકો આપવા માટે મ્યુટેક્સ તાળાઓ પ્રદાન કરે છે. જાવા વધુ અદ્યતન મલ્ટી-થ્રેડિંગ સિંક્રોનાઇઝિંગ માટે પુસ્તકાલયો પણ પ્રદાન કરે છે. સી + + 11 પાસે સી + + માં મલ્ટી-થ્રેડિંગ માટે વ્યાખ્યાયિત મેમરી મોડેલ છે, અને થ્રેડો બનાવવા માટે અને ઘણા સિંક્રનાઇઝિંગ પ્રિમિટિવ્સ માટે લાઇબ્રેરી સપોર્ટ છે. આ માટે ઘણા તૃતીય-પક્ષ પુસ્તકાલયો પણ છે. સી + + સભ્ય કાર્યોને વર્ચ્યુઅલ કાર્યો તરીકે જાહેર કરી શકાય છે, જેનો અર્થ છે કે કૉલ કરવાની પદ્ધતિ ઑબ્જેક્ટના રન-ટાઇમ પ્રકાર દ્વારા નક્કી કરવામાં આવે છે. ગતિશીલ પ્રેષણ). મૂળભૂત રીતે, સી + + માં પદ્ધતિઓ વર્ચ્યુઅલ નથી (એટલે કે, ઓપ્ટ-ઇન વર્ચ્યુઅલ). જાવામાં, પદ્ધતિઓ મૂળભૂત રીતે વર્ચ્યુઅલ હોય છે, પરંતુ અંતિમ મુખ્ય શબ્દ (એટલે કે, ઓપ્ટ-આઉટ વર્ચ્યુઅલ) નો ઉપયોગ કરીને તેને બિન-વર્ચ્યુઅલ બનાવી શકાય છે. સી + + ગણતરીઓ એ આદિમ પ્રકારો છે અને પૂર્ણાંક પ્રકારોમાં ગર્ભિત રૂપાંતરને ટેકો આપે છે (પરંતુ પૂર્ણાંક પ્રકારોમાંથી નહીં). જાવા ગણનાઓ સાર્વજનિક સ્થિર enum {enumName1, enumName2} હોઈ શકે છે અને વર્ગની જેમ ઉપયોગમાં લેવાય છે. બીજો રસ્તો એ છે કે બીજો વર્ગ બનાવવો જે java.lang.Enum <E>) ને વિસ્તરે છે અને તેથી કન્સ્ટ્રકટરો, ક્ષેત્રો અને પદ્ધતિઓને અન્ય કોઈપણ વર્ગ તરીકે વ્યાખ્યાયિત કરી શકે છે. સી + + 11 મુજબ, સી + + મજબૂત રીતે ટાઇપ કરેલી ગણતરીઓને ટેકો આપે છે જે સંગ્રહ પ્રકારનો વધુ પ્રકાર-સલામતી અને સ્પષ્ટ સ્પષ્ટીકરણ પ્રદાન કરે છે. C + + માં યુનરી ઓપરેટર્સ '+ +' અને '--': ઓપરેન્ડ એક સુધારી શકાય તેવું મૂલ્ય હશે. [છોડવામાં આવ્યું] પરિણામ એ અપડેટેડ ઓપરેન્ડ છે; તે એક મૂલ્ય છે. ", પરંતુ જાવામાં" ઉપર ઉલ્લેખિત દ્વિસંગી આંકડાકીય પ્રચારમાં અનબોક્સિંગ રૂપાંતરણ અને મૂલ્ય સમૂહ રૂપાંતરણનો સમાવેશ થઈ શકે છે. જો જરૂરી હોય તો, મૂલ્ય સમૂહ રૂપાંતરણ {અને/અથવા [.] બોક્સિંગ રૂપાંતરણ} ચલમાં સંગ્રહિત થાય તે પહેલાં રકમ પર લાગુ કરવામાં આવે છે. ", એટલે કે. જાવામાં, આરંભીકરણ પછી "પૂર્ણાંક i = 2;", "+ + i;" સંદર્ભ i ને નવો પદાર્થ સોંપીને બદલે છે, જ્યારે C + + માં પદાર્થ હજુ પણ સમાન છે. સંસાધન વ્યવસ્થાપન જાવા સ્વયંચાલિત કચરો સંગ્રહ પ્રદાન કરે છે, જેને વાસ્તવિક સમય જાવા સ્પષ્ટીકરણ દ્વારા ચોક્કસ સંજોગોમાં અવગણવામાં આવી શકે છે. સી + + માં મેમરી મેનેજમેન્ટ સામાન્ય રીતે કન્સ્ટ્રક્ટર્સ, ડિસ્ટ્રક્ટર્સ અને સ્માર્ટ પોઇન્ટર દ્વારા કરવામાં આવે છે. સી + + ધોરણ કચરો એકત્ર કરવાની મંજૂરી આપે છે, પરંતુ તેની જરૂર નથી. વ્યવહારમાં કચરો સંગ્રહ ભાગ્યે જ વપરાય છે. સી + + મેમરીના મનસ્વી બ્લોક્સ ફાળવી શકે છે. જાવા માત્ર ઓબ્જેક્ટ ઇન્સ્ટન્ટિયેશન દ્વારા મેમરી ફાળવે છે. આર્બિટ્રરી મેમરી બ્લોકને જાવામાં બાઇટ્સની શ્રેણી તરીકે ફાળવવામાં આવી શકે છે. જાવા અને સી + + સંસાધન વ્યવસ્થાપન માટે વિવિધ રૂઢિપ્રયોગોનો ઉપયોગ કરે છે. જાવા મુખ્યત્વે કચરો સંગ્રહ પર આધાર રાખે છે, જે મેમરીને પુનઃપ્રાપ્ત કરી શકે છે, જ્યારે સી + + મુખ્યત્વે રિસોર્સ એક્વિઝિશન ઇઝ ઇનિશિયલાઈઝેશન (આરએઆઈઆઈ) રૂઢિપ્રયોગ પર આધાર રાખે છે. આ બે ભાષાઓ વચ્ચેના ઘણા તફાવતોમાં પ્રતિબિંબિત થાય છેઃ C + + માં સંયોજન પ્રકારોની વસ્તુઓને સ્થાનિક સ્ટૅક-બાઉન્ડ ચલ તરીકે ફાળવવી સામાન્ય છે જે જ્યારે અવકાશની બહાર જાય ત્યારે નાશ પામે છે. જાવામાં સંયોજનના પ્રકારો હંમેશા ઢગલા પર ફાળવવામાં આવે છે અને કચરો સંગ્રહકર્તા દ્વારા એકત્રિત કરવામાં આવે છે (વર્ચ્યુઅલ મશીનો સિવાય કે જે ઢગલાની ફાળવણીને સ્ટેક્સ ફાળવણીમાં રૂપાંતરિત કરવા માટે એસ્કેપ વિશ્લેષણનો ઉપયોગ કરે છે). સી + + માં ડિસ્ટ્રક્ટર્સ છે, જ્યારે જાવામાં ફાઇનલાઇઝર્સ છે. ઑબ્જેક્ટના ડીલોકેશન પહેલાં બંનેને બોલાવવામાં આવે છે, પરંતુ તેઓ નોંધપાત્ર રીતે અલગ પડે છે. C + + ઓબ્જેક્ટના ડિસ્ટ્રક્ટરને પરોક્ષ રીતે (સ્ટૅક-બાઉન્ડ વેરિયેબલ્સના કિસ્સામાં) અથવા ઓબ્જેક્ટને ડીલોકેટ કરવા માટે સ્પષ્ટ રીતે બોલાવવા આવશ્યક છે. ડિસ્ટ્રક્ટર પ્રોગ્રામમાં તે બિંદુની બરાબર પહેલાં સુમેળમાં એક્ઝિક્યુટ કરે છે કે જેના પર ઑબ્જેક્ટ ડીલોકેટેડ છે. સિંક્રનસ, કોઓર્ડિનેટેડ અનઇનિશિયલાઇઝિંગ અને સી + + માં ડીલોકેટિંગ આમ આરએઆઈઆઈ રૂઢિપ્રયોગને સંતોષે છે. સી + + માં ડિસ્ટ્રક્ટર્સ એ ઑબ્જેક્ટ સાથે સંકળાયેલા સંસાધનોને પાછા મેળવવાની સામાન્ય રીત છે, અને કન્સ્ટ્રક્ટર્સ માટે જરૂરી પ્રતિરૂપ છે. જાવામાં, ઓબ્જેક્ટ ડીલોકેશનને સ્પષ્ટપણે કચરો સંગ્રહકર્તા દ્વારા નિયંત્રિત કરવામાં આવે છે. જાવા ઓબ્જેક્ટના ફાઇનલાઇઝરને છેલ્લી વખત એક્સેસ કરવામાં આવ્યા પછી અને તેને ડીલોકેટેડ કરવામાં આવે તે પહેલાં થોડા સમય માટે અસુમેળ રીતે બોલાવવામાં આવે છે. બહુ ઓછી વસ્તુઓને અંતિમ સ્વરૂપ આપવાની જરૂર હોય છે. અંતિમ સ્વરૂપ માત્ર એવી વસ્તુઓ માટે જરૂરી છે કે જે સામાન્ય રીતે જે. વી. એમ. ની બહારના સંસાધનોને મુક્ત કરતા પહેલા ઑબ્જેક્ટની સ્થિતિની થોડી સફાઈની બાંયધરી આપે. ફાઇનલાઇઝર્સના સીધા ઉપયોગની સામાન્ય રીતે સલાહ આપવામાં આવતી નથી, કારણ કે તે અણધારી હોય છે, સામાન્ય રીતે જોખમી હોય છે અને મોટાભાગે બિનજરૂરી હોય છે. કોઈએ સાવચેત રહેવું પડશે કે ફાઇનલાઇઝર્સને સી + + ડિસ્ટ્રક્ટર્સ તરીકે ન વિચારવું. તેના બદલે, ટ્રાય-વિથ-રિસોર્સિસ અથવા ટ્રાય-ફાઈનલી બ્લોક વિનાશક જેવા વધુ સમાન હેતુ હાંસલ કરે છે. ફાઇનલાઇઝર્સ અથવા ક્લીનર્સ સાથે એક સમસ્યા એ છે કે તે ખાતરીપૂર્વક નથી કે તેઓ તરત જ ચાલશે. તેથી, સમય-નિર્ણાયક કાર્યો માટે ક્યારેય ફાઇનલાઇઝરનો ઉપયોગ થવો જોઈએ નહીં. વધુમાં, ફાઇનલાઇઝર્સ ગંભીર પ્રદર્શન દંડ સાથે આવે છે અને વસ્તુઓને અલગ કરવામાં લાગતા સમયને નોંધપાત્ર રીતે વધારે છે, તેથી જાવા 9 માં તેનો ઉપયોગ નિરુત્સાહિત અને નાપસંદ કરવામાં આવે છે. સી + + માં આરએઆઈઆઈ સાથે, એક પ્રકારનું સંસાધન સામાન્ય રીતે નાના વર્ગની અંદર લપેટી લેવામાં આવે છે જે બાંધકામ પર સંસાધનની ફાળવણી કરે છે અને વિનાશ પર સંસાધનને મુક્ત કરે છે, અને તે બિંદુઓ વચ્ચે સંસાધનની પહોંચ પ્રદાન કરે છે. કોઈપણ વર્ગ કે જેમાં માત્ર આવા આરએઆઈઆઈ પદાર્થો હોય તેને વિનાશકને વ્યાખ્યાયિત કરવાની જરૂર નથી કારણ કે આરએઆઈઆઈ પદાર્થોના વિનાશકને આપમેળે કહેવામાં આવે છે કારણ કે આ વર્ગનો પદાર્થ નાશ પામે છે. જાવામાં, પ્રયાસ કરો/પકડો/અંતે નિર્માણનો ઉપયોગ કરીને સંસાધનોની સલામત સિંક્રનસ ડીલોકેશન નિર્ધારિત રીતે કરી શકાય છે. વૈકલ્પિક રીતે, જાવા 7 માં રજૂ કરાયેલ 'ટ્રાય-વિથ-રિસોર્સિસ' રચનાનો ઉપયોગ 'ટ્રાય-ફાઈનલી કન્સ્ટ્રક્ટ' ની પસંદગીમાં થવો જોઈએ. ટ્રાય-વિથ-રિસોર્સિસની રચના વધુ સંક્ષિપ્ત અને વાંચી શકાય તેવી છે. તે વધુ મદદરૂપ નિદાન માહિતી પણ પ્રદાન કરે છે, કારણ કે દબાવવામાં આવેલા અપવાદોને કાઢી નાખવામાં આવતા નથી, અને તેમને દબાવવામાં આવ્યા હોવાનું કહેતી માહિતી સાથે સ્ટૅક ટ્રેસમાં છાપવામાં આવશે. સી + + માં, લટકતું નિર્દેશક હોવું શક્ય છે, જે પહેલેથી જ કાઢી નાખવામાં આવેલી વસ્તુનો વાસી સંદર્ભ છે. લટકતા નિર્દેશકનો ઉપયોગ કરવાનો પ્રયાસ સામાન્ય રીતે કાર્યક્રમની નિષ્ફળતામાં પરિણમે છે. જાવામાં, કચરો સંગ્રહકર્તા સંદર્ભિત વસ્તુનો નાશ કરશે નહીં. સી + + માં, પ્રારંભિક ન હોય તેવી આદિમ વસ્તુઓ હોવી શક્ય છે. જાવા મૂળભૂત આરંભીકરણ લાગુ કરે છે. સી + + માં, ફાળવેલ ઓબ્જેક્ટ હોવું શક્ય છે જેનો કોઈ માન્ય સંદર્ભ નથી. આવી પહોંચી ન શકાય તેવી વસ્તુને નષ્ટ કરી શકાતી નથી (અલગ કરી શકાય છે), અને મેમરી લીકમાં પરિણમે છે. તેનાથી વિપરીત, જાવામાં કોઈ વસ્તુને કચરો સંગ્રહકર્તા દ્વારા ત્યાં સુધી દૂર કરવામાં આવશે નહીં જ્યાં સુધી તે પહોંચી ન શકાય (વપરાશકર્તા પ્રોગ્રામ દ્વારા). (નબળા સંદર્ભો સમર્થિત છે, જે સુલભતાની વિવિધ શક્તિઓને મંજૂરી આપવા માટે જાવા કચરો સંગ્રહકર્તા સાથે કામ કરે છે.) જાવામાં કચરો સંગ્રહ ઘણા મેમરી લિકને અટકાવે છે, પરંતુ કેટલાક સંજોગોમાં હજુ પણ લીક શક્ય છે. સ્વયંચાલિત કચરો સંગ્રહકર્તા ખોટી છાપ આપી શકે છે કે જાવામાં મેમરી મેનેજમેન્ટ વિશે વિચારવાની જરૂર નથી. જોકે આ વાત બિલકુલ સાચી નથી. ઢીલી રીતે કહીએ તો, આનું કારણ એ છે કે પ્રોગ્રામમાં "મેમરી લિક" હોઈ શકે છે, જે વધુ ઔપચારિક રીતે "અજાણતા ઑબ્જેક્ટ રીટેન્શન" તરીકે ઓળખાય છે. મેમરી લીકનું ઉદાહરણ જે થઈ શકે છે તે એવા પ્રોગ્રામ માટે છે જે કોઈપણ તાર્કિક ભૂલો વિના લખવામાં આવ્યું છે, સિવાય કે તે અપ્રચલિત સંદર્ભોને દૂર કરતું નથી. આના પરિણામે કચરો સંગ્રહ કરવાની પ્રવૃત્તિ, વધુ મેમરી ફૂટપ્રિન્ટનો વધુ ઉપયોગ થાય છે. આત્યંતિક સંજોગોમાં, આ સમસ્યા આઉટઓફ મેમરી એરર તરફ દોરી શકે છે, પરંતુ આવું ભાગ્યે જ થાય છે. આનો ઉકેલ ઓબ્જેક્ટ સંદર્ભોને રદ કરવાનો છે. મેમરી લીક થવાનું બીજું સામાન્ય કારણ કેશનો ઉપયોગ છે જે હવે સુસંગત નથી. જૂની કેશનો ઉપયોગ કરવાને કારણે મેમરી લીક થવાનો ઉકેલ વીકહેશમેપનો ઉપયોગ કરીને કેશનું પ્રતિનિધિત્વ કરવાનો છે. પુસ્તકાલયો સી + + પ્લેટફોર્મ-વિશિષ્ટ પુસ્તકાલયોમાં સામાન્ય રીતે ઉપલબ્ધ ઘણી સુવિધાઓની ક્રોસ-પ્લેટફોર્મ ઍક્સેસ પ્રદાન કરે છે. જાવાથી મૂળ ઓપરેટિંગ સિસ્ટમ અને હાર્ડવેર કાર્યોમાં સીધી પહોંચ માટે જાવા મૂળ ઇન્ટરફેસનો ઉપયોગ જરૂરી છે. રનટાઇમ તેની અનિયંત્રિત અભિવ્યક્તિને કારણે, નીચા સ્તરની સી + + ભાષા સુવિધાઓ (દા. ત. અનિયંત્રિત એરે ઍક્સેસ, કાચા પોઇન્ટર, પ્રકાર પનિંગ) સંકલન-સમયે અથવા રન-ટાઇમ પર ઓવરહેડ વિના વિશ્વસનીય રીતે ચકાસી શકાતા નથી. સંબંધિત પ્રોગ્રામિંગ ભૂલો નિમ્ન-સ્તરના બફર ઓવરફ્લો અને વિભાજન ખામી તરફ દોરી શકે છે. સ્ટાન્ડર્ડ ટેમ્પલેટ લાઇબ્રેરી આવી ભૂલોને ટાળવામાં મદદ કરવા માટે ઉચ્ચ-સ્તરના આરએઆઈઆઈ અમૂર્ત (જેમ કે વેક્ટર, સૂચિ અને નકશો) પ્રદાન કરે છે. જાવામાં, નિમ્ન સ્તરની ભૂલો કાં તો થઈ શકતી નથી અથવા જાવા વર્ચ્યુઅલ મશીન (JVM) દ્વારા શોધી કાઢવામાં આવે છે અને અપવાદના રૂપમાં એપ્લિકેશનને જાણ કરવામાં આવે છે. જાવા ભાષામાં આઉટ-ઓફ-બાઉન્ડ્સ એરે એક્સેસના કિસ્સામાં ચોક્કસ વર્તણૂકની જરૂર પડે છે, જેમાં સામાન્ય રીતે એરે એક્સેસની બાઉન્ડ્સ ચેકિંગની જરૂર પડે છે. આ અસ્થિરતાના સંભવિત સ્ત્રોતને દૂર કરે છે પરંતુ સામાન્ય રીતે અમલીકરણને ધીમું કરવાની કિંમત પર. કેટલાક કિસ્સાઓમાં, ખાસ કરીને જાવા 7 થી, કમ્પાઇલર વિશ્લેષણ બાઉન્ડ્સ ચેકને બિનજરૂરી સાબિત કરી શકે છે અને તેને દૂર કરી શકે છે. સી + + ને મૂળ એરેની સીમાઓની બહારની પહોંચ માટે કોઈ જરૂરી વર્તન નથી, આમ મૂળ એરે માટે કોઈ સીમા તપાસવાની જરૂર નથી. સી + + પ્રમાણભૂત પુસ્તકાલય સંગ્રહો જેમ કે એસટીડીઃઃ વેક્ટર, જોકે, વૈકલ્પિક સીમા ચકાસણી પ્રદાન કરે છે. સારાંશમાં, જાવા એરે "સામાન્ય રીતે સલામત હોય છે; સહેજ મર્યાદિત હોય છે; ઘણીવાર ઓવરહેડ હોય છે" જ્યારે C + + મૂળ એરેમાં "વૈકલ્પિક ઓવરહેડ હોય છે; સહેજ અનિયંત્રિત હોય છે; સંભવતઃ અસુરક્ષિત હોય છે". ટેમ્પલેટો વિ. જેનેરિક સી + + અને જાવા બંને અનુક્રમે સામાન્ય પ્રોગ્રામિંગ, ટેમ્પલેટો અને જેનેરિક માટે સુવિધાઓ પ્રદાન કરે છે. તેમ છતાં તેઓ સમાન પ્રકારની સમસ્યાઓ ઉકેલવા માટે બનાવવામાં આવ્યા હતા, અને સમાન વાક્યરચના ધરાવે છે, તેઓ તદ્દન અલગ છે. {| વર્ગ = "વિકિટેબલ"! સી + + નમૂનાઓ! જાવા જેનેરિક્સ |-| વર્ગો, કાર્યો, ઉપનામો અને ચલોનું નમૂના બનાવી શકાય છે. | વર્ગો અને પદ્ધતિઓને સામાન્ય બનાવી શકાય છે. |-| પરિમાણો વૈવિધ્યસભર, કોઈપણ પ્રકારના, અભિન્ન મૂલ્ય, અક્ષર શાબ્દિક અથવા વર્ગ નમૂના હોઈ શકે છે. | પરિમાણો કોઈપણ સંદર્ભ પ્રકાર હોઈ શકે છે, જેમાં બોક્સવાળા આદિમ પ્રકારો (એટલે કે. પૂર્ણાંક, બુલિયન.). |-| સંકલિત કરવામાં આવે ત્યારે દરેક પરિમાણ-સમૂહ માટે વર્ગ અથવા કાર્યની અલગ ત્વરિતતાઓ પેદા કરવામાં આવશે. વર્ગ નમૂનાઓ માટે, ફક્ત સભ્ય કાર્યો કે જેનો ઉપયોગ કરવામાં આવે છે તે તાત્કાલિક કરવામાં આવશે. વર્ગ અથવા કાર્યનું એક સંસ્કરણ સંકલિત કરવામાં આવે છે, જે તમામ પ્રકારના પરિમાણો માટે કામ કરે છે (ટાઈપ-ઇરેઝર દ્વારા). |-| વિવિધ પરિમાણો સાથે ત્વરિત વર્ગ નમૂનાના ઓબ્જેક્ટના રન ટાઇમ પર વિવિધ પ્રકારો હશે (એટલે કે, અલગ નમૂના તાત્કાલિકતા અલગ વર્ગો છે). | જ્યારે સંકલિત કરવામાં આવે ત્યારે પ્રકાર પરિમાણો ભૂંસી નાખવામાં આવે છે; વિવિધ પ્રકારનાં પરિમાણો ધરાવતા વર્ગના પદાર્થો રન ટાઇમ પર સમાન પ્રકારનાં હોય છે. તે એક અલગ કન્સ્ટ્રક્ટરનું કારણ બને છે. આ પ્રકારના ઇરેઝરને કારણે, સામાન્ય વર્ગના વિવિધ ઇન્સ્ટાન્ટીએશનનો ઉપયોગ કરીને પદ્ધતિઓને ઓવરલોડ કરવી શક્ય નથી. |-| વર્ગ અથવા કાર્ય નમૂનાનું અમલીકરણ તેનો ઉપયોગ કરવા માટે અનુવાદ એકમમાં દૃશ્યમાન હોવું આવશ્યક છે. આ સામાન્ય રીતે હેડર ફાઇલોમાં અથવા હેડર ફાઇલમાં સમાવિષ્ટ વ્યાખ્યાઓ હોવાનું સૂચવે છે. સી + + 11 મુજબ, કેટલાક ત્વરિત સંકલનને અલગ કરવા માટે બાહ્ય નમૂનાઓનો ઉપયોગ કરવો શક્ય છે. | સંકલિત વર્ગ ફાઇલમાંથી વર્ગ અથવા કાર્યની સહી તેનો ઉપયોગ કરવા માટે પૂરતી છે. |-| નમૂનાઓ વિશિષ્ટ હોઈ શકે છે-ચોક્કસ નમૂના પરિમાણ માટે અલગ અમલીકરણ પ્રદાન કરી શકાય છે. | જેનેરિક્સ વિશિષ્ટ ન હોઈ શકે. |-| ટેમ્પ્લેટ પરિમાણોમાં મૂળભૂત દલીલો હોઈ શકે છે. પૂર્વ-સી + + 11, આને માત્ર નમૂના વર્ગો માટે મંજૂરી આપવામાં આવી હતી, કાર્યો માટે નહીં. | સામાન્ય પ્રકારના પરિમાણોમાં મૂળભૂત દલીલો ન હોઈ શકે. |-| વાઇલ્ડકાર્ડ્સ અસમર્થિત છે. તેના બદલે, વળતરના પ્રકારો ઘણીવાર નેસ્ટેડ ટાઇપેડેફ તરીકે ઉપલબ્ધ હોય છે. (ઉપરાંત, સી + + 11 એ સ્વયં મુખ્ય શબ્દ ઉમેર્યો, જે સંકલન સમયે નક્કી કરી શકાય તેવા કોઈપણ પ્રકાર માટે વાઇલ્ડકાર્ડ તરીકે કામ કરે છે.) | વાઇલ્ડકાર્ડ્સ પ્રકાર પરિમાણ તરીકે આધારભૂત છે. |-| પ્રકાર પરિમાણોની સીમા માટે કોઈ સીધો ટેકો નથી, પરંતુ મેટાપ્રોગ્રામિંગ આ પ્રદાન કરે છે | ઉપલા અને નીચલા સીમાઓ માટે અનુક્રમે "એક્સટેન્ડ" અને "સુપર" સાથે પ્રકાર પરિમાણોની મર્યાદાને ટેકો આપે છે; પ્રકાર પરિમાણો વચ્ચેના સંબંધોને અમલમાં મૂકવાની મંજૂરી આપે છે. |-| પરિમાણ પ્રકાર સાથે ઑબ્જેક્ટના ત્વરિતકરણને મંજૂરી આપે છે. | પરિમાણ પ્રકાર (પ્રતિબિંબ સિવાય) ના પ્રકાર સાથે ઓબ્જેક્ટના ત્વરિતકરણનો સમાવેશ કરે છે. |-| વર્ગ નમૂનાના પ્રકાર પરિમાણનો ઉપયોગ સ્થિર પદ્ધતિઓ અને ચલ માટે થઈ શકે છે. સામાન્ય વર્ગના પ્રકાર પરિમાણનો ઉપયોગ સ્થિર પદ્ધતિઓ અને ચલ માટે કરી શકાતો નથી. |-| વિવિધ પ્રકારનાં પરિમાણોના વર્ગો અને કાર્યો વચ્ચે બિન-વહેંચાયેલ સ્થિર ચલ. | વિવિધ પ્રકારના પરિમાણોના વર્ગોના ઉદાહરણો વચ્ચે વહેંચાયેલ સ્થિર ચલ. |-| વર્ગ અને કાર્ય નમૂનાઓ તેમની ઘોષણામાં પ્રકાર પરિમાણો માટે પ્રકાર સંબંધોને લાગુ કરતા નથી. ખોટા પ્રકારનાં પરિમાણનો ઉપયોગ સંકલન નિષ્ફળતામાં પરિણમે છે, ઘણીવાર વપરાશકર્તાના કોડને બદલે ટેમ્પલેટ કોડની અંદર ભૂલ સંદેશ પેદા કરે છે જે તેને બોલાવે છે. ટેમ્પલેટેડ વર્ગો અને કાર્યોનો યોગ્ય ઉપયોગ યોગ્ય દસ્તાવેજીકરણ પર આધારિત છે. મેટાપ્રોગ્રામિંગ વધારાના પ્રયત્નોના ખર્ચે આ સુવિધાઓ પ્રદાન કરે છે. સી + + 11 માં આ સમસ્યાને હલ કરવાની દરખાસ્ત હતી, કહેવાતા ખ્યાલો, તે આગામી ધોરણ માટે આયોજન કરવામાં આવ્યું છે. સામાન્ય વર્ગો અને કાર્યો તેમની ઘોષણામાં પ્રકાર પરિમાણો માટે પ્રકાર સંબંધોને લાગુ કરી શકે છે. ખોટા પ્રકારનાં પરિમાણનો ઉપયોગ કરવાથી તેનો ઉપયોગ કરતા કોડની અંદર પ્રકાર ભૂલ થાય છે. સામાન્ય કોડમાં પેરામેટ્રીઝ્ડ પ્રકારો પરની કામગીરીને માત્ર એવી રીતે મંજૂરી આપવામાં આવે છે કે જે ઘોષણા દ્વારા સુરક્ષિત હોવાની ખાતરી આપી શકાય. આ લવચિકતાના ખર્ચે વધુ પ્રકારની સલામતીમાં પરિણમે છે. |-| નમૂનાઓ ટ્યુરિંગ-પૂર્ણ છે (નમૂના મેટાપ્રોગ્રામિંગ જુઓ). | જેનેરિક્સ પણ ટ્યુરિંગ-પૂર્ણ |} વિવિધ જાવા અને સી + + કોડને બહુવિધ સ્રોત ફાઇલોમાં વિભાજિત કરવા માટે વિવિધ માધ્યમોનો ઉપયોગ કરે છે. જાવા એક પેકેજ સિસ્ટમનો ઉપયોગ કરે છે જે તમામ પ્રોગ્રામ વ્યાખ્યાઓ માટે ફાઇલનું નામ અને પાથ નક્કી કરે છે. તેનું કમ્પાઇલર એક્ઝેક્યુટેબલ ક્લાસ ફાઇલોને આયાત કરે છે. સી + + સ્રોત ફાઇલો વચ્ચે ઘોષણાઓ વહેંચવા માટે હેડર ફાઇલ સ્રોત કોડ સમાવેશ પદ્ધતિનો ઉપયોગ કરે છે. સંકલિત જાવા કોડ ફાઇલો સામાન્ય રીતે સી + + માં કોડ ફાઇલો કરતા નાની હોય છે કારણ કે જાવા બાઈટકોડ સામાન્ય રીતે મૂળ મશીન કોડ કરતાં વધુ સઘન હોય છે અને જાવા પ્રોગ્રામ્સ ક્યારેય સ્થિર રીતે જોડાયેલા નથી હોતા. સી + + સંકલનમાં વધારાના લખાણ પૂર્વપ્રક્રિયા તબક્કાનો સમાવેશ થાય છે, જ્યારે જાવામાં નથી. આમ કેટલાક વપરાશકર્તાઓ શરતી સંકલનના વધુ સારા સમર્થન માટે તેમની નિર્માણ પ્રક્રિયામાં પ્રીપ્રોસેસિંગ તબક્કો ઉમેરે છે. જાવાના વિભાજન અને મોડ્યુલસ ઓપરેટરોને શૂન્ય સુધી કાપવા માટે સારી રીતે વ્યાખ્યાયિત કરવામાં આવે છે. સી + + (પૂર્વ-સી + + 11) એ સ્પષ્ટ કરતું નથી કે આ ઓપરેટરો શૂન્યમાં કાપવામાં આવે છે કે "અનંતમાં કાપવામાં આવે છે". જાવામાં-3/2 હંમેશા-1 અને C + + 11 હશે, પરંતુ C + + 03 કમ્પાઇલર પ્લેટફોર્મના આધારે-1 અથવા-2 પરત કરી શકે છે. C99 વિભાજનને જાવા અને C + + 11 જેવી જ રીતે વ્યાખ્યાયિત કરે છે. બંને ભાષાઓ બાંહેધરી આપે છે (જ્યાં a અને b પૂર્ણાંક પ્રકારો છે) કે (a/b) * b + (a% b) = = a બધા a અને b માટે (b! = 0). સી + + 03 સંસ્કરણ કેટલીકવાર ઝડપી હશે, કારણ કે તેને જે પણ કાપણી પદ્ધતિ પ્રોસેસરની મૂળ છે તે પસંદ કરવાની મંજૂરી છે. પૂર્ણાંક પ્રકારોના કદને જાવામાં વ્યાખ્યાયિત કરવામાં આવે છે (પૂર્ણાંક 32-બીટ છે, લાંબો 64-બીટ છે), જ્યારે C + + માં પૂર્ણાંકો અને પોઇન્ટરનું કદ કમ્પાઇલર અને એપ્લિકેશન બાઈનરી ઇન્ટરફેસ (ABI) આપેલ મર્યાદાઓમાં આધારિત છે. આમ જાવા પ્રોગ્રામ પ્લેટફોર્મ્સમાં સુસંગત વર્તન ધરાવશે, જ્યારે કે C + + પ્રોગ્રામને કેટલાક પ્લેટફોર્મ્સ માટે અનુકૂલનની જરૂર પડી શકે છે, પરંતુ સ્થાનિક પ્લેટફોર્મ માટે વધુ કુદરતી પૂર્ણાંક કદ સાથે ઝડપથી ચાલી શકે છે. સી + + અને જાવાની સરખામણી કરવાનું ઉદાહરણ વિકિબુક્સમાં અસ્તિત્વમાં છે. પ્રદર્શન સંકલિત જાવા કાર્યક્રમ ચલાવવા ઉપરાંત, જાવા કાર્યક્રમો ચલાવતા કમ્પ્યુટરોએ સામાન્ય રીતે જાવા વર્ચ્યુઅલ મશીન (JVM) પણ ચલાવવું આવશ્યક છે, જ્યારે સંકલિત C + + કાર્યક્રમો બાહ્ય કાર્યક્રમો વિના ચલાવી શકાય છે. જાવાની પ્રારંભિક આવૃત્તિઓ સી + + જેવી સ્થિર રીતે સંકલિત ભાષાઓ દ્વારા નોંધપાત્ર રીતે પાછળ રહી ગઈ હતી. આનું કારણ એ છે કે આ બે નજીકથી સંબંધિત ભાષાઓના પ્રોગ્રામ સ્ટેટમેન્ટ C + + સાથે કેટલીક મશીન સૂચનાઓનું સંકલન કરી શકે છે, જ્યારે JVM દ્વારા અર્થઘટન કરવામાં આવે ત્યારે દરેકને અનેક મશીન સૂચનાઓ સાથે સંકળાયેલા કેટલાક બાઈટ કોડમાં સંકલન કરી શકાય છે. ઉદાહરણ તરીકેઃ પર્ફોર્મન્સ ઓપ્ટિમાઇઝેશન એ ખૂબ જ જટિલ મુદ્દો હોવાથી, સામાન્ય શબ્દોમાં C + + અને જાવા વચ્ચેના પર્ફોર્મન્સ તફાવતને માપવું ખૂબ જ મુશ્કેલ છે, અને મોટાભાગના બેન્ચમાર્ક અવિશ્વસનીય અને પક્ષપાતી છે. ભાષાઓના ખૂબ જ અલગ સ્વભાવને જોતાં, ચોક્કસ ગુણાત્મક તફાવતો પણ દોરવા મુશ્કેલ છે. ટૂંકમાં, જાવામાં ઓપ્ટિમાઇઝિંગ પર અંતર્ગત બિનકાર્યક્ષમતા અને સખત મર્યાદાઓ છે, કારણ કે તે લવચીક ઉચ્ચ-સ્તરના અમૂર્ત પર ભારે આધાર રાખે છે, જો કે, શક્તિશાળી JIT કમ્પાઇલરનો ઉપયોગ (આધુનિક JVM અમલીકરણની જેમ) કેટલીક સમસ્યાઓને ઘટાડી શકે છે. કોઈ પણ સંજોગોમાં, જો જાવાની બિનકાર્યક્ષમતાઓ ખૂબ મોટી હોય, તો સંકલિત C અથવા C + + કોડને JNI દ્વારા જાવામાંથી કૉલ કરી શકાય છે. જાવા ભાષામાં રહેલી કેટલીક બિનકાર્યક્ષમતામાં મુખ્યત્વે નીચેનાનો સમાવેશ થાય છેઃ બધી વસ્તુઓ ઢગલા પર ફાળવવામાં આવે છે. જો કે 'બમ્પ ફાળવણી' નો ઉપયોગ કરીને આધુનિક જેવીએમમાં ફાળવણી અત્યંત ઝડપી છે, જે સ્ટેક ફાળવણીની જેમ જ કામ કરે છે, તેમ છતાં કચરો સંગ્રહકર્તાના આહ્વાનને કારણે કામગીરી પર નકારાત્મક અસર થઈ શકે છે. આધુનિક જેઆઇટી કમ્પાઇલર્સ આ સમસ્યાને અમુક અંશે એસ્કેપ એનાલિસિસ અથવા એસ્કેપ ડિટેક્શન સાથે ઘટાડે છે, જે ઓરેકલ જેડીકે 6 થી સ્ટેક પર કેટલીક વસ્તુઓ ફાળવે છે. કાર્યક્ષમ ડેટાબેઝ સિસ્ટમો અને મેસેજિંગ લાઈબ્રેરીઓ જેવા પ્રદર્શન-નિર્ણાયક પ્રોજેક્ટ્સને મેન્યુઅલ રિસોર્સ મેનેજમેન્ટની ઍક્સેસ મેળવવા અને સ્ટૅક ફાળવણી કરવા માટે સક્ષમ થવા માટે sun.misc.Unsafe જેવા આંતરિક બિનસત્તાવાર API નો ઉપયોગ કરવો પડ્યો છે; અસરકારક રીતે સ્યુડો-પોઇન્ટરને હેરફેર કરે છે. પ્રમાણભૂત કન્ટેનરનો ઉપયોગ કરવા માટે પણ ઘણા રન-ટાઇમ કાસ્ટિંગની જરૂર પડે છે જે પ્રદર્શન દંડને પ્રેરિત કરે છે. જો કે, આમાંના મોટાભાગના કાસ્ટ્સ જે. આઈ. ટી. કમ્પાઇલર દ્વારા સ્થિર રીતે દૂર કરવામાં આવે છે. સલામતીની બાંયધરીઓ રન-ટાઇમ ખર્ચ પર આવે છે. ઉદાહરણ તરીકે, કમ્પાઇલરે કોડમાં યોગ્ય શ્રેણી તપાસ કરવી જરૂરી છે. રેન્જ ચેક સાથે દરેક એરે ઍક્સેસને સુરક્ષિત કરવું કાર્યક્ષમ નથી, તેથી મોટાભાગના JIT કમ્પાઇલર્સ તેમને સ્થિર રીતે અથવા તેમને આંતરિક લૂપ્સમાંથી બહાર કાઢીને દૂર કરવાનો પ્રયાસ કરશે (જોકે C + + માટેના મોટાભાગના મૂળ કમ્પાઇલર્સ જ્યારે રેન્જ-ચેકનો વૈકલ્પિક ઉપયોગ કરવામાં આવે ત્યારે તે જ કરશે). નિમ્ન-સ્તરની વિગતોની પહોંચનો અભાવ વિકાસકર્તાને પ્રોગ્રામમાં સુધારો કરવાથી અટકાવે છે જ્યાં કમ્પાઇલર આમ કરવામાં અસમર્થ હોય છે. જાવામાં તમામ વપરાશકર્તા-નિર્ધારિત પ્રકારો માટે સંદર્ભ-સિમેન્ટિક્સનો ફરજિયાત ઉપયોગ મોટા પ્રમાણમાં અનાવશ્યક મેમરી દિશા નિર્દેશો (અથવા કૂદકા) રજૂ કરી શકે છે (જ્યાં સુધી જે. આઈ. ટી. કમ્પાઇલર દ્વારા દૂર કરવામાં ન આવે ત્યાં સુધી) જે વારંવાર કેશ ચૂકી જવા તરફ દોરી શકે છે. કેશ થ્રેશિંગ). વધુમાં, કેશ-ઓપ્ટિમાઇઝેશન, સામાન્ય રીતે કેશ-અવેર અથવા કેશ-ઓબ્લિવિયસ ડેટા સ્ટ્રક્ચર્સ અને અલ્ગોરિધમ્સ દ્વારા, ઘણીવાર કામગીરીમાં તીવ્ર સુધારણાના આદેશો તરફ દોરી શકે છે તેમજ સમય-જટિલતાના અધોગતિને ટાળી શકે છે જે ઘણા કેશ-નિરાશાવાદી અલ્ગોરિધમ્સની લાક્ષણિકતા છે, અને તેથી તે ઓપ્ટિમાઇઝેશનના સૌથી મહત્વપૂર્ણ સ્વરૂપોમાંનું એક છે; સંદર્ભ-સિમેન્ટિક્સ, જે જાવામાં ફરજિયાત છે, તે આવા ઓપ્ટિમાઇઝેશનને વ્યવહારમાં સાકાર કરવાનું અશક્ય બનાવે છે (પ્રોગ્રામર કે જેઆઈટી કમ્પાઇલર દ્વારા નહીં). કચરો સંગ્રહ, કારણ કે સ્વચાલિત મેમરી વ્યવસ્થાપનનું આ સ્વરૂપ મેમરી ઓવરહેડ રજૂ કરે છે. જો કે, જાવાની રચનામાં સંખ્યાબંધ ફાયદાઓ છે, કેટલાકને સમજાયું છે, કેટલાક માત્ર સિદ્ધાંતબદ્ધ છેઃ જાવા કચરાના સંગ્રહમાં મેમરી ફાળવણી માટે મેલોક/ન્યૂના સામાન્ય ઉપયોગ કરતાં વધુ સારી કેશ સુસંગતતા હોઈ શકે છે. તેમ છતાં, એવી દલીલો અસ્તિત્વમાં છે કે બંને ફાળવણીકારો ઢગલાને સમાન રીતે વિભાજિત કરે છે અને ન તો વધુ સારી કેશ જગ્યા દર્શાવે છે. જો કે, સી + + માં, ઢગલા પર એક જ પદાર્થની ફાળવણી દુર્લભ છે, અને સામાન્ય રીતે એસટીએલ કન્ટેનર અને/અથવા નાના પદાર્થ ફાળવણીકાર દ્વારા બ્લોકમાં મોટા પ્રમાણમાં એક જ પદાર્થની ફાળવણી કરવામાં આવે છે. રન-ટાઇમ સંકલન સંભવિત રીતે પ્લેટફોર્મ વિશેની માહિતીનો ઉપયોગ કરી શકે છે જેના પર કોડ વધુ અસરકારક રીતે સુધારવા માટે કોડ ચલાવવામાં આવી રહ્યો છે. જો કે, મોટાભાગના અદ્યતન મૂળ (સી, સી + +, વગેરે) કમ્પાઇલર્સ આપેલ સિસ્ટમની સંપૂર્ણ કોમ્પ્યુટેશનલ ક્ષમતાઓનો ઉપયોગ કરવા માટે બહુવિધ કોડ પાથ ઉત્પન્ન કરે છે. ઉપરાંત, વિપરીત દલીલ કરી શકાય છે કે મૂળ કમ્પાઇલર્સ મલ્ટી-પ્લેટફોર્મ JVM વિતરણો કરતાં આર્કિટેક્ચર-વિશિષ્ટ ઓપ્ટિમાઇઝિંગ અને સૂચના સમૂહોનો વધુ સારી રીતે ઉપયોગ કરી શકે છે. રન-ટાઇમ કમ્પાઇલિંગ સ્ટેટિક કમ્પાઇલર માટે શક્ય હોય તેના કરતાં વધુ આક્રમક વર્ચ્યુઅલ ફંક્શન ઇનલાઇનિંગ માટે પરવાનગી આપે છે, કારણ કે જેઆઈટી કમ્પાઇલર વર્ચ્યુઅલ કૉલ્સના તમામ સંભવિત લક્ષ્યો વિશે વધુ માહિતી ધરાવે છે, પછી ભલે તે વિવિધ ગતિશીલ રીતે લોડ કરેલા મોડ્યુલોમાં હોય. હાલમાં ઉપલબ્ધ JVM અમલીકરણને મોટાભાગના મોનોમોર્ફિક, મોટે ભાગે મોનોમોર્ફિક અને ડાયમોર્ફિક કૉલ્સને ઇનલાઇન કરવામાં કોઈ સમસ્યા નથી, અને જાવા 7 માં ઉમેરવામાં આવેલા તાજેતરના ગતિશીલ ઉન્નતીકરણોને આભારી, મેગામોર્ફિક કૉલ્સને પણ ઇનલાઇન કરવા માટે સંશોધન પ્રગતિમાં છે. ઇનલાઇનિંગ લૂપ વેક્ટરાઇઝેશન અથવા લૂપ અનરોલિંગ જેવા વધુ ઓપ્ટિમાઇઝેશન માટે પરવાનગી આપી શકે છે, પરિણામે એકંદર કામગીરીમાં મોટો વધારો થાય છે. જાવામાં, થ્રેડ સિંક્રનાઇઝિંગ ભાષામાં બાંધવામાં આવે છે, તેથી જે. આઈ. ટી. કમ્પાઇલર સંભવિત રીતે, એસ્કેપ વિશ્લેષણ દ્વારા, તાળાઓને દૂર કરી શકે છે, નિષ્કપટ મલ્ટી-થ્રેડેડ કોડની કામગીરીમાં નોંધપાત્ર સુધારો કરી શકે છે. ઉપરાંત, C + + માં કેટલીક કામગીરીની સમસ્યાઓ થાય છેઃ પોઇન્ટરને કોઈપણ સરનામાં તરફ નિર્દેશ કરવાની મંજૂરી આપવાથી પોઇન્ટર અલિયાસિંગની શક્યતાને કારણે ઑપ્ટિમાઇઝ કરવું મુશ્કેલ બની શકે છે. સી + + માં સમાન વર્ગના નમૂનાના વિવિધ ત્વરિત સંકેતોમાંથી પેદા થયેલ કોડ શેર કરવામાં આવતો નથી (જાવામાં ટાઇપ-ઇરેઝ્ડ જેનેરિક્સની જેમ), નમૂનાઓનો વધુ પડતો ઉપયોગ એક્ઝેક્યુટેબલ કોડ કદ (કોડ બ્લોટ) માં નોંધપાત્ર વધારો તરફ દોરી શકે છે. જો કે, કારણ કે કાર્ય નમૂનાઓ આક્રમક રીતે ઇનલાઇન હોય છે, તેઓ કેટલીકવાર કોડનું કદ ઘટાડી શકે છે, પરંતુ વધુ મહત્ત્વની બાબત એ છે કે કમ્પાઇલર દ્વારા વધુ આક્રમક સ્થિર વિશ્લેષણ અને કોડ ઑપ્ટિમાઇઝિંગ માટે પરવાનગી આપે છે, જે ઘણીવાર તેમને બિન-નમૂના કોડ કરતાં વધુ કાર્યક્ષમ બનાવે છે. તેનાથી વિપરીત, જાવા જેનરિક બિન-જનરીકૃત કોડ કરતાં જરૂરી રીતે ઓછા કાર્યક્ષમ હોય છે. કારણ કે પરંપરાગત C + + કમ્પાઇલરમાં, C + + માં કોડ જનરેટ કર્યા પછી અને ઑપ્ટિમાઇઝ કર્યા પછી ડાયનેમિક લિંકિંગ કરવામાં આવે છે, વિવિધ ડાયનેમિક મોડ્યુલોમાં ફેલાયેલા ફંક્શન કૉલ્સને ઇનલાઇન કરી શકાતા નથી. જો કે, આધુનિક સી + + કમ્પાઇલર્સ જેમ કે એમ. એસ. વી. સી. અને ક્લાંગ + એલ. એલ. વી. એમ. લિંક-ટાઇમ-કોડ-જનરેશન વિકલ્પો પ્રદાન કરે છે જે મોડ્યુલોને મધ્યવર્તી બંધારણોમાં સંકલિત કરવાની મંજૂરી આપે છે જે અંતિમ લિંક તબક્કે ઇનલાઇન કરવાની મંજૂરી આપે છે. સત્તાવાર ધોરણ અને ભાષા ભાષા સ્પષ્ટીકરણનો સંદર્ભ C + + ભાષાને ISO/IEC 14882 દ્વારા વ્યાખ્યાયિત કરવામાં આવે છે, જે એક ISO ધોરણ છે, જે ISO/IEC JTC1/SC22/WG21 સમિતિ દ્વારા પ્રકાશિત કરવામાં આવે છે. C + + 17 નો નવીનતમ, પોસ્ટ-સ્ટાન્ડર્ડાઇઝેશન ડ્રાફ્ટ પણ ઉપલબ્ધ છે. સી + + ભાષા સી + + સ્ટાન્ડર્ડ્સ કમિટી તરીકે ઓળખાતી ખુલ્લી સંચાલન સમિતિ દ્વારા વિકસિત થાય છે. આ સમિતિ સી + + બાર્ન સ્ટ્રોસ્ટ્રપના નિર્માતા, સંયોજક હર્બ સુટર અને અન્ય અગ્રણી વ્યક્તિઓની બનેલી છે, જેમાં ઉદ્યોગો અને વપરાશકર્તા જૂથો (એટલે કે, હિસ્સેદારો) ના ઘણા પ્રતિનિધિઓનો સમાવેશ થાય છે. એક ખુલ્લી સમિતિ હોવાથી, કોઈપણ પ્રમાણભૂત અને તકનીકી વિશિષ્ટતાઓના આગામી પ્રકાશનો માટે દરખાસ્તોમાં જોડાવા, ભાગ લેવા અને યોગદાન આપવા માટે સ્વતંત્ર છે. સમિતિ હવે દર થોડા વર્ષે નવું ધોરણ બહાર પાડવાનું લક્ષ્ય ધરાવે છે, જોકે ભૂતકાળમાં કડક સમીક્ષા પ્રક્રિયાઓ અને ચર્ચાઓનો અર્થ નવા ધોરણો (1998,2003 અને 2011) ના પ્રકાશન વચ્ચે લાંબો વિલંબ થાય છે. જાવા ભાષાને જાવા લેંગ્વેજ સ્પષ્ટીકરણ દ્વારા વ્યાખ્યાયિત કરવામાં આવે છે, જે પુસ્તક ઓરેકલ દ્વારા પ્રકાશિત કરવામાં આવ્યું છે. જાવા ભાષા જાવા કોમ્યુનિટી પ્રોસેસ નામની પ્રક્રિયા દ્વારા સતત વિકસિત થાય છે, અને વિશ્વના પ્રોગ્રામિંગ સમુદાયનું પ્રતિનિધિત્વ લોકો અને સંસ્થાઓના જૂથ દ્વારા કરવામાં આવે છે-જાવા કોમ્યુનિટીના સભ્યો-જે જાહેર વિનંતીઓ મોકલીને ભાષાના વિકાસમાં સક્રિય રીતે રોકાયેલા છે-જાવા સ્પષ્ટીકરણ વિનંતીઓ-જે ભાષામાં એકીકૃત થાય તે પહેલાં ઔપચારિક અને જાહેર સમીક્ષાઓ પાસ કરવી આવશ્યક છે. જાવા માટે મજબૂત ધોરણનો અભાવ અને તેના સ્પષ્ટીકરણોની થોડી વધુ અસ્થિર પ્રકૃતિ નવી ભાષા અને પુસ્તકાલયની સુવિધાઓના ઉમેરા સાથે વધુ સ્થિરતા અને રૂઢિચુસ્તતા ઇચ્છતા હિતધારકો દ્વારા સતત ટીકાનો સ્ત્રોત રહી છે. તેનાથી વિપરીત, સી + + સમિતિ પણ સતત ટીકા મેળવે છે, વિપરીત કારણોસર, એટલે કે, ખૂબ કડક અને રૂઢિચુસ્ત હોવા, અને નવી આવૃત્તિઓ પ્રકાશિત કરવામાં ખૂબ લાંબો સમય લે છે. ટ્રેડમાર્ક "C + +" એ કોઈ પણ કંપની અથવા સંસ્થાનો ટ્રેડમાર્ક નથી અને તે કોઈ પણ વ્યક્તિની માલિકીનો નથી. "જાવા" એ ઓરેકલ કોર્પોરેશનનો ટ્રેડમાર્ક છે. સંદર્ભો બાહ્ય કડીઓ C + + અને જાવા ઓબ્જેક્ટ ઓરિએન્ટેડ મેમરી મેનેજમેન્ટ વચ્ચેનો તફાવત જાવા વિ. C + + પ્રકરણ 2: C થી જાવા કેવી રીતે અલગ પડે છે, ડેવિડ ફ્લાનાગન જાવા વિ. C + + સંસાધન વ્યવસ્થાપન સરખામણી દ્વારા ટૂંકમાં જાવાથી પ્રકરણ-જાવા વિ. C પ્રદર્શનના ઉદાહરણો સાથે વ્યાપક પેપર. ફરીથી.-જાવા અને C/C + + હાયપરપોલી વચ્ચેના પ્રદર્શન તફાવતોની ઊંડાણપૂર્વકની ચર્ચા-જાવા અને C + + તુલના જાવા અને C + + જાવા (પ્રોગ્રામિંગ ભાષા) C + +