2.3 Java Objekte referenzieren
NEXT |
PREVIOUS |
CONTENT
- Primitive werden zwischen Java und native Code kopiert
- Java Objekte werden "by reference" übergeben. Die JVM paßt auf die Objekte auf, die
an native Methoden übergeben wurden, damit sie nicht vom Garbage Collector gelöscht werden.
Auf native Seite muß ein Mechanismus existieren, der die VM informiert, daß die objekte
nicht mehr benötigt werden, damit der GC sich ihrer entledigen kann. Außerdem muß
er in der Lage sein, an native Code übergebene Objekte im Speicher zu bewegen (verhindern von
Speicherfragmentierung)
Globale Referenzen
- Referenzen auf Java Objekte werden in lokale und globale Referenzen unterteilt. Lokale Referenzen sind
bis Ende der native Methode gültig und werden dann freigegeben. Funktionen, die ein Java Objekt als
Parameter erwarten, nehmen sowohl lokale als auch globale Referenzen. Objekte, die von JNI Funktionen
zurückgegeben werden, sind lokale Referenzen. Eine native Method kann lokale und globale
Referenzen auf Objekte zurückgeben.
- Lokale Referenzen sollten in 2 Fällen selbst freigegeben werden:
- wenn eine native Methode ein "großes" Java Objekt benutzt und dafür eine lokale
Referenz erzeugt, welche in einer nachfolgenden Aktion aber nicht mehr benutzt wird.
- wenn eine native Methode eine große Anzahl von Referenzen erzeugt, die aber nicht alle
zur selben Zeit benutzt werden, z.B. bei einer Ireration durch ein ein Array von Java
Objekten.
Hintergrund: die JVM hat nur eine bestimmten Speicher zur Verfügung, um sich die loaklen
referenzen zu merken.
- Der Progrmmierer kann an jedem beliebigen Punkt in einer native Methode eine lokale
Referenz löschen. es ist sichergestellt, daß JNI-Funktionen keine zusätzlichen
lokalen Referenzen erzeugen, außer denen, die sie zurückgeben
© 1999 Lars Jordan,
Chemnitz Java User Group