Java Threading

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Java Threading

    Ich wollte für ein neuesProjekt mal rausfinden, wieviel Threads Java maximal verwalten kann. Also habe ich folgendes Programm erstellt

    Quellcode

    1. package threads;
    2. public class Run {
    3. /**
    4. * @param args
    5. */
    6. public static void main(String[] args) {
    7. long count = 0;
    8. while(true){
    9. new TestThread().start();
    10. count++;
    11. System.out.println(count);
    12. }
    13. }
    14. }
    Alles anzeigen

    Quellcode

    1. package threads;
    2. public class TestThread extends Thread {
    3. public void run(){
    4. while(true)
    5. try {
    6. Thread.sleep(60000);
    7. } catch (InterruptedException e) {
    8. // TODO Auto-generated catch block
    9. e.printStackTrace();
    10. }
    11. }
    12. }
    Alles anzeigen


    So jar, erzeugt. Jetzt lass ich das Programm laufen:

    java -jar threads.jar


    Bekomm ich ab 5706 Threads einen java.lang.OutOfMemoryError. Im Speicher werden 115MB belegt. Da denk ich mir doch: oka setzt einfch mal die JavaHeapSize hoch

    java -Xmx512M -jar threads.jar


    Zu meiner Verwunderung kamen dort weniger maximal Threads heraus. Da ist nämlich schon bei 4285 schluß. Und zu meiner dopelten Verwunderung wurden auch bei diesem Programmdurchlauf 115MB von der JVM belegt.

    Eigentlich hatte ich jetzt damit gerechnet: Größerer Heap = Größerer Speicherverbrauch = Mehr maximale Threads.

    Nur irgendwo scheine ich ja einen Denkfehler zu machen...
  • Jeder Thread hat seinen eigenen Stack.
    Die Stack-Size einer Applikation ist relativ begrenzt da Stack immer im Voraus allokiert wird.
    Versuch mal was passiert, wenn du die Stack Size auf 1K setzt.
    Außerdem gibt es Beschränkungen, wieviel Threads das Betriebbsystem unterstützt.
    Schau mal ob es einen Unterschied macht jenachdem wieviel Apps du nebenbei laufen hast.
    There's no place like 127.0.0.1