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

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?

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ć?

0

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

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.microsoft.com/t5/Windows-Kernel-Internals/DTrace-on-Windows/ba-p/362902 :)

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)

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.

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