Tengo que almacenar millones de pares dobles X/Y para referencia en mi programa Java. Me gustaría mantener el consumo de memoria lo más bajo posible, así como el número de referencias de objetos. Así que después de pensar un poco decidí que sostiene los dos puntos en una pequeña matriz doble podría ser una buena idea, es la configuración sea como así:¿Clase de Java frente al tamaño de la memoria de la matriz?
double[] node = new double[2];
node[0] = x;
node[1] = y;
que pensé utilizando la matriz impediría que la relación entre la clase y mi X y variables Y utilizan en una clase, de la siguiente manera:
class Node {
public double x, y;
}
sin embargo, después de leer en el modo en que se almacenan los campos públicos en clases, me di cuenta de que los campos no pueden en realidad ser estructurados como puntero como las estructuras, tal vez la JVM se simplemente almacenando estos valores en la memoria contigua y sabe cómo encontrarlos sin una dirección, haciendo así la representación de clase de mi punto más pequeño que el conjunto.
Entonces, la pregunta es, ¿qué tiene una huella de memoria más pequeña? ¿Y por qué?
Estoy particularmente interesado en si los campos de clase usan o no un puntero y, por lo tanto, tienen una sobrecarga de 32 bits o no.
Actualmente ejecuto Java 1.7 SE en x64 en Mac OS X. Ahora supongo que una matriz 2D gigante eliminaría por completo la referencia de objeto necesaria para cada Nodo, ¿sería la forma más conservadora de memoria para llevar? –
si en 2D quiere decir double [2] [n] o double [n] [2], eso también generará referencias a objetos. ya que las matrices en java son verdaderamente matrices de matrices en este caso –
(Usted está * camino * sobreimpulsando esto, pero ...) La menor huella de memoria sería una matriz 1-D donde se calculan los índices explícitamente. Las matrices 2D en Java son solo una matriz de punteros a arrays 1D. –