Hallo
Ik heb, voor de fun, een boom datastructuur gemaakt, die zich afspeelt in een bestand on disk.
Elke node bevat de byte positie in het bestand van zijn parent, van zijn linkse node, van zijn rechtste node, enz...
Ik heb wat zaken geïmplementeerd zoals zoeken, traversel, balancing, .... bij wijze van oefening.
Om de snelheid (gevoelig) op te drijven, heeft elke node, naast het byte adres van zijn gerelateerde nodes, ook een object referentie naar die nodes, die dus eigenlijk als cache werkt.
Het probleem is nu geheugengebruik. Als je een in-order-traversel doet, heb je eigenlijk gewoon elke node in memory en niks wordt opgeruimd door de GC omdat je een ref. hebt naar de root node.
Ik zoek naar manieren om het geheugengebruik omlaag te helpen.
Waaraan ik zelf denk:
- compileren als 32 bits app: zo zijn object referenties maar 32 bit ipv 64 bit
- op bepaalde momenten zelf doorhebben dat je app teveel ram gebruikt, en dan ergens een node referentie doorknippen om vervolgens manueel de GC aan te roepen (...)
- anders omspringen met het bestand op de harde schijf, zodanig dat lezen veel efficiënter gaat en mijn object referenties wegkunnen
Wellicht is vooral de laatste optie een goed idee. Zijn er hier mensen die nog andere ideeën hebben?
Ik heb, voor de fun, een boom datastructuur gemaakt, die zich afspeelt in een bestand on disk.
Elke node bevat de byte positie in het bestand van zijn parent, van zijn linkse node, van zijn rechtste node, enz...
Ik heb wat zaken geïmplementeerd zoals zoeken, traversel, balancing, .... bij wijze van oefening.
Om de snelheid (gevoelig) op te drijven, heeft elke node, naast het byte adres van zijn gerelateerde nodes, ook een object referentie naar die nodes, die dus eigenlijk als cache werkt.
Het probleem is nu geheugengebruik. Als je een in-order-traversel doet, heb je eigenlijk gewoon elke node in memory en niks wordt opgeruimd door de GC omdat je een ref. hebt naar de root node.
Ik zoek naar manieren om het geheugengebruik omlaag te helpen.
Waaraan ik zelf denk:
- compileren als 32 bits app: zo zijn object referenties maar 32 bit ipv 64 bit
- op bepaalde momenten zelf doorhebben dat je app teveel ram gebruikt, en dan ergens een node referentie doorknippen om vervolgens manueel de GC aan te roepen (...)
- anders omspringen met het bestand op de harde schijf, zodanig dat lezen veel efficiënter gaat en mijn object referenties wegkunnen
Wellicht is vooral de laatste optie een goed idee. Zijn er hier mensen die nog andere ideeën hebben?