2017-07-15 1 views
-1

Je me demande comment instancier un tableau long [] en Java avec la plus grande longueur possible. Si c'est trop grand, j'obtiens une erreur de mémoire. J'ai besoin que ce tableau soit aussi grand que possible sans dépasser la limite dépendante de la plateforme. Comment cela peut-il être fait? La limite sur mon ordinateur semble être environ 85000000 indices, mais il peut être moins, ou plus, sur d'autres ordinateurs.Instanciation d'un tableau java avec une taille maximale

+0

depuis longtemps: class java.lang.Long: min = -9,223,372,036,854,775,808, max = 9,223,372,036,854,775,807 –

+2

Comment cela pourrait-il être utile? –

+0

Et vous en avez besoin pour ...? –

Répondre

1

En Java, la récupération de place s'exécutera dans un intervalle imprévisible. Ainsi, la taille de la mémoire de segment libre augmentera ou diminuera en fonction de l'exécution. Donc, son très improbable que vous pouvez obtenir les octets exacts de mémoire que vous pouvez utiliser pour faire un tableau long, mais vous pouvez essayer la classe d'exécution pour obtenir des détails de mémoire utilisés pour JVM:
Runtime.getRuntime().totalMemory(),
Runtime.getRuntime().freeMemory(),
Runtime.getRuntime().maxMemory()

+0

Suis-je correct que Runtime.getRuntime(). FreeMemory()/8; devrait me donner la longueur maximale approximative de la matrice? Si c'est le cas, cela me donne une longueur d'environ 30 millions, beaucoup moins que les 85 millions auxquels je m'attendrais. –

+0

Oui, mais ce n'est pas le maximum qui peut être, car le tas commence avec la taille spécifiée avec le commutateur -Xms et peut atteindre la taille spécifiée avec -Xmx. freeMemory() vous donne seulement de la mémoire libre dans la taille de tas courante. – beannayak

0

indepent de la question, comment comprendre, ce que l'espace maximum utilisable pourrait être: Si vous avez vraiment besoin que désire ardemment dans ce tableau, vous pouvez aussi penser à utiliser java.nio.LongBuffer. Puisque vous travaillez assez près de la machine, l'utiliser est assez similaire au travail en C avec un tableau C mais dans un langage sûr.