Я никак не могу понять какие есть инструменты по показу утечек памяти для java. вот я накидал такую программу.
import java.io.*;
class Main {
private native byte[] get_byte();
public static void main ( String[] args ) {
Console cons = System.console();
String pwd;
while ( true ) {
pwd = cons.readLine ( );
byte[] test = new Main().get_byte ( );
test[0] = '1';
pwd = cons.readLine ( );
System.out.println ( "Новый цикл." );
}
}
static {
System.loadLibrary ( "Main" );
}
}
Она в цикле получает от jni си кода выделенный массив. вот код.
#include <stdlib.h>
#include "Main.h"
JNIEXPORT jbyteArray JNICALL Java_Main_get_1byte ( JNIEnv *env, jobject obj ) {
jbyteArray test = (*env)->NewByteArray ( env, 255 );
return test;
}
В принципе я думаю что утечки памяти нет, потому что вызывается специальная фукнция NewByteArray, и она полюбому как то связяна со сборщиком мусора в java. но я это могу только думать, а так ли это на самом деле я не знаю.
Почему мне это надо. Я пробую написать на java для android opengl es приложение. но я знаю что с выводом текста есть проблемы. поэтому я использую freetype2 написанный на си. также у меня есть класс, который работает в моем движке. его надо чуть чуть переделать для android. но функции этого класса должны возвращать память динамическую, поэтому мне надо знать точно, есть ли утечка или нет.