2017-01-28 4 views
1

Meine native Methode hat eine Methode mit einem Rückgabewert von Byte [], also verwende ich "NewByteArray", um das Byte [] zuzuweisen, und verwende dann return, um das jbyteArray zurückzugeben. Soll ich das JbyteArray freigeben? Und wie man das jbyteArray freigibt? Danke. Ich bin ein Java Anfänger und mein Englisch ist arm.Wie man das jbyteArray freigibt?

+0

So Ihre native Funktion kehrt zurück zu Java? Wenn ja: Nein, es gibt nichts Besonderes, das Sie in Ihrem systemeigenen Code ausführen müssen (es sei denn, Sie haben mit 'NewGlobalRef' einen globalen Verweis auf das Array erstellt). – Michael

Antwort

1

Sie möchten das Byte-Array nicht innerhalb Ihrer nativen Methode freigeben, da der Aufrufer der nativen Methode das Array in Java verwenden möchte.

Vorausgesetzt, dass Sie nicht über eine globale Referenz auf das erzeugte Array halten:

Der Kollektor Müll kann dann darauf achten, das Array-Objekt zur richtigen Zeit zu entfernen, da der lokale Bezug, dass die nativen Methoden hält an Das Array wird entfernt, sobald die Methode zurückgegeben wird. Hier

ist ein Beispiel dafür, wie eine solche native Methode aussehen könnte: How to return an array from JNI to Java?

+0

Sie meinen, der GC kann das jbyteArray auto freigeben? Also brauche ich nichts zu tun? Vielen Dank. – cpdyj

+0

@cpdyj wie Michael hingewiesen hat: "Es sei denn, Sie haben mit NewGlobalRef eine globale Referenz auf das Array erstellt" – Calculator

+0

Vielen Dank. – cpdyj

Verwandte Themen