問題タブ [allocation]

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.

0 投票する
5 に答える
601 参照

java - 割り当ての待ち時間が長いようですが、なぜですか?

低レイテンシ環境で実行される (Java) アプリケーションがあります。通常、命令は最大 600 マイクロ (+/- 100) で処理されます。当然のことながら、マイクロ秒の空間にさらに移行すると、レイテンシーの変化が見られます。現在、その時間の 2/3 が 2 つのコア ドメイン オブジェクトの割り当てに費やされていることに気付きました。

ベンチマークは、コードの問題のあるセクションを既存の参照から文字通りオブジェクトの構築に分離しました。つまり、基本的に参照のロード (各クラスで最大 15) といくつかのリストが新しく作成されましたが、正確に測定されるものについては以下の注を参照してください。ここ。

それぞれが一貫して約 100 マイクロ秒かかりますが、これは私には説明できません。その理由を突き止めようとしています。簡単なベンチマークでは、同様のサイズの文字列でいっぱいのオブジェクトが新しくなるまでに約 2 ~ 3 マイクロ秒かかることが示唆されています。

ここに 2 つの Q があります

  • この種の行動をどのように調査しますか?
  • 遅い割り当てにはどのような説明がありますか?

関連するハードウェアは、Sun X4600 上の Solaris 10 x86 であり、8* デュアル コア オプテロン @ 3.2GHz であることに注意してください。

私たちが見たものには、

  • PrintTLAB の統計情報を確認すると、低速な割り当てがほとんどないため、競合は発生しないはずです。
  • PrintCompilation は、これらのコードのビットの 1 つが JIT フレンドリーではないことを示唆していますが、Solaris はここでいくつかの異常な動作をしているようです (つまり、最新の Linux に対して、solaris10 と同様のヴィンテージの Linux を現在ベンチに置いていません)。
  • LogCompilation...控えめに言っても解析が少し難しいので、これは進行中の仕事であり、今のところ明らかなことは何もありません
  • JVM バージョン... 6u6 と 6u14 の間で一貫しており、6u18 または最新の 7 はまだ試していません

ありとあらゆる考えに感謝

物事を明確にするための、さまざまな投稿へのコメントの要約

  • 私が測定しているコストは、ビルダー (これらの1 つなど) を介して構築され、そのプライベート コンストラクターが new ArrayList を数回呼び出し、既存のオブジェクトへの参照を設定するオブジェクトを作成する総コストです。測定されたコストには、ビルダーのセットアップとビルダーのドメイン オブジェクトへの変換のコストが含まれます。
  • コンパイル (ホットスポットによる) には大きな影響がありますが、それでも比較的遅いです (この場合のコンパイルでは、100 マイクロ秒から 60 マイクロ秒までかかります)。
  • 私の単純なベンチマークでのコンパイル (ホットスポットによる) は、割り当て時間を ~2micros から ~300ns に短縮します
  • レイテンシーは、若い世代のコレクション アルゴリズム (ParNew または Parallel スカベンジ) によって変化しません。
0 投票する
6 に答える
2822 参照

c++ - すべての '_atexit()' 関数が完了した後に一部のコードを実行するようにスケジュールするにはどうすればよいですか

私はメモリ追跡システムを書いていますが、実際に遭遇した唯一の問題は、アプリケーションが終了したときに、コンストラクターで割り当てられなかったが、デコンストラクターで割り当てを解除している静的/グローバル クラスがメモリの後に割り当て解除されていることです。追跡スタッフは、割り当てられたデータがリークとして報告されました。

私が知る限り、これを適切に解決する唯一の方法は、メモリ トラッカーの _atexit コールバックを強制的にスタックの先頭に配置する (最後に呼び出されるようにする) か、全体の後に実行することです。 _atexit スタックが巻き戻されました。これらのソリューションのいずれかを実際に実装することは可能ですか、それとも私が見落としている別のソリューションがありますか。

編集: 私は Windows XP の作業/開発を行っており、VS2005 でコンパイルしています。

0 投票する
5 に答える
24208 参照

c++ - C++ で固定サイズの配列を渡しますか?

基本的に私はそのようなことをしたいと思います:

しかし、それは C++ では合法ではないようです。ベクトルを使用できることはわかっていますが、配列のサイズが一定であることはわかっているため、パフォーマンスの低下が発生する可能性が高いようです。newまた、スタックへの割り当てはより簡単で、パフォーマンスも向上する可能性があるため、できればa を避けたいと思います。

ここでの解決策は何ですか?

0 投票する
9 に答える
64914 参照

c++ - C++でポインタの2D配列を割り当てる方法

ポインターの2D配列を指すポインターを作成しようとしています。構文は何ですか?要素にアクセスするにはどうすればよいですか?

0 投票する
1 に答える
477 参照

memory-management - JVMとCLRの割り当ての最適化

オブジェクトの有効期間が特定のスコープに制限されていることがランタイムに明らかな場合、JVMおよび.NET VMはスタックにオブジェクトを割り当てますか?

0 投票する
5 に答える
1790 参照

c++ - C++ 動的に割り当てられた配列

私はいくつかの割り当てを行っており、ここで 1 つの時点で動けなくなりました。list_add() 関数を作成しようとしています。その最初の機能は、配列に値を追加することです。2 つ目の機能は、配列のサイズを大きくすることです。したがって、ベクトルのように機能します。正解するかはわからないけど。私が試みたのは、古いものよりも大きい動的に割り当てられた新しい配列を作成し、すべての値を新しい配列にコピーすることです。

それは正しいアプローチですか?

本体はこちら

ここに関数があります

0 投票する
3 に答える
1474 参照

c++ - 静的多次元配列にメモリはどのように割り当てられますか?

全て、

これはしばらくの間私を悩ませてきました。C\C++ (Java と .NET も同様だと思います) では、多次元配列で行インデックスを指定する必要はありません。したがって、たとえば、int の配列を次のように宣言できます。

int 配列[][100];

一般に、静的配列はスタック上の連続したメモリとして表されると思います。では、列優先の表現を使用すると、次元の 1 つが欠落している上記のケースで、コンパイラーはどのようにして割り当てるメモリ量を知るのでしょうか?

0 投票する
5 に答える
13035 参照

memory-management - 配列の配列を割り当てるCUDA

CUDAで配列の配列を割り当てるのに問題があります。

私は何を間違えましたか?

0 投票する
2 に答える
708 参照

objective-c - alloc/init とインスタンス変数の設定

メモリの割り当てに加えて、allocすべてのインスタンス変数 (変数を除くisa) をゼロまたはゼロと同等の型nil( 、NULL、および0.0.

しかし、私は最近、次のことについて読みましたinit:

初期化は、オブジェクトのインスタンス変数を合理的で有用な初期値に設定します。

「合理的で有用な初期値」が何を意味するのか、少し混乱しています....

allocすでに値をゼロに設定している場合、これらinitの値を何らかの方法で変更していますか?

0 投票する
8 に答える
14281 参照

c - freeを呼び出す前にNULLをチェックする

多くのCコード解放ポインター呼び出し:

しかし、なぜ?私はC標準freeがNULLポインターを与えられた関数は何もしないと言っていると思いました。では、なぜ別の明示的なチェックを行うのでしょうか。