Door Arjen van der Meijden

Lead Developer

Praktisch geheugenbeheer in Java bij Tweakers.net

Tweakers.net en Java

Tweakers.net heeft in de afgelopen maanden hard gewerkt aan het Tweakers 7.0-project. Een belangrijke doelstelling van dit project is het verbeteren van de specificatiefilters van de Pricewatch, die we ook op lijsten met nieuwsberichten, reviews, video's, enzovoort willen toepassen. Ook die content kan straks dus door de gebruiker gefilterd worden.

Onder meer om deze doelstelling te realiseren kozen we voor een uitbreiding van onze bestaande Pricewatch Engine. Een belangrijke taak van die engine is het snel aanleveren van gefilterde en gesorteerde informatie, inclusief statistieken, nodig om te bepalen welke keuzeopties bij de Pricewatch-lijsten worden aangeboden.

Toen we in 2009 de eerste versie van de engine ontwikkelden, ging het al om meer dan 150.000 producten, elk met een lijst specificaties. Het was al meteen duidelijk dat een php-applicatie niet snel genoeg was om de gegevens praktisch te verwerken. Daarom kozen we destijds voor een Java-applicatie. De door de gebruiker gekozen filters worden in php-code vertaald en doorgestuurd naar de Java-applicatie, die vervolgens een brok hapklare informatie aan de php-code teruggeeft.

Voor optimale prestaties laadt de engine alle gegevens in het ram en ook de bijbehorende zoekdatabase bevindt zich in het werkgeheugen. Alle gegevens samen nemen ruim 600MB in beslag.

Voor het Tweakers 7.0-project willen we echter naast de producten ook de nieuwsartikelen, reviews en andere content toevoegen. In onze MySQL-database nemen die gegevens al meer dan twee gigabyte in beslag en daarbij komt nog allerlei meta-informatie, zoals aanvullende relaties en zoektabellen. De hoeveelheid data neemt dus fors toe.

In dit artikel beschrijven we hoe we erin zijn geslaagd om het geheugengebruik binnen de perken te houden. De hier genoemde tips en trucs zijn primair gericht op Java, maar een groot deel van de ideeën is ook in andere talen toe te passen. Objecten worden immers in elke objectgeoriënteerde taal volgens vergelijkbare principes opgezet en ook datastructuren hebben doorgaans veel overeenkomsten.

Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee