Wie 'teuer' ist die Verwendung des Stack Trace ?

Status
Nicht offen für weitere Antworten.

Xerxis13

Mitglied
Hallo zusammen,

ich habe versucht, einen eleganten Weg zu finden, heraus zu bekommen, 'von wem ich aufgerufen wurde'..Ich bin in einer Methode und möchte wissen, von wo sie aufgerufen wurde(Welche Klasse, welche Methode).

Bisschen im Netz gesucht und ausprobiert, bin ich auf die Lösung StackTrace gekommen:
Java:
Throwable t = new Throwable();
  StackTraceElement[] stacktrace = t.getStackTrace();
Das Array kann man halt durchlaufen, '0' ist die aktuelle Methode, '1' der Aufrufer.

Nun die Frage:
'Kostet' das was?

Also weiß wer, ob die getStackTrace() Methode 'aufwendige' Schritte durchlaufen muss oder sonst wie viel kostet ?

Gibt es andere elegante Varianten an die benötigten Informationen(Wer ruft mich auf) zu kommen, ohne eine Referenz zu übergeben?

Vielleicht hat ja schon wer Erfahrung mit diesem Konstrukt.


Weiß auch wer, wie sich diese Methode im Bezug auf Threads verhält?
Ist zwar jetzt etwas OT, aber die Frage schießt mir gerade so in den Kopf. Ist in einem Multithread System diese Art der Lösung noch praktikabel ?


MFG
Patrick
 
Zuletzt bearbeitet:

FArt

Top Contributor
Ich bin in einer Methode und möchte wissen, von wo sie aufgerufen wurde(Welche Klasse, welche Methode).
Wozu? Der Bedarf nach so einer Funktionalität deutet auf ein sehr spezielles Tool hin (eher selten) oder einen Designfehler (eher häufig).

In der Regel wird das Generieren eines Callstacks (z.B. für eine Exception) als teuer betrachtet.
 

Xerxis13

Mitglied
Nun, in meinem Fall geht es darum, das ich aus einer extern liegenden Bibliothek heraus an Ressourcen parallel liegend zum Aufrufer ran möchte.


Ich frage hier, weil ich auch im Hinterkopf habe, das Exceptions 'teuer' sind, weil sie auf den StackTrace zurück greifen.


Aber so rein logisch betrachtet, ist der StackTrace doch immer vorhanden, oder?
Er wird ja mit jeder Aktion die ich triegere gepfelgt und nicht erst erstellt, wenn er gebraucht wird(bis dahin könnte er ja den verlauf garnicht mehr wiederherstellen).

Heißt, ich greife doch auf eine 'Datenquelle' zu, die doch vom System die ganze Zeit vorgehalten wird, oder?

Ich frage hier halt, weil wie gesagt, ich auch im Hinterkopf habe, das es teuer sei, finde aber nach näherer Betrachtung keinen Grund dafür.

Ich hoffe ihr könnt mir helfen da ein bisschen Licht ins Dunkel der Vorurteile zu bringen :)
 

faetzminator

Gesperrter Benutzer
@habi55:
Es gibt durchaus Situationen, welche das erfordern. Z.B. ein eigener SecurityManager kann so was benötigen...
 

Xerxis13

Mitglied
Wäre es nicht evtl. einfacher die Resourcen mit zu übergeben?

Einfacher wäre es sicherlich, aber zum einen nicht immer möglich zum anderen geht es mir aber auch um die Möglichkeit das Problem anders zu lösen/lösen zu können.

Die Frage ist halt, ob der StackTrace auch im Normalfeld nutzbar ist oder ich da ein Tabu-Thema der 'guten Programmierung' anfasse...
 
B

Beni

Gast
Benutz wenigstens
Code:
Thread.currentThread().getStackTrace()
anstelle der Exception.

Kosten: wenn du die Operation 10'000 mal pro Sekunde ausführen musst, könntest du allenfalls Probleme kriegen, vermutlich benötigst du die Operation allerdings nicht derart oft?

