回答編集履歴

5

追記

2018/07/26 13:56

投稿

umyu
umyu

スコア5846

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

追記

2018/07/26 13:55

投稿

umyu
umyu

スコア5846

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

追記

2018/07/26 13:19

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
 
32
32
 
33
- 処理対象データをメモリに全部載せているのが`OutOfMemoryError`の因であるのであって。
33
+ 処理対象データをメモリに全部載せているのが`OutOfMemoryError`の1つの要因であるのであって。
34
34
 
35
35
 
36
36
 

2

追記

2018/07/26 12:04

投稿

umyu
umyu

スコア5846

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

追記

2018/07/26 12:03

投稿

umyu
umyu

スコア5846

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
- メモリに処理対象データを全部載せているのが`OutOfMemoryError`の原因であるのであって。
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
+ 指示者に確認するのが先決ですが、どうやって解析結果が正しいか保証するのかを一度考えてみてくださいな。