問題タブ [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.
java - Javaで「構造体」の配列は理論的に可能ですか?
多くのオブジェクトを格納するために効率的なメモリが必要な場合があります。Java でこれを行うには、いくつかのプリミティブ配列 (以下の理由を参照) を使用するか、変換のために少し CPU オーバーヘッドを生成する大きなバイト配列を使用する必要があります。
例: を持っていclass Point { float x; float y;}
ます。ここで、32 ビット JVM で、少なくとも浮動小数に N * 8 バイト、参照に N * 4 バイトかかる N ポイントを配列に格納する必要があります。したがって、少なくとも 1/3 はガベージです (ここでは、通常のオブジェクト オーバーヘッドはカウントされません)。しかし、これを 2 つの float 配列に格納すれば、すべて問題ありません。
私の質問: Java が参照配列のメモリ使用量を最適化しないのはなぜですか? C++ で行われているように、オブジェクトを配列に直接埋め込まないのはなぜですか?
たとえば、クラス Point final のマーク付けは、JVM が Point クラスのデータの最大長を確認するのに十分なはずです。または、これはどこで仕様に反するのでしょうか? また、これにより、大きなn次元行列などを処理するときに多くのメモリが節約されます
更新:
JVM が理論的に (舞台裏などで) 最適化できるかどうか、またどのような条件下で JVM を強制できるかどうかではなく、知りたいです。結論の 2 点目は、簡単にできない理由だと思います。
JVM が知る必要がある結論:
- JVM が 1 つの配列エントリの長さを推測できるようにするには、クラスを final にする必要があります。
- 配列は読み取り専用である必要があります。もちろん、 のように値を変更することはでき
Point p = arr[i]; p.setX(i)
ますが、 を介して配列に書き込むことはできませんinlineArr[i] = new Point()
。または、JVM は「Java 方式」に反するコピー セマンティクスを導入する必要があります。アロスの答えを見る - 配列を初期化する方法 (既定のコンストラクターを呼び出すか、メンバーを既定値に初期化したままにする)
objective-c - Objective-Cでメモリ効率の高いオブジェクトを作成する
名前と写真のみのContactオブジェクトがあるとします。
さらに、私がサムと呼ばれる1000人の人々がいる場所に住んでいて、それらはすべてクローンであるため、彼らの写真はまったく同じに見え、私はそれらすべてに同じ写真をだまして使用することにしました。
Objective Cは、名前と写真のコピーが取られたときに、同じ値を認識し、1つのオブジェクトで処理でき、すべてのSamに1つのNSStringと1つのUIImageを割り当てることができるほど賢いですか?
これを処理する正しい方法は何ですか?明らかに、Sam以外のケースを処理するために、また可変の文字列と画像が渡された場合に備えて、それらにプロパティをコピーさせる必要があります。
jquery - jQueryセレクターの効率
私はすぐにビンビンになりましたが、答えが本当に見つかりません。
150 回を使用するコードが$('something here')
大量にある場合、次のようにする方が効率的でしょうか。
私が知っているかなりばかげた質問ですが、jQuery はアイテムを 1 回見つけるだけでよいので、より効率的でしょうか?
bit-shift - ビットシフトを使用して整数平方根を見つける最速の方法は何ですか?
数値(整数)の平方根(整数)を計算する最速の方法を探していました。私はウィキペディアでこの解決策に出くわしました。これは、数値の平方根(完全な平方の場合)または最も近い下の完全な平方の平方根(指定された数値が完全な平方でない場合)を見つけます。
アルゴリズムをトレースするために多くのテストを実行しようとしましたが、内部の部分が理解できないようですwhile(bit!=0)
。誰かが私にこの部分を説明できますか?
javascript - ブラウザをクラッシュさせない効率的なJavascriptの組み合わせ機能
特定の配列の可能なすべての組み合わせを計算するための次の関数を含むプログラムがあります。
例えば:
戻り値:
私のプログラムでは、特に 12 個のオブジェクトの配列パラメーターを使用して、その配列から 2 つの可能なすべての組み合わせを返すために、これをよく使用します。66通りの組み合わせが可能です。私のプログラムでは、この関数によって返される配列のオブジェクト要素のプロパティ値を何度もチェックし、それらを比較したり、それらに対して条件を実行したりする必要があります。しかし、このような組み合わせ関数を使用する関数を呼び出すと、ブラウザーがクラッシュします ( firefox は次のメッセージを返します。上記の組み合わせ関数が呼び出されてクラッシュします。
私はこれを見つけました : http://www.nczonline.net/blog/2009/01/13/speed-up-your-javascript-part-1/繰り返し機能します (組み合わせ機能など)。
組み合わせ関数を ncsonline のメソッドと効果的に統合して、ブラウザーのクラッシュを防ぐにはどうすればよいですか?
algorithm - グラフを通るパスのリストが与えられた場合、各エッジを使用するパスを効率的に見つける
このグラフにはグラフとパスのリストがあります。エッジごとにe
、 を使用するパスを見つけ、e
これらのパスに基づいて他の作業を行う必要があります。グラフのサイズとメモリ使用量の制限により、セットの配列を構築するすべてのパスを一度だけ反復することはできません。ここで、セットi
には edge を使用するパスが含まれますi
。
うまくいくブルートフォースアプローチは次のとおりです。
メモリ効率を維持しながら時間効率を向上させるにはどうすればよいですか?
perl - メモリ効率のために単一の HTML::SimpleLinkExtor オブジェクトを再利用する必要がありますか?
これはばかげた質問のように思えるかもしれませんが、メモリが非常に限られたリソースであるアプリケーションを構築しているため、メモリの使用についてできる限り注意する必要があります。だから私の質問は、次のうちどれがよりメモリ効率が良いですか?
また
したがって、最初の例では毎回新しい HTML::SimleLinkExtor オブジェクトを作成しますが、2 番目の例では、同じものを再度使用するためにリセットするだけです。したがって、2番目の方がメモリ効率が高いように思えますが、正直なところ、メモリをOSに解放することについてperlがどれほど優れているか、または一部のメモリを保持するかどうかはよくわかりませんHTML::SimpleLinkExtor オブジェクトがスコープ外になった後でも。助けてくれてありがとう!
android - Androidでの効率的なListView
ListView
可能な限りメモリを使用しないを構築する最良の方法は何ですか? これは重要です。なぜなら、私はいくつかの実装に出会い、それらのほとんどがListView
ローエンドのデバイスでスクロールするときに遅れているからです。どうすればそれができますか?そのようなを構築するためのメモリ使用量の観点から最も効率的な方法は何ListView
ですか?
c++ - ファイル全体をディスクからメモリにコピーして、ファイルがすべて読み取られるまで、必要なたびにファイルからデータを処理または読み取る
私は効率を非常に気にする何かに取り組んでいます。何千ものファイルがあり、各ファイルは 300M にもなります。各ファイルには、少なくとも 50 万個のアイテムが含まれています。私の仕事は、各アイテムをできるだけ迅速に処理することです。物理メモリ サイズは問題ではありません。そう。ディスクから各項目を取得する代わりに、ファイル全体をメモリにコピーしてメモリから各項目を取得することでメリットがありますか? また、IO プロセスの時間を節約できる他の方法はありますか? ありがとうございました!
php - PHP で乱数ジェネレーターを書きましたが、これをどのように改善できると思いますか?
私はクライアントのために働いていて、彼は T56、N78、J89 などのように [char][int][int] の形式で生成されたコードを望んでいました... char は大文字でなければなりません。
急ごしらえとして、私はこの関数を最も単純だと思ったので書きました
しかし、他にも多くの効率的なソリューションがあるのではないかとずっと考えていました。上記はうまくいきますが、そのようなコードを大量に生成する必要があるため、効率を重視しています。
どこから始めるのが良いでしょう!