問題タブ [virtual-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.
iphone - iPhoneアプリは起動時に60MBの仮想メモリを使用します
今、私は私のアプリが多くのグラフィックを使用していることを知っていますが、60MBのグラフィックは使用していません。ただし、Instrumentsは、アプリが起動直後に60MB以上の仮想メモリを使用していることを示しています。コンパイルされたアプリは24MBの大きさで、起動後のアイドル状態のウェルカム画面について話しています。VMサイズがこれほど巨大になる理由はありますか?
java - JVM を使用して、必要に応じて VM 制限のサイズまでメモリ需要を増やしますか?
処理するデータのサイズによってメモリ需要が大きく異なる Java アプリケーションを出荷しています。VM (仮想メモリ) の最大サイズを設定しないと、多くの場合、JVM はビッグ データの GC 障害で終了します。
私たちが見たいのは、使用可能な VM の合計が使い果たされるまで、GC が十分なメモリを提供できないため、JVM がより多くのメモリを要求することです。たとえば、128Mb から始めて、GC が失敗するたびに幾何学的に (または他のステップで) 増やします。
JVM (「Java」) コマンド ラインでは、最大 VM サイズ (さまざまな -Xm* コマンド) を明示的に設定できます。これは、アプリケーションに同梱されている .cmd ファイルで実行しようとしています。しかし、特定の数値を選択すると、次の 2 つの悪い動作のいずれかが発生します。1) 数値がほとんどのターゲット システム (1Gb など) で動作するのに十分小さい場合、ビッグ データには十分な大きさではありません。非常に大きくすると、JVM は実際の VM が指定よりも小さいシステムでの実行を拒否します。
必要に応じて使用可能な VM を使用するように Java を設定するには、事前にその数を知らず、起動時にすべてを取得する必要はありません。
computer-science - コンピューター システム クラスと仮想メモリ - 代数の仕事
もっと数学的な質問かもしれませんが、この質問は、仮想メモリの章でコンピューターシステムの本を読んだことに端を発しているので、ここで質問するのは正当だと感じています。
本には次のように記載されています。
各仮想ページのサイズはP = 2 pバイトです。
私の代数はさびているので、おそらくこれを尋ねる必要があります。今、私が見ている例については、私たちはそれを知っていP = 1024ます. これは、pどちらpが
1024 = 2p真実?
私のひらめきが真実で正しいなら、1024 = 2 10が私の答えになるはずです。それはP=1024とp=10です。
windows - Windows 32 ビット仮想メモリ ページ マッピングの問題
ここから、Windows 32 ビット仮想メモリ ページ マッピングについて学んでいます。
(Vista、Win 7、Server 2003/2008 32 ビット バージョンなど、最新の Windows バージョンをターゲットにしています。)
二つの混乱、
ユーザー空間の仮想メモリ空間は通常 2G に制限されていますが、物理ディスクのページ ストレージは 2G よりもはるかに大きくなる可能性があります。仮想メモリ ページより多くのディスク ページがあるため、理論的には複数のディスク ページを 1 つの仮想アドレス ページにマップできます。ユーザーが何らかの仮想アドレスへのアクセスを要求した場合、複数のディスク ページが 1 つの仮想アドレス ページにマップされている場合、メモリ マネージャーはどのディスク ページにアクセスする必要があるかをどのように認識しましたか?
byte[] 配列が連続した仮想メモリ空間を使用しなければならないなどの制限がある理由がわかりません。理論的には、500M の仮想空間アドレスしか割り当てない場合でも、そのような仮想空間アドレスを再利用して、ディスク ページ ファイルをマップ/アンマップし続け、2G よりも大きく消費することができると思います。
何か案は?
c - C でのポインター実装の詳細
以下にリストした仮定に違反するアーキテクチャを知りたいです。また、すべてのアーキテクチャで間違っている仮定があるかどうか (つまり、完全に間違っている仮定があるかどうか) を知りたいです。
sizeof(int *) == sizeof(char *) == sizeof(void *) == sizeof(func_ptr *)
特定のアーキテクチャーのすべてのポインターのメモリー内表現は、指すデータ型に関係なく同じです。
ポインターのメモリ内表現は、アーキテクチャと同じビット長の整数と同じです。
ポインター データ型の乗算と除算は、コンパイラによってのみ禁止されています。注: はい、これが無意味であることはわかっています。つまり、この誤った使用法を禁止するハードウェア サポートはありますか?
すべてのポインター値は、単一の整数にキャストできます。言い換えれば、セグメントとオフセットをまだ利用しているアーキテクチャは何ですか?
ポインタをインクリメントすることは
sizeof(the pointed data type)、ポインタによって格納されたメモリ アドレスに加算することと同じです。が の場合、pは の4 バイト後のメモリ アドレスに等しくなります。int32*p+1p
私は、連続した仮想メモリ空間で使用されるポインターに最も慣れています。その使用法については、通常、それらを数直線上のアドレスと考えることで得ることができます。スタック オーバーフローの質問ポインターの比較を参照してください。
java - Java Webプログラミングで仮想メモリ(Linuxファイルシステムでスワップ)を使用する方法
私はJava Webアプリケーションで働いています。一部のセクションでは、メモリ (RAM) に保存して永続化する非常に巨大なツリー変数を使用しています。これを仮想メモリ (スワップ) に移行できますか? 注:巨大なツリーは、提案Ajaxテキストボックスで使用するすべてのユーザーの名前と電子メールで構成されています。
c++ - 仮想バイトを増やす操作と機能
Windowsの32ビットプロセスでメモリ不足の問題が発生したため、パフォーマンスモニターを使用してそのプロセスの特定のカウンターをログに記録し始めました。
仮想バイトがプライベートバイトとワーキングセットの両方よりも高いのは正常ですが、私の場合、仮想バイトはプライベートバイトとワーキングセットの両方よりもはるかに高いことがわかりました。
どの特定の操作とWin32/CRT関数(CまたはC ++)は、仮想バイトを増やしますが、プライベートバイトとワーキングセットは増やしませんか?
パフォーマンスモニターのさまざまなカウンターの説明を理解していれば、それはある種の共有リソースになると思います。
異なるリリースのWindowsのメモリカウンター、および同じリリースのWindowsの異なるアプリケーションで使用する命名規則には、(控えめに言っても)多少の混乱があるように思われるので、次のようにまとめました。
MSDNからの情報
MSDN-Windowsリリースのメモリ制限によると、32ビットプロセスごとの32ビットWindowsのユーザーモード仮想アドレス空間の制限は通常2GBです。IMAGE_FILE_LARGE_ADDRESS_AWAREおよびを使用して最大3GBにすることができます4GT。
以下は、 MSDN-メモリパフォーマンス情報によると、パフォーマンスモニターのさまざまなカウンターと、タスクマネージャーの対応する列および情報を保持するWin32構造の説明です。
仮想バイト
Virtual Bytesは、プロセスが使用している仮想アドレス空間の現在のサイズ(バイト単位)です。仮想アドレス空間の使用は、必ずしもディスクまたはメインメモリページの対応する使用を意味するわけではありません。仮想空間は有限であり、プロセスはライブラリをロードする能力を制限する可能性があります。
タスクマネージャーXP:N / A
タスクマネージャーVista:N / A
構造:MEMORYSTATUSEX.ullTotalVirtual-MEMORYSTATUSEX.ullAvailVirtual
プライベートバイト
Private Bytesは、他のプロセスと共有できない、このプロセスが割り当てたメモリの現在のサイズ(バイト単位)です。
タスクマネージャーXP:VMサイズ
タスクマネージャーVista:コミットサイズ
構造:PROCESS_MEMORY_COUNTERS_EX.PrivateUsage
ワーキングセット
ワーキングセットは、このプロセスのワーキングセットの現在のサイズ(バイト単位)です。ワーキングセットは、プロセス内のスレッドが最近アクセスしたメモリページのセットです。コンピューターの空きメモリがしきい値を超えている場合、ページは使用されていなくてもプロセスのワーキングセットに残ります。空きメモリがしきい値を下回ると、ページはワーキングセットから削除されます。それらが必要な場合は、メインメモリを離れる前にワーキングセットにソフトフォールトされます。
タスクマネージャーXP:Memの使用法
タスクマネージャーVista:ワーキングセット
の構造:PROCESS_MEMORY_COUNTERS_EX.WorkingSetSize
macos - OS X 10.5/10.6で独自のプロセスのメモリマップを取得する
Linuxでは、プロセスのメモリマップを確認する最も簡単な方法は、次の/proc/PID/mapsようなものを確認することです。
プロセスは、OSX 10.5または10.6でのプロセス自体のメモリマップに関する同等の情報(アドレス範囲、保護、マップされたファイル名など)をどのように取得できますか?
linux - Linux3/1仮想アドレス分割
highmemが1GBを超えるRAMに対応する必要性を理解することになると、何かが足りません。誰かが私がどこで間違っているのか指摘できますか?ありがとう!
私が知っていること:
1 GBのプロセスの仮想メモリ(高メモリ領域)は、カーネル操作用に予約されています。ユーザースペースは残りの3GBを使用できます。これは3/1分割です。
VMの仮想メモリ機能は、(連続した)仮想メモリページを物理ページ(RAM)にマップします。
私が知らないこと:
カーネル仮想メモリを使用する操作は何ですか?カーネル空間のkmalloc(...)のようなものはカーネル仮想メモリを使用すると思います。
このスキームでは4GBのRAMを使用できると思います。物理スペースをアドレス指定するときに、カーネルの1GB仮想スペースが制限要因である理由がわかりません。これは私の理解が崩壊するところです。お知らせ下さい。
私はこれ(http://kerneltrap.org/node/2450)を読んでいます。これは素晴らしいことです。しかし、それは私の好みに合った私の質問に完全には対応していません。
linux - Linuxで仮想メモリを使い果たすことはできますか?
仮想プログラムに似た私のアプリケーション:
メモリリークはありませんが、私のシステムでは、メモリの消費量(上部、列VSS)が無制限に増加します(使用可能な物理メモリの300%など)。これは正常ですか?
更新-しばらくの間メモリを使用してから解放します。これは違いですか?