
Javaを使って、システムのメモリ不足を引き起こす方法を考えています。
(動作検証のためで、悪いことを考えているわけではありません^^;)
下記のプログラムでメモリを大量に消費するかなと思ったのですが、
Linux上のvmstatやtopなどで確認してもそれほど変化がありません。
while (true) {
Integer[] ii = new Integer[100];
for (int i = 0; i < 100; i++) {
ii[i] = new Integer(i);
}
}
Javaの1プロセスが使えるメモリの上限があるので、メモリを食いつぶすプロセスを
大量に実行すれば良いと考えているのですが、メモリを食いつぶす方法が分かりません。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
このプログラムだと、whileで繰り返してInteger[] ii = new Integer[100];すると、その前の繰り返しでiiに設定されていた配列は、どこからも参照されなくなるため、ガベージコレクションの対象となる。
このため、常に、現在使っているiiに設定されているInteger配列以外は、必要に応じてガベージコレクションで消去されるため、永遠にメモリ不足にはならない。メモリ不足を起こすには、生成されたオブジェクトがすべて参照された状態である必要がある。試してないが、例えば、ArrayListなどに次々とaddしていくのを繰り返したりすれば、メモリが消費される一方になるんじゃないだろうか。
No.2
- 回答日時:
私の場合は、クラスを多数作りすぎて、OutOfMemoryErrorを投げられたため、try catchで、スローされるとそこで、インスタンス化を止めるプログラムを作ったことがありますね。
大量のクラスをインスタンス化すると、イヤでも出会えますよ。
ちなみに、OSの動作等は問題は起こりませんでした。
e00083さん、
ArrayListでうまくいきましたが、try catchは参考になりました。
catchでスリープすると、良い感じの動作になりました。
ありがとうございました。
ちなみに10数個プロセスを実行すると、スワップ領域も食いつくした後、Linuxが強制的に再起動してしまいました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAの配列サイズとメモリに関して
-
「ヒープサイズの設定」て何?
-
組み込み系でのmallocについて
-
メモリが不足しています(VBA)
-
C言語で、メモリを解放しないで...
-
メモリアロケーション異常の発...
-
メモリを解放しないとどうなる?
-
バッチファイルでの実行EXEのメ...
-
VB.netでUSBメモリの固有I...
-
C++のCopyFileでメモリが増える
-
[ちょっと息抜き]メモリを解放 ...
-
ReadEventLogについて
-
プログラムが偶然動く
-
これて逆じゃないですか?
-
メモリ不足
-
C言語における再帰呼び出しの...
-
ファイルの読み込みが遅い
-
Visual Basic Net2003
-
ゲームプログラミングのマップ...
-
C#のOutOfMemoryException発生...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語で、メモリを解放しないで...
-
Access Violationについて
-
VBAの配列サイズとメモリに関して
-
メモリのセグメント違反の解決...
-
メモリが不足しています(VBA)
-
メモリ不足
-
大容量のメモリ確保をスワップ...
-
ファイルマッピング関数で失敗
-
PC-98で拡張メモリを使え...
-
エラーについて
-
「ヒープサイズの設定」て何?
-
オフスクリーンサーフェスへの...
-
C言語における再帰呼び出しの...
-
エクセルのメモリ使用状況/Appl...
-
1ページに収まるオブジェクト...
-
新規購入PCのスペックについて...
-
組み込み系でのmallocについて
-
ルネサスマイコン(R8C) ビルド...
-
4GB搭載したマシンのメモリ情...
-
Visual Basic Net2003
おすすめ情報