Dimensiunile tipurilor de date în java - overflow stack în rusă

În cartea lui P. Nouton, G. Schildt "Java 2. Cel mai complet ghid" spune următoarele despre dimensiunile tipurilor de date:

În altă parte în această carte se spune:

Se poate părea că folosirea unui scurt sau a unui byte salvează memoria, dar nu există nici o garanție că Java nu va extinde cumva aceste tipuri intern la int. Rețineți că tipul definește comportamentul, nu dimensiunea. (Singura excepție - matrici, în cazul în care tipul de octet se asigură că doar un singur octet pentru fiecare element de matrice, în timp ce pe termen scurt, va dura doi octeți, și int - patru octeți).







În legătură cu cele de mai sus am o întrebare: ce se înțelege prin comportamentul variabilelor de tip întreg, și dacă sunt sau nu ca pentru variabilele care nu sunt declarate ca matrice, dimensiunea nu este specificat?

presetat 3 ianuarie '13 la 16:58

Cred că, în acest caz, vom intra în conflict etern: vrem să ne gândim la tipurile de comportament ca (la nivelul logicii), dar fiind resurse trebuie să ne gândim, de asemenea, cu privire la cantitatea de memorie alocată sever limitată. Ca rezultat, se nasc opțiuni de compromis și abordări de compromis pentru a le gândi.

De exemplu, în vremurile lui C, conform standardului, au existat numai relații de tip int int <= int <= long int, все остальное являлось спецификой конкретной платформы. Это весьма шаткое положение вещей, которое было учтено в дизайне Java.







Standardul limbajului Java specifică clar valorile extreme pentru tipuri, adică rata minimă de biți la nivel fizic. De exemplu, lungul ar trebui să funcționeze cu valori pe 64 de biți, chiar dacă platforma hardware de bază nu o face.

Oricine poate scrie propria "implementare" a limbajului JVM sau a limbajului Java, dar dacă rezultatul nu corespunde specificației, numiți "Java" nu mai este posibil, în caietul de sarcini întreaga esență a tehnologiei. Puteți lua în considerare problemele cu astfel de "implementări", dar este important să vă distanțați de ele, deoarece acestea nu sunt probleme ale platformei Java, ci probleme de un fel de soluție terță parte.

Poate aceasta să fie folosită cumva pentru a determina performanța reală a fierului? De exemplu, pe o mașină de 32 de biți lungă, relativ vorbind, fizic va fi reprezentată de două intes, adică codul de lucru cu lungi va fi mai lent. Pe de altă parte, la trecerea la programul de sistem pe 64 de biți în sine încet începe (până la 20% pentru SPARC, 0-15% pe AMD64 și EM64T), cel puțin, din cauza crescut de la 4 la 8 octeți dimensiune indicator. Cu alte cuvinte, totul este complicat.

Într-un caz simplu, este mai adecvat să țineți cont de faptul că dimensiunea unui tip primitiv este comportament (garanția pentru valori de valori și faptul că logica de a lucra cu ele nu se descompune între platforme). Dar amintiți-vă că, în analiza finală, este vorba despre un compromis inginerie încrustat în interiorul standardului, cu care, în cazuri deosebit de dificile, este necesar să se facă ceva.

răspuns dat la 2 februarie 16 la 15:38

În ceea ce privește a doua întrebare: trebuie să știți că există mai multe implementări ale mașinii virtuale (se numește JVM abreviat) de la diferite companii. Deci, în diferite JVM atunci când executați codul:

variabila i poate fi de 4 sau 8 octeți. Și depinde de punerea în aplicare a JVM.

IMHO și experiența mea sugerează - în timp ce nu scrieți programe care funcționează cu milioane de înregistrări, nu ar trebui să vă deranjez cu atât de mult. Este mai bine să stăpânești programarea în Java ca un întreg. Când vă apropiați de linia în care programele sunt mari, veți ști deja ce să faceți cu ea și cum să codificați codul.

răspunsul dat 4 ianuarie '13 la 7:14







Articole similare

Trimiteți-le prietenilor: