Eine Lösung für Data Races in Java und JNI?

Bekommt das OpenJDK einen Thread-Sanitizer für Java und nativen JNI-Code?

Florian Roos

© Shutterstock / ra2studio

Data Races können Softwareabstürze oder falsche Ergebnisse herbeiführen. Ein neuer Feature-Vorschlag für das OpenJDK könnte dieses Problem beheben.

Ein Thread-Sanitizer für Java und nativen JNI-Code? Klingt gut. Ein entsprechendes Projekt schlägt genau das als Feature für zukünftige Versionen des OpenJDK vor.
In der Beschreibung des Projekts wird skizziert, dass der vorgeschlagene Thread-Sanitizer (TSan) über ein entsprechendes Config-Flag aufgerufen bzw. gesteuert werden sollte: --use-tsan. Wenn der TSan während der Ausführung eines Java-Programms ein Data Race feststellt, gibt er eine entsprechende Warnung aus. Diese Warnung verrät den Dateinamen des .java-Files und die Zeilennummer, so kann die entsprechende Code-Stelle gefunden und angepasst werden.

Die Problematik: Was ist ein Data Race?

Ein Data Race kann zu unvorhersehbarem Verhalten eines Programms führen. Das Spektrum der möglichen Probleme umfasst fehlerhafte und nicht reproduzierbare Ergebnisse von Berechnungen, aber auch komplette Abstürze des Programms sind möglich. Laut der Definition von Oracle liegt ein Data Race vor, wenn die folgenden Bedingungen erfüllt sind:

  • Auf eine Speicheradresse wird von mindestens zwei Threads eines einzigen Prozesses zugegriffen
  • Mindestens in einem Fall handelt es sich um einen Schreibzugriff
  • Es werden keine exklusiven Locks verwendet, um die Speicherzugriffe zu kontrollieren

Welche Alternativen zu TSan gibt es?

FastTrack und FastTrack 2 sind zwei bekannte Algorithmen zur Erkennung von Data Races. Der Autor des TSan-Vorschlags beschreibt, dass diese Algorithmen für Java-Code korrekt arbeiten, aber nicht mit nativem JNI-Code umgehen könnten. Er gibt außerdem an, dass sowohl statische als auch dynamische Algorithmen Schwachstellen beim Detektieren von Data Races hätten.

Weitere Informationen zum vorgeschlagenen Thread-Sanitizer für Java und JNI finden sich in dessen Beschreibung. Derzeit hat der Vorschlag noch Draft-Status.

Verwandte Themen:

Geschrieben von
Florian Roos
Florian Roos
Florian Roos ist Redakteur für Software & Support Media. Er hat Politikwissenschaft an der Technischen Universität Darmstadt studiert und erste redaktionelle Erfahrungen in den Bereichen Games und Consumer-Hardware gesammelt.
Kommentare

Hinterlasse einen Kommentar

2 Kommentare auf "Bekommt das OpenJDK einen Thread-Sanitizer für Java und nativen JNI-Code?"

avatar
4000
  Subscribe  
Benachrichtige mich zu:
Alex Schneider
Gast

Guten Tag,
wie heisst der Autor des TSan-Vorschlags ?