2016-02-09 3 views
-3

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

И наконец, при регистрации всех сообщений об ошибках. Строки в объекте StringBuilder записываются в hdf. Проблема, с которой я сталкиваюсь, занимает 6 часов, чтобы сохранить полные ошибки в объекте StringBuilder. Есть ли способ уменьшить время хранения, чтобы запустить код fatser в производственном кластере?

Заранее спасибо.

+0

Почему вы так делаете? –

+0

Просто потому, что я не могу использовать регистратор в этом случае. У нас нет конфигурации log4j в нашем кластере. – Neethu

+2

Я думаю, вам нужно немного объяснить фон, потому что совсем не ясно, почему вы хотите хранить записи журнала в памяти обо всех местах, не говоря уже о гигантской строке. –

ответ

1

Максимальный размер я мог бы добавить к StringBuilder был Integer.MAX_SIZE-2

public static void main(String[] args) { 
    int maxSize = Integer.MAX_VALUE - 2; 
    long start = System.currentTimeMillis(); 
    StringBuilder sb = new StringBuilder(maxSize); 
    while (sb.length() < maxSize) 
     sb.append(' '); 
    long time = System.currentTimeMillis() - start; 
    System.out.println("Took " + time/1e3 + " second to create a StringBuilder of " + sb.length()); 
} 

Печатается

Took 7.415 second to create a StringBuilder of 2147483645 

Это пишет только один символ за один раз, так что это действительно должно быть дольше, чем это.

Смежные вопросы