Это странно: Когда я начинаю график, используя timer.scheduleAtFixedRate
, это занимает много времени, а затем бросает OutOfMemoryError: Java heap space
, но если я просто назвал timerTask.run()
методом в основном потоке, он прекрасно работает ,OutOfMemoryError Java куча пространства при использовании TimerTask
Метод, который я назвал, не является открытым исходным кодом, поэтому я не могу просто его вставить. Но может ли кто-нибудь помочь мне проанализировать некоторые возможности по этому сценарию. В чем разница между запуском в потоке timerTask и запуском его в основном потоке?
Большое спасибо!
Фрагмент кода так же просто следующим образом:
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
AModule.load(tmpFilePath); //not open-source
}
}
timer.scheduleAtFixedRate(task, new Date(), 1*60*1000); //OOME
//If I change the upper code to:
task.run() //it just works fine
показать ваш код, чтобы мы могли воспроизвести проблему. – Masudul
Пытаться проанализировать код, который мы не видим, является ошибочным положением. –
Отправьте код для нас. И, возможно, проверьте рекурсивные вызовы или на стойкие к памяти экземпляры (завершите/закройте ресурсы, большие объекты и т. Д.). – LastFreeNickname