我在Java类中使用以下方法。当下面的方法执行时,内存不断增加。如果我打电话给jobs.removeElementAt(i);记忆被释放了。但是当if(updateJobNode(jn)== null)时会发生这种情况。在这种情况下,只有内存从jvm释放。我需要在执行updateJobNode(jn)之前释放内存。是否有可能这样做?等待你的肯定回复。
private synchronized long runJobs( ) {
long minDiff = Long.MAX_VALUE;
long now = System.currentTimeMillis( );
for (int i=0; i < jobs.size( );) {
JobNode jn = (JobNode) jobs.elementAt(i);
if (jn.executeAt.getTime( ) <= now) {
if (tp != null) {
tp.addRequest(jn.job);
} else {
Thread jt = new Thread(jn.job);
jt.setDaemon(false);
jt.start( );
}
if (updateJobNode(jn) == null) {
jobs.removeElementAt(i);
dlock.release( );
}
} else {
long diff = jn.executeAt.getTime( ) - now;
minDiff = Math.min(diff, minDiff);
i++;
}
}
return minDiff;
}