Exceptionfreie Anweisungen in try-catch-Blöcke,

Georgey

Mitglied
Hallo allesamt,

ich hab in einem Buch einen Beispielcode gesehen und frage mich, ob man den try-catch-Block nicht einfach nur um die Anweisung Thread.sleep(DELAY) einfügen sollte.
Also von

Java:
public void run() 
	{
		try {
			for (int i = 1; i <= STEPS; i++) {
				ball.move(component.getBounds());
				component.repaint();
				Thread.sleep(DELAY);
			}
		}
		catch (InterruptedException exception) {
		}
	}

zu

Java:
public void run() 
	{
		for (int i = 1; i <= STEPS; i++) {
			ball.move(component.getBounds());
			component.repaint();
			
			try {
				Thread.sleep(DELAY);
			}
			catch (InterruptedException exception) {
			}
		}
	}
Denn schließlich wirft in diesem Code nur die Thread.sleep() Anweisung eine mögliche Exception.
Wäre mein Beispiel so performanter? Wird überhaupt irgendwelcher Overhead verbraucht, wenn die 2 Anweisungen "ball.move(component.getBounds());" und "component.repaint();" im try mit aufgenommen werden?
Wenn ja, wie genau entsteht der Overhead? Indem die JRE quasi an jeder Anweisung im try-Block nach Exceptions "lauscht"?

Wenn man zu try-catch was googelt, findet man leider nie derart tiefergehende Informationen.

Danke für die Hilfe.
 

Marco13

Top Contributor
Ich denke, mit performance hat das weniger zu tun. Vielmehr würde, wenn bei dem Thread.sleep etwas schiefgeht, dass ja 'STEPS' mal probiert. Bei der ersten Variante wird gleich die ganze Schleife abgebochen.

Man könnte IMHO also entweder sowas machen wie
Code:
    public void run() 
    {
        for (int i = 1; i <= STEPS; i++) {
            ball.move(component.getBounds());
            component.repaint();
            
            try {
                Thread.sleep(DELAY);
            }
            catch (InterruptedException exception) 
            {[b]
                Thread.currentThread().interrupt();
                return;[/b]
            }
        }
    }
oder das try/catch gleich um die ganze Schleife wickeln, die ann automatisch abgebrochen wird, wenn es kracht.

Schau dir auch mal [JavaSpecialists 056] - Shutting down threads cleanly an.
 

CHE123

Mitglied
hi,

die InterruptedException teilt dir mit, dass der Thread (von aussen) unterbrochen wurde und
aufhören soll - in deinem Code würde der Thread quasi weiterlaufen - das soll nicht sein!
Der Beispielcode passt und hat keinerlei negative Auswirkung auf die Performance.

g,
Christina
 

Georgey

Mitglied
Sorry, ich hab ein schlechtes Beispiel genommen. Stellen wir uns vor, dass die for-Schleifen weg wäre.

Also so:
Java:
public void run() 
	{
		try {	
			ball.move(component.getBounds());
			component.repaint();
			Thread.sleep(DELAY);
			}
		catch (InterruptedException exception) {
		}
	}

und mein abgewandeltes Beispiel:
Java:
public void run() 
	{
			ball.move(component.getBounds());
			component.repaint();
			
			try {
				Thread.sleep(DELAY);
			}
			catch (InterruptedException exception) {
			}
	}

Mir geht es hier überhaupt nicht um Threading. Das in den catch block ein Thread.currentThread().interrupt(); empfohlen ist, ist mir gerade auch nicht wichtig.

Meine Fragen sind wie zuvor dieselben:

Wäre mein Beispiel (das letzte) so performanter? Wird überhaupt irgendwelcher Overhead verbraucht, wenn die 2 Anweisungen "ball.move(component.getBounds());" und "component.repaint();" im try mit aufgenommen werden?
Wenn ja, wie genau entsteht der Overhead? Indem die JRE quasi an jeder Anweisung im try-Block nach Exceptions "lauscht"?

Damit ihr mich nicht missversteht: Ich bin kein absoluter Neuling. Ich will mehr vom Interna verstehen.
 

Marco13

Top Contributor
Wenn man's genauer wissen will, steht dazu auf VM Spec Compiling for the Java Virtual Machine oder VM Spec Java Programming Language Conceptsein bißchen was.

Als Beispiel: Wenn man das hier compiliert
Java:
class TryTest
{

    private static void dummy()
    {
    }

    public static void first()
    {
        try
        {
            dummy();
            Thread.sleep(100);
        }
        catch (Exception e) {}
    }

    public static void second()
    {
        dummy();
        try
        {
            Thread.sleep(100);
        }
        catch (Exception e) {}
    }
}


Und das dann mit
[c]javap -c TryTest[/c]
decompiliert, erhält man

