web-dev-qa-db-fra.com

Entier vs int: en ce qui concerne la mémoire

Je me demandais s'il y avait une différence dans la mémoire occupée par Integer n, et int n.

Je sais int n occupe normalement 4 octets, que diriez-vous Integer n

38
TimeToCodeTheRoad

En général, la mémoire de tas utilisée par un objet Java dans Hotspot se compose de:

  • un en-tête d'objet, composé de quelques octets d'informations "Housekeeping";
  • mémoire pour champs primitifs , selon leur taille (int n-> 32 bits)
  • mémoire pour champs de référence (4 octets chacun) (Entier n -> 32 bits)
  • padding: potentiellement quelques octets inutilisés "gaspillés" après les données de l'objet, pour faire démarrer chaque objet à une adresse qui est un multiple pratique d'octets et réduire le nombre de bits requis pour représenter un pointeur vers un objet.

selon la suggestion de Mark Peters, je voudrais ajouter le lien ci-dessous http://www.javamex.com/tutorials/memory/object_memory_usage.shtml

42
Noufal Panolan

Un objet Entier dans Java occupe 16 octets.

Je ne sais pas si l'exécution d'une JVM 64 vs 32 bits fait une différence. Pour types primitifs, cela n'a pas d'importance . Mais je ne peux pas dire avec certitude comment l'empreinte mémoire d'un objet change (le cas échéant) sous un système 64 bits.

Vous pouvez le tester par vous-même ici:

Astuce Java 130: Connaissez-vous la taille de vos données?

8
Craig Otis

Pour int: 4 octets utilisés par élément sans wrappers et 16 par élément avec wrapper.

Un double encapsulé rapporte 24 octets par élément, avec la valeur réelle double 64 bits (8 octets).

Pour plus de détails ici

3
java_mouse