N'ayant aucune connaissance ou presque concernant la facon avec laquelle un programme java est interprété je m'adresse à vous concernant un probleme de memoire.

Je fais une acquisition continue d'un signal et lorsque l'acquisition est lancée l'utilisation memoire de mon processus java ne fait qu'augmenter et ne revient jamais à l'etat initial meme une fois l'acquisition stoppée.

Voici mon code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class AcquisitionContinueTimed extends Timer{
 
	UI refUI;
	AcquisitionContinue taskAcq;
 
 
	public AcquisitionContinueTimed(UI refUI){
		this.refUI = refUI;
		taskAcq = new AcquisitionContinue();
	}
 
 
	public void run(){
 
		refUI.data = taskAcq.ReadAcqCont(refUI.taskHandle, refUI.data, refUI.nsample);
 
		refUI.TabbedPanel.getSelectedComponent().repaint(); 
	}
}
La methode run() est appelée par le timer toutes les 100ms.

Je pense avoir isolé le probleme, il s'agirait de la ligne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
refUI.data = taskAcq.ReadAcqCont(refUI.taskHandle, refUI.data, refUI.nsample);
car quand je mets cette ligne en commentaire l'utilisation memoire n'augmente plus.

data dans ma classe UI etant un double[]

La fonction ReadAcqCont:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
JNIEXPORT jdoubleArray JNICALL Java_AcquisitionContinue_ReadAcqCont
(JNIEnv *env, jobject jobj, jint taskHandle, jdoubleArray datarray, jint jbuffersize){
 
	int32       read=0;
	int i;
	float64 *datab = (*env)->GetDoubleArrayElements(env, datarray, NULL); //buffer
	float64 *data = (float64 *)malloc(jbuffersize*sizeof(float64));
	DAQmxReadAnalogF64(taskHandle,-1,10.0,DAQmx_Val_GroupByScanNumber,data,jbuffersize,&read,NULL); // A CHANGER PEUT ETRE
	datab[0] = read;
	for(i=read+1; i<jbuffersize; i++){
		datab[i-read] = datab[i];
 
	}
	for(i=0; i<read; i++){
		datab[i-read+jbuffersize] = data[i];
	}
	(*env)->ReleaseDoubleArrayElements(env,datarray,datab,0);
	return(datarray);
}
Merci d'avance si vous avez une idée.