問題タブ [heap-memory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - glibcの文字列実装を使用してスタックにstd::stringを割り当てるにはどうすればよいですか?
私の理解では、上記のコードはデフォルトのアロケータを使用してnewを呼び出します。したがって、std :: string fooがスタックに割り当てられていても、foo内の内部バッファーはヒープに割り当てられます。
スタックに完全に割り当てられる文字列を作成するにはどうすればよいですか?
java - Java アプリケーションのメモリ効率を高めるにはどうすればよいでしょうか?
大量 (数百万) の存続期間の長いオブジェクトを持つアプリケーションのヒープ サイズの使用をどのように最適化しますか? (大きなキャッシュ、データベースから大量のレコードをロードする)
- 適切なデータ型を使用する
- 他のデータ型を表すために java.lang.String を避ける
- オブジェクトの重複を避ける
- 値が事前にわかっている場合は列挙型を使用します
- オブジェクト プールを使用する
- String.intern() (良いアイデア?)
- 必要なオブジェクトのみをロード/保持
一般的なプログラミングまたは Java 固有の回答を探しています。ファンキーなコンパイラ スイッチはありません。
編集:
ヒープに何百万回も出現する可能性のある POJO のメモリ表現を最適化します。
ユースケース
- 巨大な csv ファイルをメモリにロードします (POJO に変換されます)
- Hibernate を使用してデータベースから何百万ものレコードを取得する
回答の再開:
- フライウェイト パターンを使用する
- コピーオンライト
- 3 つのプロパティを持つ 10M オブジェクトをロードする代わりに、サイズが 10M の 3 つの配列 (または他のデータ構造) を持つ方が効率的ですか? (データを操作するのは面倒かもしれませんが、メモリが本当に不足している場合は...)
coldfusion - CFINVOKEとColdFusionのjava.lang.OutOfMemoryError
ColdFusionのヒープに問題があります。これが私が実験している小さなサンプルアプリケーションです。cfinvoke
メソッドを呼び出した後init
、コンポーネントにローカルなすべての変数を破棄すると思いました。しかし、明らかにそうではありません。アプリケーションは以下のように動作しますが、ループにゼロを追加するindex.cfm
と壊れます。それを引き起こすためにヒープに何が格納されていますか?これを回避する方法はありますか?
index.cfm:
test.cfc:
そして、ここにエラーメッセージがあります:
どんな助けでもいただければ幸いです。
c++ - C++の「new」と「malloc」および「calloc」の違いは何ですか?
new
「 」と「malloc
」と「 」と「 」と「 」の違いは何calloc
ですか?
(いつ) 「 」以外に何か必要new
ですか?
それらの1つは他のものを使用して実装されていますか?
java - Java jar により多くのヒープ領域を割り当てる
コマンド ラインからプログラムを実行する場合、 を使用java -Xms -Xmx
してヒープ サイズを指定できます。.jar ファイルをダブルクリックしてプログラムを実行する場合、標準より多くのヒープを使用する方法はありますか?
memory - 変更可能な状態値がヒープから解放されるのはいつですか?
F# WikiBook のEncapsulating Mutable Stateセクションには、次のコード スニペットがあります。
最初は、変更可能な値が呼び出されるたびにcounter
インクリメントされるという事実を飲み込むのは簡単に思えました。incr
しかし、しばらく考えた後、私が理解できなかったのは、いつcounter
ヒープから解放され、counter
インクリメントされる前に以前の値をどのように参照しているのかということでした。counter
関数スコープ内での生活は、incr
複数の関数呼び出しを通じてどのように生き残るのでしょうか?
主な質問は次のとおりです。
- いつ
counter
ヒープから解放されますか? counter
メモリリークじゃない?
java - Eclipse でヒープ (ファイルへのダンプ) を保存するにはどうすればよいですか?
MyEclipse から GA/AI を実行またはデバッグすると、次のエラーが発生します。
スレッド「メイン」の例外 java.lang.OutOfMemoryError: Java ヒープ領域
eclipse.ini は次のようになります。
MyEclipse は次のように呼び出されます。
これからVM設定を上げます:
効果はありませんでした。だから私はヒープをファイルにダンプするようにしようとしていますが、これらを配置しています:
プログラムの引数は効果がありませんでした。より多くのメモリ使用量の分析で何かを動作させるにはどうすればよいですか? たとえば、jstack は現在、Windows プラットフォームでは使用できません。SendSignal を使用しても、目に見える効果はありません。
c - malloc() と free() は割り当てられたサイズとアドレスをどこに保存しますか?
割り当てられたアドレスとそのサイズはどこmalloc()
に保存されますか (Linux GCC)? free()
一部の実装では、実際に割り当てられたメモリの前にそれらを保存することを読みましたが、テストでは確認できませんでした。
背景、おそらく誰かがこれについて別のヒントを持っています:
他のプロセスの文字列の現在の値を判断するために、プロセスのヒープメモリを分析して少し実験しています。プロセス ヒープ メモリへのアクセスとその中の探索は問題ありません。ただし、文字列の値が変更され、プロセスがメモリの新しい部分を毎回割り当てるため、文字列のアドレスが変更されます。文字列の形式は固定されているため、簡単に見つけることができますが、いくつかの変更を加えた後でも、古いバージョンの文字列がヒープ メモリに残っているため (おそらく解放されますが、再利用/上書きはされません)、そのため、私にはわかりません。現在の文字列はどれですか。
したがって、現在のものを引き続き見つけるために、メモリ内で見つけた文字列がまだ使用されているかどうかを、そのアドレスとアドレスを比較して確認し、知りたいと考えていmalloc()
ますfree()
。
チャオ、エルマー
java - JVM が Xms の値で開始されるようにする方法
3G の開始ヒープ サイズ (-Xms3072m VM 引数で設定) で Java プログラムを実行すると、JVM はそのサイズで開始しません。400m 程度から開始し、必要に応じてさらにメモリを取得し続けます。
これは私にとって深刻な問題です。しばらくすると、JVMが上記の量を必要とすることを私は知っています。また、必要に応じて JVM のメモリが増加すると、速度が低下します。JVM がより多くのメモリを取得する間、かなりの時間がガベージ コレクションに費やされます。そして、メモリの獲得は高価な作業だと思います。
JVM が実際に開始ヒープ サイズ パラメータを尊重していることを確認するにはどうすればよいですか?
更新:このアプリケーションは多くのオブジェクトを作成しますが、そのほとんどはすぐに死んでしまいます。結果として得られるオブジェクトの一部は、メモリ内に保持する必要があります (若いヒープから転送されます)。この操作中、これらのオブジェクトはすべてメモリ内にある必要があります。操作後、若いヒープ内のすべてのオブジェクトが正常に要求されていることがわかります。したがって、メモリリークはありません。
ヒープサイズが 3G に達すると、同じ操作がスムーズに実行されます。これは、必要な余分な時間がメモリの取得に費やされていることを明確に示しています。
このSun JDK 5.
winapi - VirtualAllocとHeapAllocの違いは何ですか?
、、、などVirtualAlloc
、 Windows環境でメモリを割り当てる方法はたくさんあります。HeapAlloc
malloc
new
したがって、それらの違いは何ですか?