プロが教えるわが家の防犯対策術!

当方、メモリリークについてほとんど意識したことないため、次の場合って
メモリリークおこすのですか?
自分の予想だと、strはfor内のローカル変数であり、次のループでStringのインスタンスは
参照されなくなるので、メモリリークは起こさないと思います。

クラス名:MemTyosa
public class MemTyosa {
public static void main(String args[]){
for(int i = 0; i < 10000; i++) {
String str = new String(Factory.factroyStr);
}
}
}

クラス名:Factory
public class Factory {
static public String factroyStr = "abc";
}

メモリリークはどのようなコードだと起こすのでしょうか?

以上、よろしくお願いします。

A 回答 (3件)

以下で瞬く間にOutOfMemoryエラーが出ました


import java.util.ArrayList;
class APN{
public static void main(String[] args){

ArrayList<String> a=new ArrayList<>();

while(true){
a.add("m46djeq@ d@xzdjr");
}

}

}
    • good
    • 0
この回答へのお礼

そりゃそうだろ!!
失礼しました。Javaのメモリリークとはそのことですよね。

お礼日時:2017/04/08 23:42

質問のコードではメモリーリークは起きません。


またJavaは従来的な意味でのメモリーリークは原理的に起こりません。

Javaでいうところのメモリーリークとはオブジェクトの置き忘れの
ことです。オブジェクトをマップやリストに登録したまま忘れる
というパターンが多いですね。
    • good
    • 0

言語仕様としては起こりません。


ただし、小さなNew領域、大きなOld領域、重いガーベッジコレクションアルゴリズム、小さなガーベッジコレクションによるストップタイムといった組み合わせにすると、メモリリークが起こります。
#要するに、メモリ割り当てにガーベッジコレクションが追い付いていない状態

ただ、ループ回数も大したことがありませんし、加えてたった3文字程度の小さくて単純なStringオブジェクトを生成した程度でそのような状態になるには相当特殊な状況であり想定する方が難しいと思います。
#相当非力な組み込み用ARMとかでやったら起こせるかも…?そんな感じです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!