回答編集履歴
5
追記
test
CHANGED
@@ -34,11 +34,19 @@
|
|
34
34
|
|
35
35
|
処理対象データをメモリに全部載せているのが`OutOfMemoryError`の1つの要因であるのであって。
|
36
36
|
|
37
|
+
必要なときに必要な分だけ抽出すれば、問題は発生しないかと。
|
38
|
+
|
37
39
|
|
38
40
|
|
39
41
|
以下からは**コードを変更する事が前提の回答**です。
|
40
42
|
|
41
|
-
案a, `BufferedReader#lines()`で一行ずつ処理をする。
|
43
|
+
案a, `BufferedReader#lines()`でファイル読み込み部分をストリーム化して一行ずつ処理をする。
|
44
|
+
|
45
|
+
メリットは必要なメモリが文字列1行分+α(状態変数分)
|
46
|
+
|
47
|
+
デメリットは1,途中の計算値を変数に保持する必要がある点。2,仕様変更に弱い。
|
48
|
+
|
49
|
+
|
42
50
|
|
43
51
|
案b, 計算したり抽出したりするのはデーターベース(DB)が得意な分野なので、DBに解析対象データを入れて、`SQL`で処理をする。(回答者が推す手法)
|
44
52
|
|
4
追記
test
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
|
10
10
|
|
11
|
-
◇VMオプション
|
11
|
+
◇VMオプションの変更
|
12
12
|
|
13
13
|
メリット:作成済みのコードを変更しなくてもよい。
|
14
14
|
|
@@ -30,6 +30,8 @@
|
|
30
30
|
|
31
31
|
|
32
32
|
|
33
|
+
他にも要因があると思いますが、
|
34
|
+
|
33
35
|
処理対象データをメモリに全部載せているのが`OutOfMemoryError`の1つの要因であるのであって。
|
34
36
|
|
35
37
|
|
@@ -46,6 +48,6 @@
|
|
46
48
|
|
47
49
|
---
|
48
50
|
|
49
|
-
解析対象のファイルサイズが500MBだと検証/テストが大変なので、
|
51
|
+
あと解析対象のファイルサイズが500MBだと検証/テストが大変なので、
|
50
52
|
|
51
53
|
指示者に確認するのが先決ですが、どうやって解析結果が正しいかの保証を行うのかを一度考えてみてくださいな。
|
3
追記
test
CHANGED
@@ -30,7 +30,7 @@
|
|
30
30
|
|
31
31
|
|
32
32
|
|
33
|
-
処理対象データをメモリに全部載せているのが`OutOfMemoryError`の
|
33
|
+
処理対象データをメモリに全部載せているのが`OutOfMemoryError`の1つの要因であるのであって。
|
34
34
|
|
35
35
|
|
36
36
|
|
2
追記
test
CHANGED
@@ -46,8 +46,6 @@
|
|
46
46
|
|
47
47
|
---
|
48
48
|
|
49
|
-
率直な感想だと初めて3日のJava初心者に500MBのファイルの解析作業は割り当てる作業ではないと思いますが。。
|
50
|
-
|
51
49
|
解析対象のファイルサイズが500MBだと検証/テストが大変なので、
|
52
50
|
|
53
|
-
指示者に確認するのが先決ですが、どうやって解析結果が正しいかの保証を
|
51
|
+
指示者に確認するのが先決ですが、どうやって解析結果が正しいかの保証を行うのかを一度考えてみてくださいな。
|
1
追記
test
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
◇デフォルトヒープサイズ
|
2
|
+
|
3
|
+
[デフォルト・ヒープ・サイズ](https://docs.oracle.com/javase/jp/8/docs/technotes/guides/vm/gctuning/parallel.html#default_heap_size)
|
4
|
+
|
5
|
+
サーバーVMかクライアントVMかは`java --version`で分かります。
|
6
|
+
|
7
|
+
今どきならサーバーVMかと。
|
8
|
+
|
9
|
+
|
10
|
+
|
1
11
|
◇VMオプション
|
2
12
|
|
3
13
|
メリット:作成済みのコードを変更しなくてもよい。
|
@@ -20,7 +30,7 @@
|
|
20
30
|
|
21
31
|
|
22
32
|
|
23
|
-
|
33
|
+
処理対象データをメモリに全部載せているのが`OutOfMemoryError`の原因であるのであって。
|
24
34
|
|
25
35
|
|
26
36
|
|
@@ -28,9 +38,7 @@
|
|
28
38
|
|
29
39
|
案a, `BufferedReader#lines()`で一行ずつ処理をする。
|
30
40
|
|
31
|
-
案b, 計算したり抽出したりするのはデーターベース(DB)が得意な分野なので、
|
41
|
+
案b, 計算したり抽出したりするのはデーターベース(DB)が得意な分野なので、DBに解析対象データを入れて、`SQL`で処理をする。(回答者が推す手法)
|
32
|
-
|
33
|
-
DBに解析対象データを入れて、`SQL`で処理をする。
|
34
42
|
|
35
43
|
sqliteが導入しやすいかと。[sqlite-jdbc](https://github.com/xerial/sqlite-jdbc)と[ライセンス条項](https://github.com/xerial/sqlite-jdbc#license)
|
36
44
|
|
@@ -38,8 +46,8 @@
|
|
38
46
|
|
39
47
|
---
|
40
48
|
|
41
|
-
率直な感想だと初めて3日のJava初心者に割り当てる作業ではないと思いますが。。
|
49
|
+
率直な感想だと初めて3日のJava初心者に500MBのファイルの解析作業は割り当てる作業ではないと思いますが。。
|
42
50
|
|
43
51
|
解析対象のファイルサイズが500MBだと検証/テストが大変なので、
|
44
52
|
|
45
|
-
指示者に確認するのが
|
53
|
+
指示者に確認するのが先決ですが、どうやって解析結果が正しいかの保証をするのかを一度考えてみてくださいな。
|