Code:
Compiled from "TryTest.java"
class TryTest extends java.lang.Object{
TryTest();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return

public static void first();
  Code:
   0:   invokestatic    #2; //Method dummy:()V
   3:   ldc2_w  #3; //long 100l
   6:   invokestatic    #5; //Method java/lang/Thread.sleep:(J)V
   9:   goto    13
   12:  astore_0
   13:  return
  Exception table:
   from   to  target type
     0     9    12   Class java/lang/Exception


public static void second();
  Code:
   0:   invokestatic    #2; //Method dummy:()V
   3:   ldc2_w  #3; //long 100l
   6:   invokestatic    #5; //Method java/lang/Thread.sleep:(J)V
   9:   goto    13
   12:  astore_0
   13:  return
  Exception table:
   from   to  target type
     3     9    12   Class java/lang/Exception


}

Wie man sieht ist der bytecode in beiden Fällen der gleiche. Lediglich der Bereich, in dem Exceptions abgefangen werden, ist ein anderer. Man kann davon ausgehen, dass das keinen Performanceunterschied macht. Wenn der JIT nochmal drüberläuft, könnte das zwar theoretisch anders sein, aber solche Dinge wie Deep dive into assembly code from Java | Java.net nachzuvollziehen überlasse ich dann mal anderen...
 

musiKk

Top Contributor
Durch größere try-Blöcke entsteht kein weiterer Overhead. Die Bereiche, die ein try-Block schützt, sind in einer Tabelle abgelegt, die konsultiert werden kann, wenn eine Exception auftritt; dort steht auch, wo der catch-Block zu finden ist. Selbiger wird im Erfolgsfall per goto übersprungen. So machts zumindest javac von Sun.

