問題タブ [memory-efficient]
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.
php - PHP で膨大な数のブール値を格納するメモリ効率の良い方法
PHP のメモリに膨大な数のブール値 (最大 2.5*10e11) を格納する効率的な方法を探しています。私の最初のアイデアは、整数の配列を作成し、各整数のビットごとに 1 つのブール値を格納することでした。
ただし、このソリューションのオーバーヘッドは依然として大きすぎます。32 ビット環境 (PHP_INT_SIZE = 4 バイト) で 10^8 ブール値 (ビット) を格納するには、3125000 個の整数の配列が必要であり、約 254 MB のメモリを消費します。 10^8 ブール値のデータは、12 MB しか必要ありません。
では、膨大な数のブール値を PHP (5) に格納する最良の方法はどれですか?
java - Java での String のメモリ効率が高く、オーバーヘッドの少ない置き換え
この古い質問に対する回答を読んだ後、私は現在、多数の小さなサイズ (15 ~ 25 文字の長さ) の文字列をより効率的に格納できるフレームワークがあるかどうかを知りたいと思っていますjava.lang.String
。
可能であれば、char[] の代わりに byte[] を使用して文字列を表現したいと思います。
私は定数になり、クラスString
によって提供される多数のユーティリティメソッドは実際には必要ありません。java.lang.String
memory - 限られたメモリに可変長オブジェクトを順次格納するための最適なデータ構造
MCU の固定量のメモリが限られているため、いくつかのオブジェクトを格納する必要があります。メモリの量は非常に少なく、プログラムの開始時にオブジェクトを格納するためにすべてのメモリを割り当てる必要があります (動的メモリ割り当ては使用できません)。
各オブジェクトはいくつかの属性で構成されており、任意のオブジェクトに対して任意の数の属性をいつでも追加または削除できます。属性の長さは可変であるため、オブジェクトの長さは時々変わる場合があります。この属性が変更されると、属性のサイズが変更される場合があります。
格納されたオブジェクトに対する重要な操作は、属性値の検索と読み取りです。
今、私の問題をカバーする最良の方法と最良のデータ構造 (高速で、メタデータが少なく、メモリ書き込みが少なく、検索オーバーヘッドが小さい) を探しています。
何か案が?
performance - オブジェクト指向、データ指向、キャッシュ汚染、キャッシュ自明性
通常のオブジェクト指向の慣行では、まれなオブジェクトが複数の無関係なメンバー プロパティを持つことはありません。また、オブジェクトが処理されている場合、それらのプロパティのさまざまな部分を対象とするさまざまなパスで処理が行われることも珍しくありません。
この点で、オブジェクトのコレクションを作成する典型的なアプローチは、あまり効率的ではないようです。コンピュータがメモリにアクセスする方法とキャッシュ ラインの平均サイズを考慮すると、キャッシュ メモリが不要なものでいっぱいになる可能性が非常に高くなりますが、たまたま隣接しているだけなので、キャッシュの容量が浪費され、ストールが追加されます。そして実行までの待ち時間。
さらに悪いのは、メモリ プールやカスタム アロケータを使用せずに、ポリモーフィズムを使用してオブジェクトを動的に割り当てる慣行です。この場合、キャッシュが不要なデータでいっぱいになるだけでなく、動的メモリ割り当てによって使用される任意のアドレスが原因で、プリフェッチャーも適切に機能しなくなります。
救いは、OOP以前の時代に戻ってデータ指向を選択することです。これは、パフォーマンスが重要なアプリケーション、オペレーティングシステムなどの開発の好みの選択であるようです. しかし、なぜこの 2 つのハイブリッド バージョンを使用しないのでしょうか。データ指向オブジェクトプログラミングの一種?
長い序曲の後、当面の問題に取り掛かりましょう。私はこの概念の効率をテストするのに十分な大規模なプロジェクトを持っていないので、コミュニティの理論的な専門知識は大歓迎です.
オブジェクトが独自のデータ メンバーを格納するのではなく、コレクションへの参照のみを格納し、データ メンバーが独自のコンテナーに順番に格納され、メンバー メソッドがそれらのコンテナーからデータを返すようにすると、不要なデータが終了する可能性がなくなります。 CPU に到達するまでの時間を減らす必要があり、近い「将来」に必要なデータの可能性が高くなります。論理的な前提として、このアプローチはプリフェッチャーの効率、キャッシュ ヒット、および使用効率を改善し、自動および手動の並列化に関連するレイテンシも削減します。
どう思いますか?
後半の編集:「データ指向パターン」の適用は、構造体とクラスのパディングを考慮に入れるとさらに有益になる可能性があります。「モデル」にデータメンバーchar
とint
データメンバーがある場合、OOP 方式でパディングされ、汚染するだけです。さらにキャッシュしますが、データ指向のストレージ モードではchar
、すべての とすべてint
の を順番に格納でき、スペースもキャッシュもまったく無駄になりません。
java - 単純な Java プログラムがますますメモリを消費する
単一の JFrame インスタンスを作成して表示するこの単純な Java コードがあります。このリンクには、jconsole によって取得されたメモリ消費グラフのスクリーンショットが含まれています
私が心配しているのは、タスク マネージャーの java.exe で、メモリ使用量が 8 ~ 9 秒ごとに 4 ~ 5 kbs の割合で継続的に増加していることです。助けが必要
objective-c - 実行時にObjective Cカテゴリをロードするポイントは何ですか?
それは...ですか:
すべてのプログラムのメソッドを常に RAM に保存する必要がないため、メモリ効率が向上しますか? もしそうなら、これは本当に一般的な問題ですか?新しいメソッドをロードしなければならないオーバーヘッドは、通常サイズのプログラムのメモリ節約を相殺するように感じますが、非常に大きなものにどのように役立つかはわかります.
柔軟性を高めるには?もしそうなら、その例を挙げていただけますか?ひとつ考えるのは難しいと思います。
私はこの質問に対する答えをグーグルで検索しようとしてきましたが、理由ではなくカテゴリの使用方法に関するリソースしか見つけられないようです。あなたの誰かが私を正しい方向に向けることができれば、それは素晴らしいことです.
java - 一連の数の組み合わせを効率的に見つける
私は現在Javaプロジェクトに取り組んでおり、その一部の1つが、入力として取得される任意の整数を満たす数字の組み合わせのリストを提供する必要
1<= A<=B<=C<=D<=E<=F<=N
があります。それと同じくらい長くすることができます。N
as small as 75
A B C D E F
any integer
fulfills the equality
を使用してすべての組み合わせを簡単に実行できることはわかっていbrute force
ますが、時間がかかります。私がやろうとしているsplit
のは、オリジナルを満たした方法で平等をtwo separate
平等にすることですが、実行をほぼ半分に削減します.
algorithm - 特定の形式のない非常に大きな整数の素数証明アルゴリズム
任意の数が素数であることを証明できるアルゴリズムを探しています。大きい数とは、10 進数が少なくとも 1 億桁あり、メルセンヌ素数などの単純な数式では表現できない数を意味します。
ここに私の要件があります:
1- 完全に正しい必要があります
2-基本的な家庭用コンピューターで実行可能である必要があります
3-数週間または数か月以内にコースを完了する必要があります。
私のメモリ制限は、1 TB のハード ドライブを搭載した専用マシンで 8 GB の RAM です (使用可能なキャッシュの量をオプションで設定できます)。数ヶ月かけて順番に検討していきます。
編集 1: 現在の方法ではほとんど不可能ではないにしても、これが競争するのが難しい分野であることは十分承知しています。私は現在の方法を使用していません。非常に大きな数に対して私の方法が正しいことを証明する方法が必要です。
Edit2: 非確率的方法が必要な理由の 1 つは、これが EFF 賞への試みであり、そこで成功すると、2 番目の EFF 賞になるからです。私の方法が正しければ (それは 1 つのクラクション IF です)、私のノート PC ですべてのことを実行できるはずです。
xslt - 効率的な xslt 条件付きインクリメント
この質問では、条件付きインクリメントを実行する方法を尋ねました。提供された回答は機能しましたが、巨大なデータセットではうまくスケーリングできません。
入力:
望ましい出力 (最適な時間複雑度で):
この目的のために、
- 入力をユーザー名でソート
- ユーザーごとに
- 以前のユーザー名が現在のユーザー名と等しい場合
- インクリメントカウンターと
- ユーザー名を「$username$counter」に設定します
- それ以外は
- カウンターを1に設定
- 以前のユーザー名が現在のユーザー名と等しい場合
- (再度 ID でソート -要件なし)
何かご意見は?