Probleme utilisation memoire
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:
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:
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:
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.