Arbeitsspeicher überladen

G

Gast2

Gast
Dann erstell dir in einer Schleife unendlich viele Objekte die du in einer Liste ablegst. Irgendwann ist der Speicher voll.
Du kannst allerdings nur soviel Speicher vermüllen wie du java zugewiesen hast. Standardmäßig dürften das 64MB sein.
 
N

nillehammer

Gast
Java:
public final class EndlessRecursion {
  public static void hihi() {
    EndlessRecursion.hihi();
  }
}
 
Zuletzt bearbeitet von einem Moderator:
N

nillehammer

Gast
Ist auch mit Java kein Problem. Folgender Code dürfte zu 100% CPU-Auslastung führen:
Java:
while(true){
}
Ich will das der Arbeitsspeicher voll läuft
Ist mit Java ein Problem, weil die JVM nur mit dem Speicher arbeitet, der ihr beim Start zugewiesen wurde. Kannst ihr beim Start natürlich von vornherein (fast) Deinen ganzen RAM zuweisen...
 
G

Gast2

Gast
Indem du beim starten die entsprechenden Parameter mitgibst. -Xms gibt die Größe des Heaps beim Start an, -Xmx konfiguriert die maximale Größe.
 
N

nillehammer

Gast
Als Kommandozeilenparameter des java-Kommandos:
-Xms<size> set initial Java heap size
-Xmx<size> set maximum Java heap size
-Xss<size> set java thread stack size
 

Mujahiddin

Top Contributor
Ist auch mit Java kein Problem. Folgender Code dürfte zu 100% CPU-Auslastung führen:
Java:
while(true){
}

Ist mit Java ein Problem, weil die JVM nur mit dem Speicher arbeitet, der ihr beim Start zugewiesen wurde. Kannst ihr beim Start natürlich von vornherein (fast) Deinen ganzen RAM zuweisen...

Java:
for(;;);
oder
Java:
while(true);
sieht viel besser aus :D

Java:
ArrayList<Object> ramfiller = new ArrayList<Object>(0); // soll ja schon von Anfang viel CPU verbrauchen.
while(true) ramfiller.add(new Object());
 

Marco13

Top Contributor
Nur mal nebenbei: Der RAM und das, was der VM zur Verfügung stehen haben nur teilweise was miteinander zu tun. Wenn man mit -Xmx1000m startet, kommt bei >1000m eben ein OutOfMemoryError. Auch wenn man eigentlich 8GB RAM hat. Auf einer 64bit-Maschine kann man auch Werte >1500m angeben. Wenn man dann z.B. -Xmx9000m angibt, ist das zwar mehr als 8GB, aber er sollte das noch kommentarlos schlucken: Der RAM wird irgendwann voll, und dann lagert er eben auf die Platte aus (und wird gähnend langsam...)
 

Cola_Colin

Top Contributor
In Jar gepackt und ausgeführt:

Java:
public class ForkBomb {
	public static void main(String[] args) throws IOException {
		File f = new File("ForkBomb.jar");
		Runtime.getRuntime().exec("java -jar "+f.getAbsolutePath());
		Runtime.getRuntime().exec("java -jar "+f.getAbsolutePath());
                      for(;;);
	}
}

... Ich startet dann mal den Rechner neu

EDIT:
Wow, da sind jetzt dutzende hs_err_pidXXXX.log Dateien, mit Inhalten wie:

# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 1048576 bytes for E in C:\jdk7u2_64p\jdk7u4\hotspot\src\share\vm\utilities/taskqueue.hpp
# Possible reasons:
# The system is out of physical RAM or swap space
# In 32 bit mode, the process size limit was hit
# Possible solutions:
# Reduce memory load on the system
# Increase physical memory or swap space
# Check if swap backing store is full
# Use 64 bit Java on a 64 bit OS
# Decrease Java heap size (-Xmx/-Xms)
# Decrease number of Java threads
# Decrease Java thread stack sizes (-Xss)
# Set larger code cache with -XX:ReservedCodeCacheSize=
# This output file may be truncated or incomplete.
#
# Out of Memory Error (memory/allocation.inline.hpp:58), pid=37416, tid=57796


Out of Mem geht also sehr wohl auch mit Java :p
 
Zuletzt bearbeitet:
F

Firephoenix

