|
|
|
StringBuffer & OutOfMemoryError
|
|||
|---|---|---|---|
|
#18+
Привет всем, Есть код, который читает большие UTF строки: public static String readUTFSafely(DataInputStream inputStream) throws IOException { int blocksAmount = inputStream.readInt(); StringBuffer buffer = new StringBuffer(blocksAmount * BLOCK_SIZE); for (int i = 0; i < blocksAmount; ++i) { buffer.append(inputStream.readUTF()); } return buffer.toString(); } При определенных ситуациях этот код выбрасывает OutOfMemoryError. Как я понимаю, из-за того, что StringBuffer не может выделить достаточно памяти. Когда в виртуальную машину передаётся параметр -Xmx256M, тогда этих сложностей не возникает. Такой вот код таких проблем не создаёт public static String readUTFSafely(DataInputStream inputStream) throws IOException { int blocksAmount = inputStream.readInt(); String result = ""; for (int i = 0; i < blocksAmount; ++i) { result += inputStream.readUTF(); } return result; } Насколько я знаю, String всё время перераспределяет память, что влияет на время выполнения. А параметр -Xmx задавать не хочется. В чём загвоздка и как решить этот вопрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 11:41:34 |
|
||
|
|

start [/forum/topic.php?fid=59&tid=2146203]: |
0ms |
get settings: |
15ms |
get forum list: |
22ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
51ms |
get topic data: |
16ms |
get forum data: |
4ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
| others: | 308ms |
| total: | 471ms |

| 0 / 0 |
