Fórum Root.cz

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

Název: Java VisualVM a rostoucí spotřeba paměti
Přispěvatel: pecrom kdy 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:
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 kdy 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 kdy 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 kdy 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ý kdy 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 kdy 11. 05. 2017, 19:06:09
Citace od: Ondra Satai Nekola kdy 11. 05. 2017, 18:43:38
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:
while (true) {
                System.out.println("memory ate");
                try {
                    TimeUnit.MILLISECONDS.sleep(100);
                } catch (InterruptedException e) {
                    //nothing
                }
            }

Citace od: Ivan Nový kdy 11. 05. 2017, 18:53:20
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 kdy 11. 05. 2017, 19:12:16
Citace od: pecrom kdy 11. 05. 2017, 19:06:09
Citace od: Ondra Satai Nekola kdy 11. 05. 2017, 18:43:38
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 kdy 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 kdy 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 kdy 12. 05. 2017, 04:31:53
Můj tip je, že System.out je nasměrované do nějakého bufferu.

Citace od: pecrom kdy 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)

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 kdy 12. 05. 2017, 10:02:11
Citace od: Sten kdy 12. 05. 2017, 04:31:53
Můj tip je, že System.out je nasměrované do nějakého bufferu.

Citace od: pecrom kdy 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)

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?
Citace od: Karel Rank kdy 12. 05. 2017, 03:15:43
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 kdy 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 kdy 12. 05. 2017, 11:51:19
Citace od: Stefan kdy 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))

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

zkusim to -Xmx