Я работал над топологией Storm, я прочитал из файла в методе «Выполнение (кортеж)» и java выбрасывает мне «Java .lang.OutOfMemoryError: превышен верхний предел GC ". Программа отлично работает, пока она не выкинет эту ошибку из-за слишком большого использования GarbageCollector (я думаю). Один и тот же код, который используется, работает отлично, проблема заключается в крайнем совпадении моей реализации Storm. Я думаю, что это потому, что программа тратит слишком много времени на сборщик мусора, и, как я его запрограммировал, я думаю, что он создает много читателей для одного и того же файла и Bolt каждый раз, когда он выполняет кортеж. Мне было интересно, можно ли прочитать файл в методе «Подготовить()», сохранить его в массиве String, и если это так, я спрашиваю: будет ли он создавать только один считыватель и массив String для одного экземпляра Bolt?Storm чтение файлов бросает «Java.lang.OutOfMemoryError: превышен лимит накладных расходов GC»
Вот пример моего Болт:
public static class FilterSomeBolt extends BaseRichBolt {
OutputCollector _collector;
public void prepare(Map conf, TopologyContext context, OutputCollector collector) {
_collector = collector;
}
public void execute(Tuple tuple) {
String entr = tuple.getString(1);
boolean flagRet=false;
try {
String fileName2 = (String)"file.csv";
BufferedReader reader2 = new BufferedReader(new FileReader(fileName2));
// read and ignore the header if one exists
String line2 =reader2.readLine();
while(line2!= null){
if(line2.toLowerCase().contains("something")&&line2.toLowerCase().contains(entr.substring(1, 8).toLowerCase())){
flagRet=true;
}//end if
line2 =reader2.readLine();
}//end while
}..........................
............................//tuple sent
Я пытаюсь понять эти методы, и был бы признателен за помощь. Спасибо заранее!
Извините, я не поместил обновление строки2, но оно есть, я отредактирую вопрос, купила, заканчивая в самый раз, ошибки нет, спасибо! – Amnor
теперь пока что похоже на то, что у меня есть, я сокращал код, который я сейчас не вызываю, и я пропустил обновление переменной «line2», спасибо за головы! – Amnor
Помог, потому что я пропустил, чтобы опубликовать обновление «line2» на вопрос, но это не решение, поэтому мой код действительно имеет это обновление строки в нем. Я ценю помощь, но вопрос все еще остается, поэтому я поддержал ваш ответ, но я не могу принять его как правильно, потому что вы помогли в публикации вопроса, но не в проблеме программирования, чтобы принять вопрос, он должен решить проблема программирования. Спасибо за вашу помощь, поняв, что я забыл обновление строки2 на почте, так или иначе :) – Amnor