Cube world RAM optimalizations

Like in topic - does anyone have ideas how to optimize cube world game RAM usage?

Currently I am using this system (<> = reference to children in parent and reference to parent in children, > = only reference to children in parent):

World<>Chunk>Entity (one instance per type)>Model (one instance per mesh and texture)

I am rendering world with view radius 16 (33X33 chunks). Each chunk have 16X256X16 size, but only 16X80X16 is filled.

This system have one big issue - Tile don’t “know” its parent and location.

RAM usage: 520 mb

Previously I was using this system:

World<>Chunk<>Tile (store x, y, z, chunk and entity references)>Entity (one instance per type)>Model (one instance per mesh and texture)

RAM usage (map with the same size): 1,5 gb

I dont see why entity would need to know its parent.
To know more about your ram usage, you should post the used fields inside chunk and entity.4

And why does a entity have an model?

Hmm, what? ;V

If each tile position is only referencing the Model to draw itself then you’re basically just holding a (1625616)(3333) references. In 64bit JVM that’s usually 64bits per reference so you’d end up with ~544Mb of references for each tile position. Looks about right to me.

The other method has 3 ints and 2 references (assumedly) so you’d end up with ~1900Mb of data. ((1625616)(4+4+4+8+8)(3333)) / (10241024)

I don’t know of this cube world and I’m just throwing around numbers here. However, you state that it’s a problem that each tile doesn’t know its position and I wonder if that is a non-issue. Since the World knows their position that should be enough.

Mostly to make code more readable, flexible and expandable. RAM is not too big problem at objects/models level.

About memory usage, even 64-bit Java use 32-bit references by default to save memory. As far as I know every object in Java must have multiply of 8 size.

Data stored in each object:
World - HashMap<Point, Chunk>
Chunk - 2 references (to the world and location), Entity[16][256][16], boolean repaint, int listID
Tile (only in more RAM-intensive version) - 2 references (to the entity and chunk), 2 bytes (xz and y)

RAM usage caused by other objects is very small.