Wykonywanie pystej pętli while a zużycie procesora oraz pamięci RAM

Odpowiedz Nowy wątek
2019-06-10 16:14
0

Cześć. Mam zagwozdkę, z ciekawości sprawdziłem ile RAM oraz CPU będzie zużywał czysty program Javowoy jedynie z pustą pętlą while.

Pokazało 16MB i 12% zużycia procesora, pytanie czym jest to spowodowane ? (sprawdzałem proces uruchomieniowy, nie zużycie przez całe IDE)

Sprawdzałem poprzez program Process Explorer.

Znacie może jakieś inne programy do zbadania tego typu wartości?

Pozostało 580 znaków

2019-06-10 16:33
0

Program w javie nie startuje sam sobie tylko w JVM (java virtual machine) i ona najpierwniej zjada zasoby o których mówisz. Pytanie co chcesz policzyć?


Spring? Ja tam wole mieć kontrole nad kodem ᕙ(ꔢ)ᕗ
Haste - mała biblioteka do testów z czasem.

Pozostało 580 znaków

2019-06-10 16:42
0

Ale co chcesz osiągnąć? Do Javy masz takie rzeczy jak VisualVM które nadają się do takich celów znacznie lepiej.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2019-06-10 16:59
0

Pewnie JVM wykonuje sprawdzenie warunku zakończenia pętli i na to idą cykle CPU.

edycja:

Warunek nawet nie jest sprawdzany.

public class Foobar
{
    public static void main(String[] args) {
        while (true) {

        }
    }
}

Jak spojrzymy na instrukcje wykonywane przez JVM dla tego kodu:

javap.exe  -c Foobar.class
Compiled from "Foobar.java"
public class Foobar {
  public Foobar();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: goto          0
}

Widać, że ta psuta pętla, to po prostu goto, czyli CPU idzie na wykonanie tejże instrukcji.

druga edycja:

Takie obserwacja co robi proces i ile czasu mu to zajmuje, w rozbiciu na wywołania w user space, kernel space, łatwo się robi pod Linuksem, bo są narzędzia typu DTrace. Jak wpisałem na szybko odpowiednik DTrace pod Windows, to aż się zdziwiłem: https://techcommunity.microso[...]DTrace-on-Windows/ba-p/362902 :)

edytowany 2x, ostatnio: yarel, 2019-06-10 17:13
Czyli są to miary zależne od danego języka programowania? w jednym takie samo zadanie będzie zżerało więcej a w drugim mniej zasobów? - Sumekprog 2019-06-10 20:43
Jakie metryki masz na myśli? Utylizację CPU? Jeśli tak, to zleży od wielu czynników. Od fizycznej architektury CPU, środowiska uruchomieniowego (np. interpreter jakiegoś języka, zarządcy zadań systemu operacyjnego), tego jak kompilatory radzą sobie z optymalizacją kodu wynikowego, tego w jaki sposób napiszesz program (możesz utrudnić, a czasem ułatwić kompilatorowi życie). Można też pisać soft w taki sposób, że np. wątek dobrowolnie rezygnuje z CPU (bo np. przez 10% kwantu czasu będzie coś liczył, a później czekał na wynik I/O - "yield cpu"). - yarel 2019-06-11 11:16

Pozostało 580 znaków

2019-06-10 17:11
0

Chciałbym pokazać zużycie CPU, które rzeczywiście wykorzystują konkretne funkcje mojego programu.
Korzystam z Process Explorer, ponieważ działa w każdym języku, VisualVM ma problemy przykładowo z Go (przynajmniej ja mam problem z zaimplemenowaniem tego w IDE GoLand od JB)

Pozostało 580 znaków

2019-06-10 17:24
0

Dowolny kod będzie obciążał wątek procesora w 100% jeżeli nie będzie żadnego oczekiwania na sygnały czy parkowania wątków. Po to jest procesor, żeby wykonywać kod z maksymalną prędkością. Nie trzeba nawet odpalać programu, by być tego pewnym. Jeżeli program nie obciąża wątku procesora w 100% to coś popsułeś, np wywołujesz coś blokującego.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
A jak to jest z podziałem wątków na I/O Bound i CPU Bound? z tego co wiem to te drugie są obciążane w 100% przez obliczenia, a te pierwsze nie. - Sumekprog 2019-06-10 17:41
W sensie mam coś dodać do tego? I/O bound oznacza, iż wątek blokuje się dopóki nie dostanie danych z zewnątrz i dopiero wtedy wznawia obliczenia. - Wibowit 2019-06-10 19:31

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0