Devo memorizzare milioni di doppie coppie X/Y come riferimento nel mio programma Java. Mi piacerebbe mantenere il consumo di memoria il più basso possibile e il numero di riferimenti a oggetti. Così, dopo qualche riflessione ho deciso tenendo i due punti in un piccolo doppio array potrebbe essere una buona idea, è di impostazione appare in questo modo:Dimensioni della memoria Java della classe vs della memoria?
double[] node = new double[2];
node[0] = x;
node[1] = y;
Ho calcolato utilizzando la matrice impedirebbe il legame tra la classe e il mio X e variabili Y utilizzate in una classe, come segue:
class Node {
public double x, y;
}
Tuttavia dopo aver letto sul modo in cui i campi pubblici in classi sono memorizzate, mi sono reso conto che i campi non possono effettivamente essere strutturati come puntatore come le strutture, forse la JVM è semplicemente memorizzando questi valori nella memoria contigua e sa come trovarli senza un indirizzo, rendendo così la rappresentazione di classe del mio punto più piccolo dell'array.
Quindi la domanda è, che ha un minore ingombro di memoria? E perché?
Sono particolarmente interessato al fatto che i campi delle classi utilizzino o meno un puntatore e quindi abbiano un overhead a 32 bit oppure no.
Attualmente in esecuzione Java 1.7 SE in x64 su Mac OS X. Ora sto assumendo che un gigantesco array 2D eliminerebbe del tutto il riferimento all'oggetto necessario per ogni nodo, quindi sarebbe di gran lunga il modo più conservativo di memoria per andare? –
se per 2D si intende doppio [2] [n] o doppio [n] [2], che porterà anche a riferimenti di oggetti. dato che gli array in java sono veramente array di array in questo caso –
(Sei * modo * di sovra-ottimizzare questo, ma ...) Il minimo ingombro di memoria sarebbe un array 1-D in cui si calcolano gli indici in modo esplicito. Gli array 2D in Java sono solo una serie di puntatori agli array 1D. –