問題タブ [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.
.net - .Net 2.0 - 汎用リストはどのくらい効率的ですか?
大量のユーザーデータをメモリに保持するアプリを作成していますが、ほとんどの場合、すべてを List<T> 構造 (およびルックアップが必要な場合は一部の Dictionary<T,T>) に保持しています。
そして、私は疑問に思っています...
リストはどのくらい効率的ですか? それぞれのメモリ オーバーヘッドはどれくらいですか? (つまり、それらに含まれるオブジェクトに加えて、メモリ スペースが必要です) 新しいオブジェクトをインスタンス化するたびに、どのくらいのペナルティを支払う必要がありますか?
より効率的な方法はありますか?
辞書は単なるハッシュテーブルですよね? それとも、効率の悪いデータ構造ですか?
配列を使用したいのですが、常に配列に追加したり削除したりするという典型的な問題があるため、それらを拡大/縮小するのは面倒です。
アイデア/提案はありますか?
編集: 基本的なデータ構造 101 と、追加/削除にはリンク リストの方が優れており、ランダム アクセスには HashTable の方が優れている理由を知っています。
私は主に.Netの特異性について心配しています。たとえば、これらの構造のそれぞれがどれだけのメモリを浪費するか。そして、それらの初期化/強制終了に時間が費やされました。
たとえば、リストのインスタンス化/GC に時間がかかるが、クリアするのにそれほど時間がかからない場合は、リストの小さなプールを待機させておき、それらをクリアしてプールに送り返す必要があるかもしれません。単に逆参照するのではなく、完了したら。
または、Hashtables の方がアクセスは高速ですが、多くのメモリを浪費する場合は、Lists を使用して、項目数が少ない場合はリストをトラバースすることをお勧めします。
また、私のアプリは非常にメモリを集中的に使用するため (memcached のように考えてください)、メモリ使用量にも注目したいと思います...そのような情報をどこで見つけることができるか知っている人はいますか?
windows - Windows ボックスで使用できる RAM の最大量はどれくらいですか?
明らかに、それは 64 ビット Windows です。
また、単一の 64 ビット プロセスが使用できるメモリの最大量はどれくらいですか? 私はそれをすべて使用することを期待していました...(はい、私は自分が何をしているのか知っています。そんなに多くのRAMが必要な場合、私は何か間違ったことをしているに違いないと言わないでください)
また、これは .Net 2.0 プロセスでも同じですか? または、.Net の下限はありますか?
memory - CLRプロファイラー-既存のプロセスへの接続
.Net 2.0のCLRプロファイルのようなものを使用して、(ASP.Netワーカープロセスの)任意の時点でヒープ内でより多くのスペースを使用しているオブジェクトを確認したいと思います。
ただし、CLRプロファイラーでは、アプリを起動することしかできず、既存のアプリに接続することはできません。これは、割り当てとGCも追跡するためだと思いますが、あまり興味がありません。ヒープの現在の状態のスナップショットを取り、そこに何があり、各種類のオブジェクトがいくつあるか、および各オブジェクトタイプによって合計で何バイトが使用されているかを示すものが欲しいです。
何か案は?
c++ - 64bit メモリ割り当て
シンプルな 64 ビット メモリ管理を行うために、C++ で Delphi 互換の dll を作成するように依頼されました。
その背景には、Delphi のシステムが、32 ビットのアドレス指定可能空間の外側にある大量のメモリ チャンクを割り当てる必要があるということがあります。Delphi の開発者は、利用可能な Delphi コマンドでメモリを割り当てることができないと説明してくれました。彼は 64 ビット アドレスを保持できると言っているので、私が提供する関数を呼び出してメモリを割り当て、64 ビット ポインターを彼に返したいだけです。次に、後でメモリを解放する別の関数。
今、私は自由にVS 2008しか持っていないので、最初にDelphi互換のdllを最初に作成できるかどうかさえわかりません。
Delphi の専門家なら誰でも私を助けてくれます。車輪を再発明することなく、彼が必要とするものを達成する方法があるかもしれません. 他の開発者は、Delphi で以前にこれに遭遇したに違いありません。
すべてのコメントに感謝します。
c - malloc()/free() のアラインメント制限
以前の K&R (第 2 版) および私が読んだ他の C 言語のテキストでは、動的メモリ アロケータの実装について次のように説明されていmalloc()
ますfree()
。どうやら、特定のコンピューター ハードウェア アーキテクチャ (CPU、レジスタ、およびメモリ アクセス) によって、特定の値の型を格納およびアドレス指定する方法が制限されているようです。たとえば、4long
の倍数のアドレスから始まる 4 バイト ( ) の整数を格納する必要がある場合があります。
メジャー プラットフォーム (Intel & AMD、SPARC、Alpha) がメモリ割り当てとメモリ アクセスに課す制限はありますか? または、特定のアドレス境界でのメモリ割り当ての調整を安全に無視できますか?
c - C で配列のサイズを確認するにはどうすればよいですか?
C で配列のサイズを確認するにはどうすればよいですか?
つまり、配列が保持できる要素の数ですか?
java - Java メモリ リークを見つける方法
Java でのメモリ リークをどのように見つけますか (JHat などを使用)。基本的な外観を得るために、JHat にヒープ ダンプをロードしようとしました。ただし、ルート参照 ( ref ) またはそれが呼び出されるものを見つける方法がわかりません。基本的に、数百メガバイトのハッシュ テーブル エントリ ([java.util.HashMap$Entry など) があることがわかりますが、マップはいたるところで使用されています...大きなマップを検索する方法はありますか? 、またはおそらく大きなオブジェクトツリーの一般的なルートを見つけますか?
[編集] わかりました、これまでの回答を読みましたが、私は安っぽい野郎だとだけ言っておきましょう (つまり、JProfiler にお金を払うよりも、JHat の使い方を学ぶことに関心があるということです)。また、JHat は JDK の一部であるため、いつでも使用できます。もちろん、JHat にはブルート フォース以外の方法はありませんが、そうであるとは信じられません。
また、実際に変更 (すべてのマップ サイズのログを追加) して、リークに気付くのに十分な時間実行できるとは思いません。
linux - 32 ビット OS で 3GB を超えるビデオ フレームをメモリに保存
職場では、2K (2048*1556px) OpenEXR フィルム シーケンスを再生するアプリケーションがあります。それはうまく機能します..3GBを超えるシーケンス(非常に一般的)を除いて、すべてのマシンに8〜16GBのメモリがあるにもかかわらず(Linux BIGMEMスタッフを介してアドレス指定可能)、メモリから古いフレームをアンロードする必要があります。
リアルタイムで再生するには、フレームをメモリにキャッシュする必要があります。OS は数年前の 32 ビット Fedora ディストリビューションです (当面の間、64 ビットにアップグレードすることはできません)。プロセスごとの制限は、プロセスごとに 3GB です。
基本的に、メモリに 3GB 以上のデータをキャッシュすることはできますか? 私の最初のアイデアは、複数のプロセス間でデータを分散することでしたが、これが可能かどうかはわかりません..
java - JavaでコンピュータのCPU、メモリ、およびディスクの使用状況を監視するにはどうすればよいですか?
Javaで次のシステム情報を監視したいと思います。
- 現在のCPU使用率**(パーセント)
- 使用可能なメモリ*(空き/合計)
使用可能なディスク容量(空き/合計)
*つまり、JVMだけでなく、システム全体で使用可能なメモリ全体を意味することに注意してください。
外部プログラムを呼び出したり、JNIを使用したりする自分のコードに依存しないクロスプラットフォームソリューション(Linux、Mac、およびWindows)を探しています。これらは実行可能なオプションですが、誰かがすでにより良い解決策を持っている場合は、OS固有のコードを自分で維持したくないと思います。
信頼性の高いクロスプラットフォームの方法でこれを行う無料のライブラリがあれば、それは素晴らしいことです(外部呼び出しを行ったり、ネイティブコード自体を使用したりする場合でも)。
どんな提案でも大歓迎です。
明確にするために、Javaプロセスだけでなく、システム全体の現在のCPU使用率を取得したいと思います。
SIGAR APIは、私が探しているすべての機能を1つのパッケージで提供するため、これまでの私の質問に対する最良の答えです。ただし、GPLの下でライセンスされているため、本来の目的(クローズドソース、商用製品)には使用できません。HypericがSIGARの商用利用を許可している可能性はありますが、私はそれを調べていません。私のGPLプロジェクトでは、将来的に確実にSIGARを検討します。
私の現在のニーズのために、私は次のことに傾いています:
- CPU使用率については、
OperatingSystemMXBean.getSystemLoadAverage() / OperatingSystemMXBean.getAvailableProcessors()
(CPUあたりの平均負荷) - 記憶のために、
OperatingSystemMXBean.getTotalPhysicalMemorySize()
そしてOperatingSystemMXBean.getFreePhysicalMemorySize()
- ディスク容量の場合、
File.getTotalSpace()
およびFile.getUsableSpace()
制限:
およびディスク容量のgetSystemLoadAverage()
クエリメソッドは、Java 6でのみ使用できます。また、一部のJMX機能は、すべてのプラットフォームで使用できるとは限りません(つまりgetSystemLoadAverage()
、Windowsで-1を返すことが報告されています)。
元々はGPLの下でライセンスされていましたが、 Apache 2.0に変更されました。これは通常、クローズドソースの商用製品に使用できます。
c++ - ジャンプテーブルとは何ですか?
誰かがジャンプテーブルの仕組みを説明できますか、そしてなぜ組み込みシステムで必要になるのでしょうか?