ArrayListのは、データの千ワットを挿入した後、私はJVMと思われる.....

私は新しい世界を発見し、そのため、あなたにコードを送信します。」

「大きな音、そしてとても興奮。」

「いつだろう...」

ArrayListのは、データの千ワットを挿入した後、私はJVMと思われる.....


「私はデータ10万個のArrayListの中に連続的に挿入され、結果は時間がかかるとして、2346797を理解されていないされていません」

私はこの男シャーシの不安定性を知って、見ました。

「あなたは-XXを追加:+ PrintGCDetails -XX:+ PrintGCDateStampsをフルGCの下で最初の時間を見ることがありません」

「私は再度試して、参照してください。」

数分後...

2019-09-28T09:49:07.519から0800:[GC(割り振りの失敗)[PSYoungGen:54888K-> 10738K(76288K)] 54888K-> 36180K(251392K)、0.0520111秒] [時間:ユーザー= 0.24 SYS = 0.03、本物= 0.06秒] 
 2019-09-28T09:49:07.590から0800:[GC(割り振り失敗)[PSYoungGen:74092K 
- > 10736K(141824K)] 99534K-> 80803K(316928K)、0.0693607秒] [タイムズ:ユーザー= 0.39 SYS = 0.03、リアル= 0.06秒] 
 2019-09-28T09:49:07.751から0800:[GC(割り振りの失敗)[PSYoungGen:141808K-> 10736K(141824K)] 211875K-> 188026K(320512K)、0.1829926秒
] [時間:ユーザー= 1.02 SYS = 0.10、リアル= 0.18秒]  
 2019-09-28T09:49:07.934から0800:[全GC(人間工学)[PSYoungGen:10736K->
0K(141824K)] [ParOldGen:177290K-> 171620K(402432K)] 188026K-> 171620K(544256K)、[メタスペース:3062K-> 3062K(1056768K)] 、1.8672996秒] [時間:ユーザー= 5.96 SYS = 0.03、リアル= 1.87秒] 
 2365 
2019-09-28T09:49:09.832から0800:[GC(割り振りの失敗)[PSYoungGen:129254K-> 10738K(196608K)] 300875K-> 282609K(599040K)、0.1039307秒] [時間:ユーザー= 0.74 SYS = 0.07、リアル= 0.10秒] 
 2019-09-28T09:49:09.936から0800:[フルGC(エルゴノミクス)PSYoungGen:10738K-> 0K(196608K)] [ParOldGen:271871K-> 36047K(372736K)] 282609K - > 36047K(569344K)、[メタスペース:3067K-> 3067K(1056768K)]、0.4510440秒] [時間:ユーザー= 1.82 SYS = 0.01、リアル= 0.45秒] 
 2019-09-28T09:49:10.440から0800:[ GC(割り当ての失敗)[PSYoungGen:185856K-> 10752K(264704K)] 221903K-> 171359K(637440K)、0.1292143秒] [時間:ユーザー= 0.97 SYS = 0.01、= 0実。12秒] 
 772

初めてのフルGCは本当に1.87sを取った、そして私は山を見て、フルGCを避けるため、上げます」

数分後...

「これはGCではなく、時間のかかる前の多点より後の各実行は、どのようにこれが起こっています?」

「あなたは、実行中の別のスレッドにしてみてください!」

"好"

さらに数分後...

「ほぼ同じ、異なるスレッドに時間のかかるの両方を実行し、これはなぜでしょうか?」

「あなたはそれをOSR知っていますか?」

「私は知りません。」

「私はおそらくあなたと話します。」

OSR(オンスタック交換)、別の技術は、スタックフレーム/実行時に、実行中のメソッドの関数です。

現代の主流のJVMでは、両方のは、実行のための説明の仕方によって始め、複数の層をコンパイルする能力を持って、このパフォーマンスは比較的ある(およびC ++比)が少し遅くなりますが、特定の機能は非常に頻繁に検出を実行するために一度これは、パフォーマンス機能(主に速いのC ++よりも)の実装を改善するために、JITコンパイラを採用します。

ユニットとしてJITコンパイラ機能は、それが主な機能は、ループ本体を含む場合には対応できない場合は、この時間は、OSRは便利になりました。

I = 5000にループの実行は、サイクルカウンタは、コンパイル済みのOSRをトリガしきい値に達したときに、その全体のコンパイル方法は、我々は、ループ内でのみコンパイル方法を選択し、ホットサイクルタイムがあり、方法を見つけることができますなどのコンパイルが完了した後にコンパイルされたコードを実行することができ、生成されました。私たちはループ本体をもう一度実行すると、コードの実行がOSRをコンパイルされた後、したがって、上記の例では、、、パフォーマンスが以前のものよりも少し速くなります。

OSRより具体的な実施の原則、我々はより多く支払う下に取得することはできません、興味のある学生はほとんど知っている大きなRで読むことができます。https://tinyurl.com/y3yxu8fc


おすすめ

転載: blog.51cto.com/14455981/2440729
おすすめ