Frage

Zur Einstellung des Heap-Kapazität zur Seite, gibt es Möglichkeiten jenseits Integer.MAX_VALUE Einschränkungen in Java zu gehen?

Beispiele sind:

  1. Kollektionen selbst Integer.MAX_VALUE begrenzen.
  2. String / String sich Integer.MAX_VALUE begrenzen.
War es hilfreich?

Lösung

Wenn Sie eine riesige Sammlung Sie alle Arten von praktischen Grenzen treffen werden, bevor Sie jemals haben 2 31 - 1 Artikel drin. Eine Sammlung mit einer Million Artikel in es wird ziemlich sperrig sein, geschweige denn eine mit mehr als tausend mal mehr als das lassen.

In ähnlicher Weise ein Stringbuilder kann ein String bauen, die 2 GB groß ist, bevor es die MAX_VALUE Grenze trifft, die mehr als ausreichend für jeden praktischen Zweck ist.

Wenn Sie wirklich glauben, dass Sie diese Grenzen schlagen könnten Ihre Anwendung sein sollte Ihre Daten in einer anderen Art und Weise zu speichern, wahrscheinlich in einer Datenbank.

Andere Tipps

Mit einem langen? Funktioniert bei mir.

Edit: Ah, Klärung der Frage. Cool. Meine neue und verbesserte Antwort:

Mit einem Paging-Algorithmus.

Zufälligerweise etwas vor kurzem für eine andere Frage ( Binary Suche in einer sortierten (memory-mapped?) Datei in java ) , Schlag ich um die int Parameter zu erhalten, einen Paging-Algorithmus nach oben in die java.nio.MappedByteBuffer API.

Sie können Ihre eigenen Sammlungen erstellen, die eine lange Größe haben (), basierend auf den Quellcode für die Sammlungen. Um größere Arrays von Gegenständen zum Beispiel haben, können Sie ein Array von Arrays (und stich diese zusammen)

Dieser Ansatz fast 2 ^ 62 Elemente erlaubt.

Array Indizes sind durch Integer.MAX_VALUE beschränkt, nicht die physische Größe des Arrays.

Deshalb ist die maximale Größe eines Arrays der Größe des Array-Typ verknüpft ist.

byte = 1 byte => max  2 Gb data
char = 2 byte => max  4 Gb data
int  = 4 byte => max  8 Gb data
long = 8 byte => max 16 Gb data

Wörterbücher sind eine andere Geschichte, weil sie oft Techniken wie Eimer oder eine interne Datenlayout als Baum verwenden. Daher nicht diese „Grenzen“ in der Regel anwenden oder Sie müssen noch mehr Daten, um die Grenze zu erreichen.

Kurz: Integer.MAX_VALUE ist nicht wirklich eine Grenze, weil Sie viel Speicher benötigen die Grenze tatsächlich zu erreichen. Wenn Sie jemals diese Grenze erreichen, sollten Sie vielleicht Ihren Algorithmus zu verbessern und / oder Daten-Layout denken:)

Ja, mit BigInteger Klasse.

Ein Speicher-Upgrade erforderlich ist ..:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top