edit: Ich dachte mir schon, dass Marco13 hier auch noch ordentlich was beitragen würde... ;)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Sind unten stehende Anweisungen kompilierbar? Java Basics - Anfänger-Themen 7
M Java Anweisungen Java Basics - Anfänger-Themen 4
S Anweisungen verstehen System.out.print/println Java Basics - Anfänger-Themen 2
D Können if Anweisungen aufeinander aufbauen? Java Basics - Anfänger-Themen 1
H ERGÄNZUNGSFRAGE: Klammersetzung bei if-else Anweisungen und Schleifen Java Basics - Anfänger-Themen 2
P Java Verketten von Stream - Bedeutung der Anweisungen? Java Basics - Anfänger-Themen 3
J 2 "while"-Anweisungen in einer do-Schleife? Java Basics - Anfänger-Themen 4
V Einem JButton anweisungen geben Java Basics - Anfänger-Themen 4
S Erste Schritte Verkettung von Anweisungen Java Basics - Anfänger-Themen 4
T Java verschiedene Anweisungen Java Basics - Anfänger-Themen 23
R else if anweisungen Java Basics - Anfänger-Themen 2
O Erste Schritte Eingabe anweisungen eliminieren Java Basics - Anfänger-Themen 3
J Mehrere IF Anweisungen und dazugehörige ELSE Java Basics - Anfänger-Themen 6
J BlueJ und import-Anweisungen, wie geht das? Java Basics - Anfänger-Themen 4
A instanceof-if-else-Anweisungen eleganter lösen Java Basics - Anfänger-Themen 5
? Klassen Verständnisprobleme mit Import Anweisungen Java Basics - Anfänger-Themen 6
L Frage zu If-Anweisungen Java Basics - Anfänger-Themen 3
OnDemand Package Anweisungen Java Basics - Anfänger-Themen 3
S Verständnisfrage zu Anweisungen und deren Wirkung Java Basics - Anfänger-Themen 7
S Anweisungen Ausdrücke Java Basics - Anfänger-Themen 7
B Anzahl if anweisungen nicht bekannt Java Basics - Anfänger-Themen 3
V Methoden Schleifeninvariante Assert Anweisungen Java Basics - Anfänger-Themen 6
P if Anweisungen komprimieren Java Basics - Anfänger-Themen 6
G JTextField() Anzeige - if-Anweisungen Java Basics - Anfänger-Themen 2
J verschiedene Anweisungen bei verschiedenen Zuständen Java Basics - Anfänger-Themen 9
R return Anweisungen und Array Elemente löschen Java Basics - Anfänger-Themen 6
C OOP if Anweisungen Java Basics - Anfänger-Themen 24
E If - Anweisungen Java Basics - Anfänger-Themen 4
E Verschachtelte If-Anweisungen - "else without if" Java Basics - Anfänger-Themen 4
S Umsetzung von verschiedenen Anweisungen Java Basics - Anfänger-Themen 8
T Erstellen eines Steuerprogramms mittels if-anweisungen Java Basics - Anfänger-Themen 10
T Werden import Anweisungen nicht vererbt? Java Basics - Anfänger-Themen 3
M if-Anweisungen Java Basics - Anfänger-Themen 11
F Kann ein Problem bei Anweisungen nicht lösen Java Basics - Anfänger-Themen 4
J Klammersetzung bei if-else Anweisungen und Schleifen Java Basics - Anfänger-Themen 13
B variable deklaration und wert speichern in 2 anweisungen? Java Basics - Anfänger-Themen 20
T Import-Anweisungen Java Basics - Anfänger-Themen 10
D Anweisungen Java Basics - Anfänger-Themen 2
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
missy72 Catch Blöcke zusammenfassen Java Basics - Anfänger-Themen 6
Ostkreuz wie geht der catch? Java Basics - Anfänger-Themen 3
D try/catch-Block bei for-Schleife Java Basics - Anfänger-Themen 14
D Best Practice Ausgabe über direkte Ausgabe oder try-catch? Java Basics - Anfänger-Themen 13
districon Try - Catch Java Basics - Anfänger-Themen 8
JavaNoobi Try and Catch und übergabe von Objekten Java Basics - Anfänger-Themen 2
Y Wie kann ich die Variable in der Try Catch returnen? Java Basics - Anfänger-Themen 3
B Try-Catch Block Java Basics - Anfänger-Themen 3
B JUnit / Exceptions/ try-catch Java Basics - Anfänger-Themen 6
B try catch finally Java Basics - Anfänger-Themen 2
F Mehrere Exceptions in einem Catch-Block abfangen Java Basics - Anfänger-Themen 12
H throws und try catch Java Basics - Anfänger-Themen 8
H Try Catch Throw Exception Java Basics - Anfänger-Themen 1
S Try-Catch in Verwendung einer while Schleife Java Basics - Anfänger-Themen 2
I Try-Catch innerhalb eines Catchblocks Java Basics - Anfänger-Themen 1
J Endlosschleife bei Try-Catch? Java Basics - Anfänger-Themen 3
K JOptionPane/catch/try/finally/if Java Basics - Anfänger-Themen 9
V InputMismatchException (Try and catch) Java Basics - Anfänger-Themen 10
L do-while-Schleife läuft doppelt, try catch fehler Java Basics - Anfänger-Themen 12
J Erste Schritte catch Exeption Parameter Java Basics - Anfänger-Themen 7
TheMenox Try and Catch Java Basics - Anfänger-Themen 12
J Try Catch Java Basics - Anfänger-Themen 6
DeVolt Java8 Paket Time: Datum prüfen / try-catch Java Basics - Anfänger-Themen 1
J Code in Try-Catch Block wird nicht komplett ausgeführt Java Basics - Anfänger-Themen 5
J Frage zum Thema Exceptions (Try/Catch) Java Basics - Anfänger-Themen 3
A Nicht zu findender Fehler in einem try/catch Block Java Basics - Anfänger-Themen 6
F try/catch Ausführungen ? Java Basics - Anfänger-Themen 3
S try-catch - Variablen werden nicht an return übergeben Java Basics - Anfänger-Themen 3
Z Catch & Exceptions Java Basics - Anfänger-Themen 4
I Exception try-catch Java Basics - Anfänger-Themen 1
E Buchstaben verhindern / Try & Catch Block Java Basics - Anfänger-Themen 3
F try/catch - (else) Java Basics - Anfänger-Themen 11
L Warum ist der catch-Block nicht erreichbar ? Java Basics - Anfänger-Themen 8
C Problem mit try-catch in Schleife Java Basics - Anfänger-Themen 15
R Exceptions (try/catch) Java Basics - Anfänger-Themen 63
H Geht dieser Code noch einfacher (try catch finally) Java Basics - Anfänger-Themen 7
J Methoden try / catch exception Java Basics - Anfänger-Themen 5
S 'continue' in catch- und if-blöcken Java Basics - Anfänger-Themen 2
B Erste Schritte try-catch-Klauseln, überprüfte Ausnahmen Java Basics - Anfänger-Themen 4
D Erste Schritte Warum try-catch für FileWriter Java Basics - Anfänger-Themen 5
S try-catch-finally-Problem Java Basics - Anfänger-Themen 10
xehpuk Compiler-Fehler final Variable in try-catch Wert zuweisen Java Basics - Anfänger-Themen 8
F Exceptionbehandlung --> catch/throws Java Basics - Anfänger-Themen 11
M Try und Catch Java Basics - Anfänger-Themen 5
B Fehler mit try + catch verhindern Java Basics - Anfänger-Themen 8
N Catch Block in Try erzwingen Java Basics - Anfänger-Themen 14
E Problem mit for schleife/ try-catch block Java Basics - Anfänger-Themen 7
B Variablen Variablen in try / catch "public" machen? Java Basics - Anfänger-Themen 3
C Wiederholung von try-catch Java Basics - Anfänger-Themen 3
N try and catch block in finally Java Basics - Anfänger-Themen 8
M exception catch falsch? Java Basics - Anfänger-Themen 11
S catch Exception erklären Java Basics - Anfänger-Themen 2
C Variable in try/catch Java Basics - Anfänger-Themen 10
B Try and Catch Java Basics - Anfänger-Themen 6
StrikeTom Ein paar(2) Fragen zu throws und try + catch Java Basics - Anfänger-Themen 6
J try und catch Java Basics - Anfänger-Themen 7
B Exception vor catch Block definieren Java Basics - Anfänger-Themen 9
M Frage zu try ... catch Java Basics - Anfänger-Themen 9
S NumberFormatException , mit Try/Catch? Java Basics - Anfänger-Themen 7
B Try/catch Java Basics - Anfänger-Themen 11
M Try & Catch Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben