Pregunta

Dejando a un lado la capacidad de la pila, hay maneras de ir más allá de las limitaciones Integer.MAX_VALUE en Java?

Ejemplos son:

  1. Colecciones limitan a Integer.MAX_VALUE.
  2. StringBuilder / StringBuffer se limitan a Integer.MAX_VALUE.
¿Fue útil?

Solución

Si usted tiene una gran colección vas a golpear a todo tipo de límites prácticos antes de que usted tiene 2 31 - 1 artículos en él. Una colección con un millón de artículos en que va a ser muy difícil de manejar, y mucho menos uno con más de mil veces más que eso.

Del mismo modo, un StringBuilder puede construir una cadena que es de 2 GB de tamaño antes de llegar al límite de MAX_VALUE que es más que suficiente para cualquier propósito práctico.

Si realmente piensa que podría estar afectando a estos límites de su aplicación se debe almacenar sus datos de una manera diferente, probablemente en una base de datos.

Otros consejos

Con un tiempo? Que funciona para mí.

Editar: Ah, la aclaración de la cuestión. Bueno. Mi nueva y mejorada respuesta:

Con un algoritmo de paginación.

Por coincidencia, algo recientemente para otra pregunta ( la búsqueda binaria en un archivo ordenado (correlacionada con la memoria?) en java ) , que nos prepararon rápidamente un algoritmo de búsqueda de moverse por los int en parámetros la API java.nio.MappedByteBuffer.

Usted puede crear sus propias colecciones que tienen un tamaño de largo () basado en el código fuente de esas colecciones. Tener más grandes conjuntos de objetos, por ejemplo, puede tener una matriz de matrices (y unir estos juntos)

Este enfoque permitirá casi 2 ^ 62 elementos.

Array índices están limitados por Integer.MAX_VALUE, no el tamaño físico de la matriz.

Por lo tanto el tamaño máximo de una matriz está ligada al tamaño del tipo array.

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

Los diccionarios son una historia diferente ya que a menudo utilizan técnicas como cubos o una disposición interna de datos en forma de árbol. Por lo tanto estos "límites" normalmente te aplicas o tendrá aún más datos para alcanzar el límite.

corta: Integer.MAX_VALUE no es realmente un límite porque se necesita mucha memoria para alcanzar realmente el límite. Si alguna vez llegar a este límite es posible que desee pensar en mejorar su algoritmo y / o técnica de diseño:)

Sí, la clase BigInteger.

Es necesaria una actualización de memoria ..:)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top