Java N'est nulle variable nécessitent de l'espace dans la mémoire
class CheckStore {
private String displayText;
private boolean state;
private String meaningfulText;
private URL url;
public CheckStore(String text, boolean state) {
this.displayText = text;
this.state = state;
}
:
:
}
Que je suis l'initialisation de seulement deux variables (displayText
et state
) dans le constructeur, le reste deux variables (meaningfulText
et url
qui aura de la valeur null
) aura besoin d'espace dans la mémoire pour stocker des null
valeur.
T1. Je pense qu'ils auront besoin d'espace. Si elles le veulent, alors la quantité de mémoire un null
valeur prend de la mémoire (comme int
prend 4 octets).
T2. De combien d'espace d'une chaîne de caractères dans la mémoire. Je suppose que cela dépendra de la longueur de la chaîne. Alors, comment beaucoup d'espace, une chaîne de combien de longueur?
Vous devez vous connecter pour publier un commentaire.
En Java,
null
est juste une valeur de référence (qui est en fait une restriction de pointeur) peuvent avoir. Cela signifie que la référence se rapporte à rien. Dans ce cas, vous consomment toujours de l'espace pour la référence. C'est 4 octets sur les systèmes 32 bits ou 8 octets sur les systèmes 64 bits. Cependant, vous n'êtes pas consommer tout l'espace de la classe que les points de référence jusqu'à ce que vous avez réellement attribuer à une instance de cette classe de point de référence à l'.Edit: Aussi loin que la Chaîne de caractères, un
String
en Java tient sur 16 bits (2 octets) pour chaque caractère, et une petite quantité de la comptabilité des frais généraux, ce qui est probablement sans-papiers et la mise en œuvre spécifique.ClassLoader
bien sûr) et ne doivent donc pas être considérées comme faisant partie de la mémoire demandes deString
instances.Je voudrais ajouter:
il y a seulement une valeur null dans la JVM. N'importe comment beaucoup de variables se rapportent à la valeur null.
Objet s = (String)null;
Objet i = (Integer)null;
Système.out.println(s == i);//true
Object
, non pas parce quenull instanceof Object
est faux, mais parce que la valeur null est une référence. 3. Il y a autant de valeurs null dans une JVM comme ont été créés par (a) laaconst_null
opcode (b) membre initialisations de variables (c), etc. La déclaration n'a pas de sens.null
est toujours égal à lui-même, mais cela ne signifie pas quelque chose à propos de l'identité.Vous pouvez utiliser jol pour obtenir la mise en page de cette classe. (Attention cependant, vous pourriez avoir besoin d'une compréhension plus profonde de la mécanique derrière elle, ne pas aveuglément confiance à la suite et être conscient que c'est juste une estimation pour le VM (1.7.0_76 x64 win dans mon cas:):
J'utilise la version CLI je suppose que la bonne méthode serait d'inclure la librairie dans votre projet, mais de toute façon, il semble que cela fonctionne de cette façon:
et la même chose avec automatique de comprimé oups off:
Ce ne sont que les mises en page pour l'objet lui-même si vos champs sont nuls, il ne sera pas le point à plusieurs objets, sinon, vous avez à regarder les types de cibles (
URL
etString
) ainsi. (Et si vous avez plusieurs instances de tous cela dépend de si vous utilisez le même plusieurs fois ou différents). Un champ nul ne peut être ignorée dans la mémoire, car il faudrait que l'instance soit redimensionnée lorsqu'elle est attribuée. De sorte que les champs sont pré-construits, ils ne font pas référence à des objets alloués quelque part d'autre sur le tas.NB: vous obtenez un peu plus de détails si vous implémentez un constructeur par défaut, mais le dimensionnement dans ce cas précis serait le même. Dans le cas où vous vous demandez où la séquence et le remplissage de champs est à venir, vous pouvez vérifier cet article - (fondamentalement, il aligne les objets sur 8 octets, sortes de champs par la taille, les groupes de même type, les références dernier. Les champs de super-types, sont d'abord de 4 octets alignés.)
Null 0. Il est généralement un endroit null définis dans la mémoire. Chaque fois que l'un des points à l'aide d'un langage de programmation. Tout points à la même place. Cela signifie une seule 4 octets de mémoire est consommée pour les NULS. Alors, quelles que soient les points à ne pas en consommer plus de mémoire. Définition de la valeur NULL est spécifique à une langue, mais la définition qu'il void *ptr=0; il est commun dans le C et le C++. JAVA doit avoir défini de la même manière. Il n'est pas possible de rien de l'ofc. Vous devez pointer vers quelque chose. Mais nous définir d'un commun rien et tout ce qui points de il consomme seulement que l'espace.