タグ付けされた質問 「garbage-collection」

ガベージコレクション(GC)は、自動メモリ管理の一種であり、ガベージ、またはプログラムで使用されなくなったオブジェクトによって占有されているメモリを再利用しようとします。

6
静的フィールドはガベージコレクションのために開いていますか?
プログラムのセットアップでのみ使用される架空のユーティリティクラスがあるとします。 class MyUtils { private static MyObject myObject = new MyObject(); /*package*/static boolean doStuff(Params... params) { // do stuff with myObject and params... } } myObjectは、使用されなくなったときにガベージコレクションされますか、それともプログラムの存続期間中存続しますか?

4
JavaScriptでガベージコレクターのアクティビティを減らすためのベストプラクティス
1秒あたり60回呼び出されるメインループを持つ、かなり複雑なJavaScriptアプリがあります。多くのガベージコレクションが行われているようです(Chrome開発ツールのメモリタイムラインからの「ノコギリ波」出力に基づく)。これは、アプリケーションのパフォーマンスに影響を与えることがよくあります。 そこで、ガベージコレクターが行う必要のある作業量を削減するためのベストプラクティスを調査しようとしています。(私がWebで見つけた情報のほとんどは、メモリリークを回避することを考慮しています。これは少し異なる質問です。メモリが解放されます。ガベージコレクションが多すぎるというだけです。)これは主にオブジェクトを可能な限り再利用することに帰着しますが、もちろん悪魔は詳細にあります。 アプリは、John ResigのSimple JavaScript Inheritanceに沿って「クラス」で構成されています。 1つの問題は、一部の関数が1秒あたり数千回(メインループの各反復中に何百回も使用されるため)呼び出される可能性があることと、おそらくこれらの関数のローカル作業変数(文字列、配列など)です。問題かもしれません。 私はより大きな/より重いオブジェクトのオブジェクトプーリングを知っています(そしてこれをある程度使用します)が、特にタイトなループで非常に何度も呼び出される関数に関連して、全面的に適用できるテクニックを探しています。 ガベージコレクターが行う必要のある作業量を減らすために、どのようなテクニックを使用できますか? そして、おそらくまた-どのオブジェクトがどのオブジェクトが最もガベージコレクションされているかを特定するために使用できますか?(これはコードベースが非常に大きいため、ヒープのスナップショットを比較することはあまり実りがありませんでした)


1
GCオーバーヘッド制限を超えました
JVMが「java.lang.OutOfMemoryError:GCオーバーヘッド制限を超えました」をスローするために使用するサンプリング時間はどれくらいですか?パラメータGCTimeLimitとGCHeapFreeLimitで98%と2%を制御できることは知っていますが、サンプリング時間はどうですか?

6
Java一時ファイルはいつ削除されますか?
メソッドを使用してJavaで一時ファイルを作成するとします。 File tmp = File.createTempFile(prefix, suffix); delete()メソッドを明示的に呼び出さない場合、ファイルはいつ削除されますか? 直感的には、JVMが終了したとき、またはそれ以前(ガベージコレクターによる)、または後で(オペレーティングシステムのスイーププロセスによる)可能性があります。

16
本番環境のJava G1ガベージコレクション
Java 7はデフォルトで新しいG1ガベージコレクションを使用するので、Javaは、「破壊的な」GC一時停止時間を想定せずに、桁違いに大きなヒープを処理できるようになりますか?実際にG1を実際に実装した人はいますか?あなたの経験は何でしたか? 公平を期すために、私が本当に長いGCの一時停止を目にしたのは、ワークステーションの場合よりもはるかに大きなヒープでした。私の質問を明確にするために; G1は数百GBのヒープへのゲートウェイを開きますか?TB?

4
Android-アクティビティコンストラクターとonCreate
AndroidにActivitiesは特定のライフサイクルがあり、それonCreateをオーバーライドして初期化に使用する必要があることを理解していますが、コンストラクターでは正確に何が起こりますか?Activityコンストラクターもオーバーライドできる/すべきである場合、または絶対に触れてはならない場合はありますか? への参照Activitiesが完全にクリーンアップされていないため(したがって、ガベージコレクターが妨げられているため)、コンストラクターは絶対に使用しないでくださいonDestroy。これは、その目的のためにあります。これは正しいです?

15
Javaで変数にfinalを使用すると、ガベージコレクションが改善されますか?
今日、私の同僚と私はfinal、ガベージコレクションを改善するためのJavaでのキーワードの使用法について話し合っています。 たとえば、次のようなメソッドを作成する場合: public Double doCalc(final Double value) { final Double maxWeight = 1000.0; final Double totalWeight = maxWeight * value; return totalWeight; } メソッド内の変数を宣言するとfinal、メソッドの終了後に、ガベージコレクションがメソッド内の未使用の変数からメモリをクリーンアップするのに役立ちます。 これは本当ですか?

4
Javaスレッドガベージが収集されたかどうか
この質問はいくつかのサイトに投稿されました。正しい答えが見つからなかったので、ここにもう一度投稿します。 public class TestThread { public static void main(String[] s) { // anonymous class extends Thread Thread t = new Thread() { public void run() { // infinite loop while (true) { try { Thread.sleep(1000); } catch (InterruptedException e) { } // as long as this line printed out, you …

14
Javaでオブジェクトをnullに割り当てると、ガベージコレクションに影響しますか?
nullJavaで未使用のオブジェクト参照を割り当てると、ガベージコレクションプロセスが測定可能な方法で改善されますか? 私のJava(およびC#)の経験から、仮想マシンやJITコンパイラーを試してみるのは直感に反することが多いことがわかりましたが、同僚がこの方法を使用しているのを見て、これが良い習慣かどうか知りたいです。アップまたはそれらのブードゥープログラミングの迷信の1つ?

2
ASP MVC:IController Dispose()はいつ呼び出されますか?
大きなMVCアプリの1つで、大きなリファクタリング/速度の調整を行っています。数か月前から本番環境にデプロイされており、接続プールでの接続を待機するタイムアウトが発生し始めていました。接続が適切に破棄されないまで問題を追跡しました。 それを踏まえて、私はそれ以来、ベースコントローラーにこの変更を加えました。 public class MyBaseController : Controller { private ConfigurationManager configManager; // Manages the data context. public MyBaseController() { configManager = new ConfigurationManager(); } protected override void Dispose(bool disposing) { if (disposing) { if (this.configManager != null) { this.configManager.Dispose(); this.configManager = null; } } base.Dispose(disposing); } } 今、私は2つの質問があります: 競合状態を導入していますか?以来configManager管理しDataContextている公開されるIQueryable<>ビューのパラメータを、私はそれを確認する必要がありDispose()ビューが終了すると、レンダリング前にコントローラーで呼び出されることはありません。 MVCフレームワークDispose()は、ビューがレンダリングされる前または後にコントローラーを呼び出しますか?または、MVCフレームワークはそれをGarbageCollectorに任せていますか?

8
Java 7(JDK 7)のガベージコレクションとG1に関するドキュメント
Java 7はしばらくの間リリースされていますが、ガベージコレクター、特に新しいG1コレクターの構成に関する適切なリソースが見つかりません。 私の質問: G1はJava7のデフォルトのコレクターですか?そうでない場合、G1をアクティブ化するにはどうすればよいですか? g1にはJava7でどのようなオプション設定がありますか? cmsやJava7の並列コレクターなどの他のコレクターに変更が加えられましたか? Java 7のガベージコレクションに関する優れたドキュメントはどこにありますか?

1
GetRefのメモリ消費量(ガベージコレクション)がKB4525236で変更されました
Windows 2016サーバー/ Windows 10クライアントにKB4525236をインストールした後、メモリ不足の問題が発生します。このセキュリティ修正により、から関数を呼び出すときにメモリがガベージコレクションされる瞬間が変わったようGetRefです。 プレKB4525236 を通じて呼び出された関数で作成された各インスタンスGetRefは、インスタンス変数が次のように設定されるとすぐにガベージコレクションされます。nothing KB4525236の投稿 関数で作成された各インスタンスGetRefはメモリに残り、関数全体が完了するまでガベージコレクションされません。ループでインスタンスを作成すると、特に32ビットプロセスでは、これがすぐに加算されてメモリ不足につながる可能性があります。 ご質問 オンラインで関連するものを見つけることができないので、同じ問題が発生している他の人から確認を得たいと思います。スクラッチを 編集:これは同じ問題ですが、現時点で解決策はありません (KB4524570(2019年11月12日)Windows 10 1903以降のvbscript.dll class_terminateバグ) 誰かが検証して実行可能なソリューションを知っていれば、それは素晴らしいことです。 POC KB4525236がインストールされているデバイスで実行されている次のスクリプトは、次の場合のガベージコレクションの違いを示しています。 直接呼び出されます:最初のインスタンスが破棄された後にのみ2番目のインスタンスが作成されます(これは私たちの望ましい動作です) コールスルーGetRef:最初のインスタンスが破棄される前に 2番目のインスタンスが作成されるため、メモリを使用する2つのインスタンスがあります。 名前を付けて保存:KB4525236.vbs として実行:wscript KB4525236.vbs Dim Name, Log Class IDummyInstance Dim FName Sub Class_Initialize FName = Name Log = Log & "Initialize " & FName & VbNewLine End Sub Sub Class_Terminate …

2
WeakHashMapを使用しているにもかかわらずOutOfMemoryException
を呼び出さない場合System.gc()、システムはOutOfMemoryExceptionをスローします。なぜSystem.gc()明示的に呼び出す必要があるのか​​わかりません。JVMはgc()それ自体を呼び出す必要がありますよね?お知らせ下さい。 以下は私のテストコードです: public static void main(String[] args) throws InterruptedException { WeakHashMap<String, int[]> hm = new WeakHashMap<>(); int i = 0; while(true) { Thread.sleep(1000); i++; String key = new String(new Integer(i).toString()); System.out.println(String.format("add new element %d", i)); hm.put(key, new int[1024 * 10000]); key = null; //System.gc(); } } 以下のように追加-XX:+PrintGCDetailsして、GC情報を印刷します。ご覧のとおり、実際には、JVMは完全なGC実行を試みますが失敗します。私はまだその理由を知りません。System.gc();行をコメント解除すると、結果がポジティブになるのは非常に奇妙です。 add new element …

1
デストラクタのガベージコレクタの動作
以下のように定義された単純なクラスがあります。 public class Person { public Person() { } public override string ToString() { return "I Still Exist!"; } ~Person() { p = this; } public static Person p; } メインメソッドで public static void Main(string[] args) { var x = new Person(); x = null; GC.Collect(); GC.WaitForPendingFinalizers(); Console.WriteLine(Person.p == null); …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.