Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: pecrom 11. 05. 2017, 18:26:44

Název: Java VisualVM a rostoucí spotřeba paměti
Přispěvatel: pecrom 11. 05. 2017, 18:26:44
Zdarec, nasel by se tu nekdo, kdo ma zkusenosti s VisualVM a profilovanim javy? neni mi jasna jedna vec. Mam program:
Kód: [Vybrat]
public class Main {

    public static void main(String[] args) {

        Runnable action = () -> {
            while (true) {
                System.out.println("memory ate");
                try {
                    TimeUnit.MILLISECONDS.sleep(10);
                } catch (InterruptedException e) {
                    //nothing
                }
            }
        };

        new Thread(action, "Eater").start();
    }
}

Kdyz se na tento program podivam ve VisualVM tak vidim, ze vlakno "Eater" spotrebovava vic a vic pameti. Muzete mi nekdo vysvetlit proc?

(http://i.imgur.com/vgr9lBJ.jpg)

Diky za pomoc:)
Název: Re:Java VisualVM
Přispěvatel: Ondra Satai Nekola 11. 05. 2017, 18:35:50
Ta pamet tam zustava i po zavolani GC? (ve VisualVM na to mas tlacitko)
Název: Re:Java VisualVM
Přispěvatel: pecrom 11. 05. 2017, 18:38:08
prave ze jo, furt to vypada, ze to roste
Název: Re:Java VisualVM
Přispěvatel: Ondra Satai Nekola 11. 05. 2017, 18:43:38
A co jsou zac ty objekty, co je GC nesezere?
Název: Re:Java VisualVM
Přispěvatel: Ivan Nový 11. 05. 2017, 18:53:20
Zkuste prodloužit dobu čekání, možná to čeká na výstup do terminálu.
Název: Re:Java VisualVM
Přispěvatel: pecrom 11. 05. 2017, 19:06:09
A co jsou zac ty objekty, co je GC nesezere?

prave tam se zadne objekty nevytvari, v tom threadu je jenom smycka, co vypisuje do konzole:
Kód: [Vybrat]
while (true) {
                System.out.println("memory ate");
                try {
                    TimeUnit.MILLISECONDS.sleep(100);
                } catch (InterruptedException e) {
                    //nothing
                }
            }
Zkuste prodloužit dobu čekání, možná to čeká na výstup do terminálu.

dobu cekani sem prodlouzil a nic se nezmenilo:-/
Název: Re:Java VisualVM
Přispěvatel: Ondra Satai Nekola 11. 05. 2017, 19:12:16
A co jsou zac ty objekty, co je GC nesezere?

prave tam se zadne objekty nevytvari, v tom threadu je jenom smycka, co vypisuje do konzole:


Nespekuluj a podivej se, v jakych objektech ta pamet je...
Název: Re:Java VisualVM a rostoucí spotřeba paměti
Přispěvatel: pecrom 11. 05. 2017, 21:31:40
tak sem kuknul a toto je vysledek, nevim presne kde se to hleda, ale toto vypada tak nejak nejpravdepodobnejc. Dost je toho v char[], moc mi to nedava smysl.
(http://i.imgur.com/oKayVCh.jpg)
Název: Re:Java VisualVM a rostoucí spotřeba paměti
Přispěvatel: Karel Rank 12. 05. 2017, 03:15:43
Jakej GC je pouzitej?
Název: Re:Java VisualVM a rostoucí spotřeba paměti
Přispěvatel: Sten 12. 05. 2017, 04:31:53
Můj tip je, že System.out je nasměrované do nějakého bufferu.

tak sem kuknul a toto je vysledek, nevim presne kde se to hleda, ale toto vypada tak nejak nejpravdepodobnejc. Dost je toho v char[], moc mi to nedava smysl.
(http://i.imgur.com/oKayVCh.jpg)

Je jedno, kolik toho kde je (spousta toho jsou interní alokace Java VM), zajímavé je, kolik toho kde přibývá.
Název: Re:Java VisualVM a rostoucí spotřeba paměti
Přispěvatel: pecrom 12. 05. 2017, 10:02:11
Můj tip je, že System.out je nasměrované do nějakého bufferu.

tak sem kuknul a toto je vysledek, nevim presne kde se to hleda, ale toto vypada tak nejak nejpravdepodobnejc. Dost je toho v char[], moc mi to nedava smysl.
(http://i.imgur.com/oKayVCh.jpg)

Je jedno, kolik toho kde je (spousta toho jsou interní alokace Java VM), zajímavé je, kolik toho kde přibývá.

presne tak, cucel sem v noci na to a hromadi se to v bufferu pro System.out, kdyz odeberu to cekani, tak mi tam zacnou vznikat vznikat dalsi generace objektu a vypada to, ze gc nestiha cistit pamet. je mozne, ze kdybych to nechal jet dostatecne dlouho, ze by to spadlo popr. ze by to zabil system?
Jakej GC je pouzitej?

zadny sem nenastavoval explicitne, takze defaultni pro java 1.8, takze asi parallel gc
Název: Re:Java VisualVM a rostoucí spotřeba paměti
Přispěvatel: Stefan 12. 05. 2017, 11:06:05
No ono záleží na tom kolik je přiděleno paměti, pokud je stále k dispozici volná paměť GC nic dělat nebude.
Spustí se až JVM nebude schopna alokovat další požadovaný blok paměti.
Můžete naistalovat plugin "Visual GC" a potom sem dejte screenshot.
Omezte aplikaci paměť přes "-Xmx" a uvidíte že se GC začně o paměť starat :O))
Název: Re:Java VisualVM a rostoucí spotřeba paměti
Přispěvatel: pecrom 12. 05. 2017, 11:51:19
No ono záleží na tom kolik je přiděleno paměti, pokud je stále k dispozici volná paměť GC nic dělat nebude.
Spustí se až JVM nebude schopna alokovat další požadovaný blok paměti.
Můžete naistalovat plugin "Visual GC" a potom sem dejte screenshot.
Omezte aplikaci paměť přes "-Xmx" a uvidíte že se GC začně o paměť starat :O))

screen je zde (http://i.imgur.com/MP3ciXw.jpg)

zkusim to -Xmx