7
votes

Lorsque nous avons des cours d'emballage, pourquoi les primitives sont soutenues?

Nous avons des cours d'enveloppe en Java comme intergiring, float .. pourquoi il soutient toujours des primitives qui arrête Java pour être une langue entièrement orientée objet?


0 commentaires

3 Réponses :


3
votes

Parce que les primitives sont plus légères et plus efficaces en termes de traitement de la mémoire et de la CPU.


2 commentaires

Et nous devons considérer cela tout en travaillant avec des appareils mobiles / portables.


Mais veuillez également déterminer s'il a un effet de 10% ou de 0,00001% dans une situation particulière. Optimiser uniquement s'il importe.



2
votes

Un mot: performance.

Les types d'emballage sont également immuables, ce qui le rend supplémentaire si on voulait utiliser un pour un compteur de boucle, par exemple.

Le JVM a également opcodes pour faire directement des arithmétiques sur les primitives.


0 commentaires

8
votes

wrappers, être des objets, placez-vous dans le tas. Les primitives ne sont que des "valeurs" et vont dans la pile. Ceci est plus efficace, car pour les primitives enveloppées dans le tas dont vous avez besoin (au moins) à la fois la valeur (qui se trouve dans la pile) et la référence à l'objet wrapper.

Si ce gain de performance compte du tout dépend de ce que vous faites. Pour un travail numérique lourd, définitivement, mais pour 99% des choses là-bas, c'est plutôt une contrariété. D'une part, vous ne pouvez pas stocker les primitives dans une collection de toute façon; ils sont autoboxés. Donc, la seule façon de stocker beaucoup d'entre eux est d'utiliser des tableaux simples, ce qui peut à son tour entraîner d'autres types d'inefficacités (si vous devez les redimensionner, par exemple).


2 commentaires

Y a-t-il d'autres raisons que de stockage?


Je ne suis pas sûr à 100% sur la façon dont les internes fonctionnent ici, mais je crois que pour calculer quoi que ce soit avec les chiffres, les machines doivent d'abord extraire les valeurs des wrappers (nonboxing), qui prend au moins quelques travaux. Mais l'optimisation JIT Runtime joue probablement ses astuces ici. La différence peut donc être assez négligeable dans la pratique, même dans des programmes numériquement intensifs. Cela devrait être mesuré pour être sûr.