在jobs.removeElementAt(i)之前释放java内存

时间:2014-03-12 10:42:41

标签: multithreading performance memory deadlock job-scheduling

我在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;

            }

0 个答案:

没有答案