1. #1

    Registered
    19/06/09
    Location
    Antwerpen
    Posts
    117
    iTrader
    0
    Mentioned
    0 Post(s)

    Question java optimizaton

    Ik ben bezig met een klein projectje met een vriend en we zijn op een stadium gekomen dat een deel af is en dat we iets werkend hebben, nog niet het complete programma, maar het heeft bruikbare functionaliteit dat solo al af zou kunnen zijn maar gewoon te beperkt. Willen we nu starten met dinge efficienter te maken. Zijn er van die mainstream en ook geavanceerdere tricks en tips waar ge u code best aan kunt laten voldoen om het effiencient te houden? Compileer tijd te verminderen, minder cpu usage.
    no votes  

  2. #2
    passero's Avatar
    Registered
    28/11/03
    Location
    Drongen
    Posts
    6,665
    iTrader
    5 (100%)
    Mentioned
    0 Post(s)
    Reputation
    6/28
    Ik gebruik VisualVM wat een heel goeie tool is om hotspots te vinden. Je moet wel wat plugins downloaden eerst.

    Je kan terwijl je het programma test, de profiler laten lopen op CPU. Dan kan je een filter instellen op jouw packages en zien hoelang elke methode in totaal de CPU nodig heeft. Je kan ook zien hoeveel keer elke methode aangeroepen is. Op die manier kan je de gemiddelde CPU time/call berekenen en kijken om de methodes te optimaliseren die het meest aangeroepen worden.

    Als je die gebruikt moet je wel altijd naar de CPU (self time) kijken. Dat is de tijd dat de methode de CPU gebruikt.

    Ik gebruik dit altijd bij klanten om performantie problemen op te sporen en het heeft me nog nooit in de steek gelaten. De interpretatie van de gegevens is wel niet altijd evident maar als het op eigen geschreven code is moet het wel een stuk gemakkelijker gaan.
    no votes  

  3. #3
    Jerre Muesli's Avatar
    Registered
    08/09/02
    Location
    -
    Posts
    2,044
    iTrader
    9 (100%)
    Mentioned
    0 Post(s)
    Reputation
    3/6
    Objecten compact houden, caching gebruiken, Stringbuilders, .. en vooral slim programmeren (geen domme dingen in loopjes doen).
    Compile time maakt geen zak uit. Dat heeft geen directe impact op uw programma.
    no votes  

  4. #4

    Registered
    19/06/09
    Location
    Antwerpen
    Posts
    117
    iTrader
    0
    Mentioned
    0 Post(s)
    visualvm ziet er inderdaad wel interessant uit, zeker nuttig en ga ik gebruiken, bedankt daarvoor.

    Op het moment lijkt het dat er nog een domme/onnodige functies, classes en ongebruikte variabelen zijn.
    Er is een moment dat ik een mail stuur dat het programma meer tijd nodig heeft dan ik geduld heb. Is het mogelijk om de interface verder te laten lopen op de ene core en het zenden van de mail op een andere core? Dat de gebruiker geen lag ondervind?
    no votes  

  5. #5
    passero's Avatar
    Registered
    28/11/03
    Location
    Drongen
    Posts
    6,665
    iTrader
    5 (100%)
    Mentioned
    0 Post(s)
    Reputation
    6/28
    Normaal doe je dat door multithreading. Heeft niet per se iets met cores te maken. Je moet gewoon een apparte thread maken die de mail verstuurd en dan kan het programma gewoon verder.
    no votes  

  6. #6

    Registered
    19/06/09
    Location
    Antwerpen
    Posts
    117
    iTrader
    0
    Mentioned
    0 Post(s)
    ik heb voor mijn mail een apparte thread gemaakt en werkt nu inderdaad zonder lag. Ik dacht daar al aan mor overschachte de nodige code een beetje. Java zal zijn argumenten niet altijd by reference doorgeven, is er een manier om dit te omzeilen dat er toch minder geheugen word gebruikt zonder de code onoverzichtelijk en slordig te maken?
    no votes  

  7. #7
    passero's Avatar
    Registered
    28/11/03
    Location
    Drongen
    Posts
    6,665
    iTrader
    5 (100%)
    Mentioned
    0 Post(s)
    Reputation
    6/28
    Java geeft ALTIJD objecten door als referentie tenzij het primitieve types zijn...
    Dus daar kunt ge weinig aan doen dus dat is al optimaal voor u geheugen gebruik.

    VisualVM kan u trouwens ook cijfers geven van hoeveel instances ge hebt van iedere klasse en hoeveel bytes die in totaal innemen. Ook handig voor tuning.
    no votes  

  8. #8
    NoGo's Avatar
    Registered
    22/08/11
    Location
    Nederland
    Posts
    1,529
    iTrader
    123 (100%)
    Mentioned
    1 Post(s)
    Reputation
    0/10
    Quote Originally Posted by passero View Post
    This quote is hidden because you are ignoring this member. Show
    Java geeft ALTIJD objecten door als referentie tenzij het primitieve types zijn...
    Dus daar kunt ge weinig aan doen dus dat is al optimaal voor u geheugen gebruik.

    VisualVM kan u trouwens ook cijfers geven van hoeveel instances ge hebt van iedere klasse en hoeveel bytes die in totaal innemen. Ook handig voor tuning.
    Java is toch altijd pass by value? De referentie van het object wordt by value doorgegeven?
    0xF00F
    no votes  

  9. #9
    Jerre Muesli's Avatar
    Registered
    08/09/02
    Location
    -
    Posts
    2,044
    iTrader
    9 (100%)
    Mentioned
    0 Post(s)
    Reputation
    3/6
    Java is altijd by value. Int geval van objecten is de value gewoon de reference.
    no votes  

  10. #10
    ultddave's Avatar
    Registered
    13/08/12
    Location
    Belgiƫ > Limburg
    Posts
    247
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/0
    Inderdaad, het is zoals de twee posters hierboven zeggen; voorbeelden en extra uitleg kan je onder andere hier vinden parameter passing - Is Java "pass-by-reference"? - Stack Overflow

    "There are always things like that. Things more important than yourself, than your dreams." ~ Edward Elric
    no votes  

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in