Was das Design angeht haben meine Vorredner wohl schon alles gesagt.
 

byte

Top Contributor
Du kannst das auch ohne Stacktrace lösen, und zwar mittels AOP. Du kannst z.B. mit AspectJ einen Aspekt schreiben und dann mittels Bytecode Instrumentation Deinen Code an den enstprechenden Stellen um den Aspekt erweitern. Über den JoinPoint kommst Du dabei an das aufrufende Objekt ran.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z JNA Cpp-DLL String Verwendung Allgemeine Java-Themen 2
M WSDL: Doppelte Typenames (Keine Verwendung möglich) Allgemeine Java-Themen 5
F Klassen Verwendung abstrakter Klassen Allgemeine Java-Themen 9
K Saubere Verwendung von Generic Types Allgemeine Java-Themen 7
D Verwendung von Selenium Allgemeine Java-Themen 2
P ClassCastException bei Verwendung eines Interfaces Allgemeine Java-Themen 7
M Fehler bei Verwendung von TexturePaint Allgemeine Java-Themen 16
S OOP Apache Commons Math - Verwendung von Genetics - Wie werden Daten in Chromosomen gespeichert? Allgemeine Java-Themen 4
M Verwendung der Cipher von gnu crypto (Serpent) Allgemeine Java-Themen 3
B Verwendung von Packages im Java Code Allgemeine Java-Themen 10
P Richtige Verwendung eines Timers Allgemeine Java-Themen 8
T Warnungsfreie Verwendung von Generics Allgemeine Java-Themen 11
M Problem bei der Verwendung von AES Allgemeine Java-Themen 2
J Port verwendung Allgemeine Java-Themen 13
M Verwendung von unchecked exceptions & bereits vorhandenen exceptions was priorisieren Allgemeine Java-Themen 3
Final_Striker Exceptionhandling: Richtige Verwendung des Try/Catch Blocks Allgemeine Java-Themen 14
W Verwendung von byte Allgemeine Java-Themen 9
L Verwendung? Allgemeine Java-Themen 2
D Fehlerhafte Thread Verwendung beim arbeiten mit Sockets Allgemeine Java-Themen 6
N allg. Frage zur Verwendung von this Allgemeine Java-Themen 3
G Verwendung von DataInputStream und URL Allgemeine Java-Themen 2
C Seltsame Konstanten (und Verwendung) Allgemeine Java-Themen 15
X Exception bei Verwendung von systray4j Allgemeine Java-Themen 5
berserkerdq2 IJVM, ich tue auf meinen Stack 100 und 120 rein, danach subtrahiere ich, macht die Maschine 100-120 oder 120-100? Allgemeine Java-Themen 8
berserkerdq2 Kann man in IJVM maximal 3 Werte im Stack haben? Allgemeine Java-Themen 3
M Stack umdrehen Allgemeine Java-Themen 2
H Stack mit bestimmter Aufgabe Allgemeine Java-Themen 62
L Stack overflow bei einer endrekursiven Funktion (Anwendung: Spezialform des Package Merge) Allgemeine Java-Themen 4
S Collections Stack-Kapazität begrenzen Allgemeine Java-Themen 6
C Method Area, Stack, Heap Allgemeine Java-Themen 7
F Mehrere Threads - ein Stack Allgemeine Java-Themen 6
M Baum nach Stack plus Objektkonvertierung Allgemeine Java-Themen 5
V Performancefrage int-Vector/Stack Allgemeine Java-Themen 10
H Alternative zu Stack Allgemeine Java-Themen 3
G Java Logger ohne Stack Trace ausgaben. Allgemeine Java-Themen 2
V Unable to pop operand off an empty stack Allgemeine Java-Themen 2
P Funktionsweise von Stack- und Snakedatentypen? Code? Allgemeine Java-Themen 7
M Stack vergrößern? Allgemeine Java-Themen 7
R Entsprechung von Stack() im Collections Framework...? Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben