@xverizex

Есть ли здесь утечка памяти?

Я никак не могу понять какие есть инструменты по показу утечек памяти для 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. но функции этого класса должны возвращать память динамическую, поэтому мне надо знать точно, есть ли утечка или нет.
  • Вопрос задан
  • 201 просмотр
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019 Куратор тега Java
Bigdata Engineer
Предположительно - есть поскольку вы используете NewByteArray но не используете DeleteLocalRef.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы