Java VisualVM a rostoucí spotřeba paměti

pecrom

Java VisualVM a rostoucí spotřeba paměti
« 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?



Diky za pomoc:)


Re:Java VisualVM
« Odpověď #1 kdy: 11. 05. 2017, 18:35:50 »
Ta pamet tam zustava i po zavolani GC? (ve VisualVM na to mas tlacitko)

pecrom

Re:Java VisualVM
« Odpověď #2 kdy: 11. 05. 2017, 18:38:08 »
prave ze jo, furt to vypada, ze to roste

Re:Java VisualVM
« Odpověď #3 kdy: 11. 05. 2017, 18:43:38 »
A co jsou zac ty objekty, co je GC nesezere?

Ivan Nový

Re:Java VisualVM
« Odpověď #4 kdy: 11. 05. 2017, 18:53:20 »
Zkuste prodloužit dobu čekání, možná to čeká na výstup do terminálu.


pecrom

Re:Java VisualVM
« Odpověď #5 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:-/

Re:Java VisualVM
« Odpověď #6 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...

pecrom

Re:Java VisualVM a rostoucí spotřeba paměti
« Odpověď #7 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.

Re:Java VisualVM a rostoucí spotřeba paměti
« Odpověď #8 kdy: 12. 05. 2017, 03:15:43 »
Jakej GC je pouzitej?

Sten

Re:Java VisualVM a rostoucí spotřeba paměti
« Odpověď #9 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.


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

pecrom

Re:Java VisualVM a rostoucí spotřeba paměti
« Odpověď #10 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.


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

Stefan

Re:Java VisualVM a rostoucí spotřeba paměti
« Odpověď #11 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))

pecrom

Re:Java VisualVM a rostoucí spotřeba paměti
« Odpověď #12 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

zkusim to -Xmx