Процессор с чрезмерным тактированием приводит к фатальной ошибке в JRE - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь прочитать очень большие текстовые файлы (файлы облака по 100 гигабайт), и моя программа eclipse прочитала их нормально, но это заняло некоторое время. Я разогнал свой процессор и теперь получаю это фатальное сообщение об ошибке. Он утверждает, что «Не удалось записать дамп ядра. Мини-дампы не включены по умолчанию в клиентских версиях Windows», однако я попытался включить их, и я все еще получаю сообщение. Есть идеи? Вот мой класс для чтения файлов, я знаю его плохой код, но сомневаюсь, что это проблема.

public class text_file_reader {

    private volatile String[] data= new String[100000000];
    private volatile int count =0;
    public text_file_reader (String filename) {


        try {

            String line = null;
            FileReader fileReader = new FileReader(filename);
            BufferedReader bufferedReader = new BufferedReader(fileReader);

            int i=0;

            while((line = bufferedReader.readLine()) != null) {
                data [i] = bufferedReader.readLine();
                count++;
                i++;
            }   

            bufferedReader.close();         
        }
        catch(FileNotFoundException ex) {
            System.out.println( "Unable to open file '" + filename + "'");                
        }
        catch(IOException ex) {
            System.out.println("Error reading file '" + filename + "'");                  
        }
    }

    public String[] getData() {
        return data;
    }

    public int getCount() {
        return count;
    }
}

1 Ответ

0 голосов
/ 07 ноября 2019

Что ж, похоже, ваша программа пытается прочитать и сохранить в памяти очень большой файл в виде огромного массива строк.

Я подозреваю, что это приводит к значительному количеству мусора. Кроме того, поскольку объем достижимых данных будет расти до десятков или сотен гигабайт, GC будет выполнять большую работу и многократно обращаться к практически всему адресному пространству JVM.

Этот вид этоговероятно, будет стресс для вашего чипсета, тем более что вы разгоняете его. Похоже, что вы выдвинули его до того момента, когда вы получаете аппаратную ошибку, которая вызывает сбой ОС.

Решение:

  1. Не разгоняйте ваш процессор таким образом. Это может сделать вашу систему ненадежной и может привести к необратимому повреждению оборудования.

  2. Подумайте о том, чтобы изменить код, чтобы ему не требовалось хранить 100 000 000 строк в памяти одновременно:

    • Найдите более эффективное представление памяти для ваших данных
    • Измените алгоритмы, чтобы данные не должны были находиться в памяти одновременно.
    • Или ... просто наберитесь терпения.

Я знаю его неверный код, но сомневаюсь, что это проблема.

Напротив, я подозреваю, что в основе проблемы лежит . По крайней мере, я ожидаю, что из-за плохого кода происходит сбой системы для этого приложения, а не для cinebench.

...