質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

1580閲覧

JavaScript heap out of memoryが発生しました

putaro

総合スコア9

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/09/22 14:31

前提・実現したいこと

加速度センサーのデータをvega-liteを使って可視化させようと試みているのですが、外部からファイルを取得したので1つの文字列になりました。そこで文字列メソッドmatch()を使ってデータを分割取得しようとしたら、先のエラーが発生しました。何か解決方法があれば知りたいです。

使用環境

macOS ver 11.6
node.js ver v16.8.0
express ver 4.16.1

取得したデータ(文字列)

0.001,-0.002,-0.071 0.004,-0.002,-0.073 0.000,0.006,-0.066 -0.008,-0.001,-0.066 -0.009,-0.007,-0.056 0.010,0.002,-0.058 0.006,-0.008,-0.066 ***続く…

データを整形するコード

js

1 var Vispc = fetch(url.url) 2 .then(res => res.text()) 3 .then(body => { 4 //console.log(body); 5 var pattern = /(^\d.*?,\d.*?,\d.*)/g; 6 var resultMatch = body.match(pattern); 7 console.log("match : " + resultMatch[0]) 8 var valuesAry = []; 9 while(resultMatch != null) { 10 var valuesObj = {}; 11 valuesObj.x = resultMatch[0]; 12 valuesObj.y = resultMatch[1]; 13 valuesObj.y = resultMatch[2]; 14 valuesAry.push(valuesObj); 15 } 16 console.log("valuesAry" + valuesAry); 17 });

発生したエラー

<--- Last few GCs ---> [6745:0x7fc641f00000] 106724 ms: Scavenge 2023.5 (2058.4) -> 2023.3 (2069.2) MB, 12.6 / 0.0 ms (average mu = 0.158, current mu = 0.114) allocation failure [6745:0x7fc641f00000] 106748 ms: Scavenge 2030.3 (2069.2) -> 2031.0 (2069.9) MB, 16.0 / 0.0 ms (average mu = 0.158, current mu = 0.114) allocation failure [6745:0x7fc641f00000] 106772 ms: Scavenge 2031.1 (2069.9) -> 2030.2 (2093.2) MB, 23.8 / 0.0 ms (average mu = 0.158, current mu = 0.114) allocation failure <--- JS stacktrace ---> FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory 1: 0x10627bd35 node::Abort() (.cold.1) [/Users/yuta/.anyenv/envs/nodenv/versions/16.8.0/bin/node] 2: 0x104f71239 node::Abort() [/Users/yuta/.anyenv/envs/nodenv/versions/16.8.0/bin/node] 3: 0x104f713af node::OnFatalError(char const*, char const*) [/Users/yuta/.anyenv/envs/nodenv/versions/16.8.0/bin/node] 4: 0x1050efb17 v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [/Users/yuta/.anyenv/envs/nodenv/versions/16.8.0/bin/node] 5: 0x1050efab3 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/Users/yuta/.anyenv/envs/nodenv/versions/16.8.0/bin/node] 6: 0x1052a6a95 v8::internal::Heap::FatalProcessOutOfMemory(char const*) [/Users/yuta/.anyenv/envs/nodenv/versions/16.8.0/bin/node] 7: 0x1052aaa43 v8::internal::Heap::RecomputeLimits(v8::internal::GarbageCollector) [/Users/yuta/.anyenv/envs/nodenv/versions/16.8.0/bin/node] 8: 0x1052a73a5 v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [/Users/yuta/.anyenv/envs/nodenv/versions/16.8.0/bin/node] 9: 0x1052a4a94 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/Users/yuta/.anyenv/envs/nodenv/versions/16.8.0/bin/node] 10: 0x1052a3988 v8::internal::Heap::HandleGCRequest() [/Users/yuta/.anyenv/envs/nodenv/versions/16.8.0/bin/node] 11: 0x105250851 v8::internal::StackGuard::HandleInterrupts() [/Users/yuta/.anyenv/envs/nodenv/versions/16.8.0/bin/node] 12: 0x105630c48 v8::internal::Runtime_StackGuard(int, unsigned long*, v8::internal::Isolate*) [/Users/yuta/.anyenv/envs/nodenv/versions/16.8.0/bin/node] 13: 0x1059ba419 Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit [/Users/yuta/.anyenv/envs/nodenv/versions/16.8.0/bin/node] Abort trap: 6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

while(resultMatch != null)のループ内で resultMatchの値が変わることはないので、永久ループになってます。

正規表現によるマッチングをループの中に移動する必要があります。MDNのexec()の最初の例やmatchAll()が応用しやすいかと思います。

投稿2021/09/22 14:57

編集2021/09/22 15:08
int32_t

総合スコア21695

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

putaro

2021/09/22 17:16

回答ありがとうざいます。アドバイスの通り正規表現オブジェクトメソッドexec()を使ったコードに修正したみました。
guest

0

解決

suwmn50799さんのご助言を参考にコードを修正しました。
正規表現オブジェクトを使用して、区切った値をさらに分割してオブジェクトに代入しています

js

1 var Vispc = fetch(url) 2 .then(res => res.text()) 3 .then(body => { 4 //console.log(body); 5 // 正規表現 6 var myReg = new RegExp('^\d.*?,\d.*?,\d.*','mg'); 7 var resultMatch = myReg.exec(body); 8 var valuesAry = []; 9 var cnt = 0; 10 11 while(resultMatch != null) { 12 var valuesObj = {}; 13 var splitValueAry; 14 //console.log("index " + resultMatch.index + " match : " + resultMatch[0]); 15 16 splitValueAry = resultMatch[0].split(","); 17 //console.log("splitValueAry : " + splitValueAry[2]); 18 19 valuesObj.x = splitValueAry[0]; 20 valuesObj.y = splitValueAry[1]; 21 valuesObj.z = splitValueAry[2]; 22 23 valuesAry.push(valuesObj); 24 25 resultMatch = myReg.exec(body) 26 } 27 console.log("valuesAry" + JSON.stringify(valuesAry)); 28 });

結果

出力結果の一部です

{"x":"0.018","y":"0.034","z":"0.066"}, {"x":"0.010","y":"0.044","z":"0.079"}, {"x":"0.018","y":"0.031","z":"0.069"}

投稿2021/09/22 17:12

編集2021/09/22 17:21
putaro

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

var resultMatch = body.match(pattern); んとこで、 resultMatchresultMatch != null を満たすもんになっとったら、その後resultMatchが変わることはないねんから、while(resultMatch != null) {・・・} のループが無限ループなってしもうてんのやろ。そのせいや。多分。

投稿2021/09/22 14:50

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

putaro

2021/09/22 16:55

回答ありがとうございます。正規表現に関する知識不足でした.。色々調べて解決いたしました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問