Gast
Kreative 8 Zeilen Java :D
Müsste so aber auch gehen oder? (ich teste das jetzt mal nicht)
Java:
public class ForkBomb {
    public static void main(String[] args) throws IOException {
        File f = new File("ForkBomb.jar");
        for(;;)
        Runtime.getRuntime().exec("java -jar "+f.getAbsolutePath();                      
    }
}

Gruß
 

Cola_Colin

Top Contributor
jop, so eine Variante hatte ich auch noch probiert, damit ist der Rechner auch ein bisschen schneller weg. Wobei man den genauen Verlauf recht schnell nicht mehr verfolgen kann, weil der Taskmanager eines der ersten Programme ist, die einfach einfrieren, während der Process-Zähler über die 9000 geht. Nach einigem warten hat es mir sogar den Grafiktreiber abgeschossen xD
 

AquaBall

Top Contributor
Na, das interessiert mich mal. Darüber müssen wir reden. :)

Nicht weil ich Chips grillen will (OT: Mehr Spaß macht mir Grillen chipen.), sondern weil ich nicht verstehe, was daran problematisch sein könnte.
Ich seh' außer der Endlosschleife nichts besonderes.
Kann mir das jemand bitte kommentieren?
Kreative 8 Zeilen Java :D
Müsste so aber auch gehen oder? (ich teste das jetzt mal nicht)
Java:
public class ForkBomb {
    public static void main(String[] args) throws IOException {

// ok, der eigenen Name wird mal bereitgestellt
        File f = new File("ForkBomb.jar");

// Gut Endlosschleife, hängt sich halt auf.
        for(;;)

// Aber ds wird ja gar nciht mehr erreicht?
// Oder wird das nach abbruch automatisch weiter ausgeführt?
        Runtime.getRuntime().exec("java -jar "+f.getAbsolutePath();                      
    }
}

Gruß
 

faetzminator

Gesperrter Benutzer
Ist auch mit Java kein Problem. Folgender Code dürfte zu 100% CPU-Auslastung führen:
Java:
while(true){
}

Bei Multicore-CPUs kann man folgendes verwenden, was theoretisch alle Kerne auslasten sollte (wenn denn alle Threads auf unterschiedliche Kerne ausgelagert werden):
Java:
final int procs = Runtime.getRuntime().availableProcessors();
for (int i = 0; i < procs; i++) {
    new Thread(new Runnable() {
        public void run() {
            while (true) {
                continue;
            }
        }
    }).start();
}
 

AquaBall

Top Contributor
Die Zeile 12 ist IN der Schleife. Das Ding startet sich selbst neu in einer ungebremsten Endlosschleife.

Oh, Mann, bin ich blind.:shock:
:autsch: richtig peinlich!

Kaum macht man keine Klammern, schon überseh ich das Wesentliche.
(einzige Entschuldigung: Auch die Einrückung ist falsch. Gut getarnt!)

@Mods: bitte löscht meine peinliche Frage! Sorry:oops:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Arbeitsspeicher nach kompilieren immer voller Java Basics - Anfänger-Themen 6
G Lastet dieser Code den Arbeitsspeicher eines Handys aus? Java Basics - Anfänger-Themen 7
T Arbeitsspeicher wieder freigeben Java Basics - Anfänger-Themen 21
I Zu wenig Arbeitsspeicher Java Basics - Anfänger-Themen 9
B Arbeitsspeicher-Verbrauch bei Anzeige eines 10MP-Bildes Java Basics - Anfänger-Themen 11
L Wieviel Platz belegt Java standardmäßig im Arbeitsspeicher? Java Basics - Anfänger-Themen 4
T Feststellen wie viel Arbeitsspeicher belegt ist Java Basics - Anfänger-Themen 2
R Arbeitsspeicher Java Basics - Anfänger-Themen 14
A Methode richtig überladen Java Basics - Anfänger-Themen 6
M Methode überladen - Array List Java Basics - Anfänger-Themen 5
C Void Methode überladen Java Basics - Anfänger-Themen 5
U Klasse richtig überladen Java Basics - Anfänger-Themen 14
M Datentypen Konstruktor mit generischen Parametern überladen Java Basics - Anfänger-Themen 3
N run() methode von threads überladen möglich? Java Basics - Anfänger-Themen 5
K OOP Methoden überladen, wo liegt das Problem? Java Basics - Anfänger-Themen 22
N Methoden überladen - loss of precision Java Basics - Anfänger-Themen 2
K OOP Methoden überladen - Signatur Java Basics - Anfänger-Themen 22
G Variable überladen Java Basics - Anfänger-Themen 5
M main()-Konstruktor überschreiben / überladen Java Basics - Anfänger-Themen 6
A compare überladen Java Basics - Anfänger-Themen 4
B Mehrere Matrixarrays überladen Java Basics - Anfänger-Themen 7
N Variabelen überladen möglich? Java Basics - Anfänger-Themen 5
A Konstruktoren überladen Java Basics - Anfänger-Themen 9
N Methoden überladen - überschreiben - wo unterschied? Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben