OVH Cloud OVH Cloud

curiosité

7 réponses
Avatar
no.bcausse.spam
bonjour,

quel est l'occupation memoire d'un objet composé que de variables
"primitives" ex :

class example {
byte a;
char b;
int c;
}

--
bruno Causse
http://perso.wanadoo.fr/othello

7 réponses

Avatar
Gaetan Zoritchak
Causse Bruno wrote:
bonjour,

quel est l'occupation memoire d'un objet composé que de variables
"primitives" ex :

class example {
byte a;
char b;
int c;
}



Je pense que c'est assez difficile de le savoir car cela dépend pas mal
de l'implémentation de la JVM. Ainsi, un boolean ne "consomme"
théoriquement qu'un seul bit mais pour des raisons de performances il
est vraisemblablement stocké sous 32 bits.

Pour connaître la réponse exacte le mieux est de faire un test.

--
Gaetan Zoritchak

Avatar
coco
Causse Bruno wrote:

bonjour,

quel est l'occupation memoire d'un objet composé que de variables
"primitives" ex :

class example {
byte a;
char b;
int c;
}

--
bruno Causse
http://perso.wanadoo.fr/othello


byte : 1 octet
char : 2 octets
int : 4 octets

rien n'est spécifié pour le booléen

--
Philippe

Avatar
Kupee
coco wrote:
byte : 1 octet
char : 2 octets
int : 4 octets

rien n'est spécifié pour le booléen


D'après mes essais sur la jvm sun 1.5 sous Windows c'était
1 octet si je me souviens bien. En tout cas pas 1 bit.
J'avais d'ailleurs posté ici il y a quelque mois a ce sujet.
Et finalement c'est logique c'est une question d'accès a la mémoire
qui va pas aller s'emmerder a tout décaller de 1 bit parce qu'on a
stocké un booleen ... Parce qu'on gagnerait ptet en mémoire mais en
performances ...

Avatar
pasde.bcausse.spam
Kupee wrote:

coco wrote:
byte : 1 octet
char : 2 octets
int : 4 octets

rien n'est spécifié pour le booléen


D'après mes essais sur la jvm sun 1.5 sous Windows c'était
1 octet si je me souviens bien. En tout cas pas 1 bit.
J'avais d'ailleurs posté ici il y a quelque mois a ce sujet.
Et finalement c'est logique c'est une question d'accès a la mémoire
qui va pas aller s'emmerder a tout décaller de 1 bit parce qu'on a
stocké un booleen ... Parce qu'on gagnerait ptet en mémoire mais en
performances ...


la question n'etait pas la :-)

que le byte = 1 octet (si il est isolé mais 1 bit dans le cadre d'un
tableau) le char 2 octets ect je le sais.

c'est quelle taille a object = new example();

--
Bruno Causse
http://perso.wanadoo.fr/othello


Avatar
Black Myst
Causse Bruno wrote:
bonjour,

quel est l'occupation memoire d'un objet composé que de variables
"primitives" ex :

class example {
byte a;
char b;
int c;
}

Il me semble que OptimizeIt donne ce genre d'info. (et probablement

d'autre profiler egalement)

Avatar
James Kanze
Bruno Causse wrote:
Kupee wrote:


coco wrote:



byte : 1 octet
char : 2 octets
int : 4 octets




rien n'est spécifié pour le booléen




D'après mes essais sur la jvm sun 1.5 sous Windows c'était 1
octet si je me souviens bien. En tout cas pas 1 bit. J'avais
d'ailleurs posté ici il y a quelque mois a ce sujet. Et
finalement c'est logique c'est une question d'accès a la
mémoire qui va pas aller s'emmerder a tout décaller de 1 bit
parce qu'on a stocké un booleen ... Parce qu'on gagnerait ptet
en mémoire mais en performances ...



la question n'etait pas la :-)


que le byte = 1 octet (si il est isolé mais 1 bit dans le
cadre d'un tableau) le char 2 octets ect je le sais.


c'est quelle taille a object = new example();


Qui sait ? Ça dépend de l'implémentation, et il n'y a aucun
moyen de le savoir réelement. Typiquement, la JVM va ajouter des
octets de rembourrage, pour que les éléments soient correctement
alignés (au moins qu'il ne les sorte pas selon leur taille),
quelque chose pour sa propre gestion (il faut bien qu'il puisse
en trouver l'objet de classe qui correspond), et peut-être aussi
quelque chose pour s'assurer l'alignement global, mettons dans
le cas où on en dérive. Disons que dans la pratique, 12 octets
me semble un minimum, et quelque chose entre 16 et 24 ne
m'étonnera pas.

--
James Kanze home: www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34



Avatar
Kupee
Bruno Causse wrote:
rien n'est spécifié pour le booléen


D'après mes essais sur la jvm sun 1.5 sous Windows c'était
1 octet si je me souviens bien. En tout cas pas 1 bit.
J'avais d'ailleurs posté ici il y a quelque mois a ce sujet.
Et finalement c'est logique c'est une question d'accès a la mémoire
qui va pas aller s'emmerder a tout décaller de 1 bit parce qu'on a
stocké un booleen ... Parce qu'on gagnerait ptet en mémoire mais en
performances ...



la question n'etait pas la :-)

que le byte = 1 octet (si il est isolé mais 1 bit dans le cadre d'un
tableau) le char 2 octets ect je le sais.

c'est quelle taille a object = new example();


Euh je répondais a coco et il parlait du booleen lui ...