приложение зависает(замедляется) после часа работы

Я написал приложение, которое должно работать в фоновом режиме. Но после часа работы оно начало зависать. Во первых мне интересно, Есть ли способы оптимизировать программу(что-то по типу объявления переменных единожды). А во вторых стоит ли так реализовывать потоки(единственное в чём я не разбираюсь в моём коде).

//определение потока вывода информации проекта 1
private static Thread resetInfoThread;
private static Runnable resetInfoRunnable;
public static void resetInfo() throws IOException {
    resetInfoRunnable = new Runnable() {
        FrameHandler fh = new FrameHandler();
        @Override
        public void run() {
            try{
                while(true) {
                    fh.setInfo();
                    Thread.sleep(1000);
                }
            }catch (Exception ex) {
                System.err.println(ex.getMessage());
            }
        }
    };
    resetInfoThread = new Thread(resetInfoRunnable);
    resetInfoThread.start();
}

//определение потока проверки и изменения информации проекта 1
private static Thread checkInfoThread;
private static Runnable checkInfoRunnable;
public static void CACInfo()
{
    checkInfoRunnable = new Runnable() {
        @Override
        public void run() {
            try{
                //определяем входные и переменные
                InfoHandler infoHandler = new InfoHandler();
                String[] currencies = InfoHandler.currenties;
                ArrayList<String> rates = new ArrayList<String>();
                int index;
                //бул проверяющий на изменения
                boolean isChangeExist;
                String[] lastString;
                while(true){
                    isChangeExist = false;
                    try{
                        
                        //читаем из файла, и сравниваем с тем, что находится в другом источнике
                        lastString = FileHandler.read().get(FileHandler.read().size() - 1).split(" ");
                        index = 0;
                        rates.clear();
                        for (String current:
                                currencies) {
                            index++;
                            rates.add(infoHandler.getInfo(current));
                            if(!lastString[index+5].equals(infoHandler.getInfo(current))){
                                isChangeExist = true;
                                System.out.println(lastString[index+5] + "!=" + infoHandler.getInfo(current));
                            }
                        }
                        //если в источнике произошли изменения, записываем в файл
                        if (isChangeExist){
                            FileHandler.write(new Date().toString(),rates);
                        }
                        
                        //спим
                        Thread.sleep(1000);
                        
                        //если файл пуст, выполняем другое условие
                    }catch (IndexOutOfBoundsException ex){
                        index = 0;
                        rates.clear();
                        for (String current:
                                currencies) {
                            index++;
                            rates.add(infoHandler.getInfo(current));
                            ex.printStackTrace();
                        }
                        FileHandler.write(new Date().toString(),rates);
                        System.err.println("chto-to strannoe proishodit");
                    }
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    };
    checkInfoThread = new Thread(checkInfoRunnable);
    checkInfoThread.start();
}

Ответы (1 шт):

Автор решения: виктор чернов

Просто надо было чистить таблицу от панелей:

    jPanel.removeAll();

Не тупите как я.

→ Ссылка