序文 1. 基本的な概要 プログラムの起動は非常に簡単で、通常は起動時にいくつかのリソースの事前ロードが実行されます。ただし、シャットダウン時に、プリロードされたリソースが起動時に完全にクリーンアップされないことがあるため、フック関数を使用してこれを完了することができます。 2. JVMシャットダウンシナリオの分類 写真を見てみましょう。この写真は CSDN ブログの BarryWang から提供されたもので、ここで説明したいと思います。 上記からわかるように、JVM のシャットダウンは主に 3 つのカテゴリに分かれており、1 つ目は通常のシャットダウン、2 つ目は異常なシャットダウン、3 つ目は強制シャットダウンです。最初の 2 つの方法では、フック関数を使用して正常に閉じることができますが、強制的に閉じる場合はフック関数は機能しません。 これらの概念を念頭に置いて、デモンストレーション用のケースを直接使用し、分析してみましょう。 1. コードデモンストレーションフック関数 1. JVMが正常にシャットダウンする コードを直接見てみましょう。
コンソール出力を見ると、メインアプリケーションの実行後にフック関数が呼び出され、その後 JVM が正式にシャットダウンされることがわかります。 2. 異常閉鎖 コードのデモを直接見てみましょう。ここでは、異常終了の 2 番目の OOM 状況を示します。まずヒープ サイズを 20M に設定し、コード内に 500M のオブジェクトを作成すると、OOM が発生します。パラメータは -Xmx20M です。
コンソールから、異常終了した場合でもフック関数が呼び出されることがわかります。 3. 強制終了 ここでは、Runtime.getRuntime().halt() を使用して、強力なシャットダウンを示します。このメソッドと System.exit の違いは、System.exit はフック関数を実行しますが、Runtime.getRuntime().halt() は実行しないことです。
上記のコードの出力から、Runtime.getRuntime().halt(1) を呼び出すと JVM が強制的にシャットダウンされ、フック関数は実行される前にシャットダウンされることがわかります。ただし、System.exit を使用すると、引き続き実行されます。したがって、JVM をシャットダウンするには通常、System.exit が使用されます。 4.フック機能を削除する 上記はフック関数の役割を示しています。簡単に取り外せる場合もあります。
さて、フック関数の基本的な動作はここに書かれています。使い方は比較的簡単です。しかし、以前に Spring の起動プロセスを見たことがあるのですが、その起動プロセスをもう一度見てみると、フック関数も使用されていることがわかりました。 2. 典型的なアプリケーションシナリオ 1. Springを使用する Spring がコンテキストを閉じるときに、フック関数を使用して残りのリソースを閉じることができます。この方法は、ApplicationContext を使用してフック関数を登録することです。
ソース コードからわかるように、Spring は実際にシャットダウンするために Java のフック関数を呼び出します。 2. その他の用途 多くのブログで、Spark と Hadoop のシャットダウンも目にしました。ソースコードを読んでいないので、ここでは結論を述べます。その他の使用シナリオでは、基本的に Java フック関数が呼び出されて実行されます。 結論は JVM をシャットダウンするときに、フック関数をカプセル化してスレッドを正常にシャットダウンすることができます。ただし、使用時には以下の点に注意する必要があります。 1. フック関数は本質的にはスレッドである 複数のフックが同時に実行され、JVM はそれらの実行順序を保証しません。したがって、一連の操作を 1 つのフックで実行するのが最適です。 2. フック内に新しいフックを作成できなくなりました シャットダウン フックでは、フックの登録や削除などの操作を実行することはできません。そうしないと、JVM によって IllegalStateException がスローされます。 System.exit() も使用できません。前述のように、System.exit() はフック関数の実行をトリガーしますが、Runtime.halt() はシャットダウンを強制できるため、Runtime.halt() でも実行できます。 3. フックには時間のかかる操作を入れないのがベスト フック関数は主に残りのリソースを閉じるために使用されるため、時間のかかる操作は実行しないでください。 はい、とりあえずここでやめておきます。関連する経験的方法、そして経験と思考に関するいくつかの本をお勧めします。クラスメートたちに刺激を与えてくれることを願っています。 この記事はWeChat公式アカウント「Yugong Yaoyishan」から転載したものです。下のQRコードからフォローできます。この記事を転載する場合は、Yugongyaoyishanの公式アカウントまでご連絡ください。 |
<<: クラウドコンピューティングがデジタル変革の原動力となる
3月1日午前のニュース:工業情報化部は最近発表した文書の中で、関係組織や部門が新しい汎用トップレベル...
クラウド コンピューティングがビジネスの運営方法を根本的に変えたことは周知の事実です。 CRM (顧...
1 問題の背景これは、基本的なネットワーク運用と保守に関する事故レビューレポートです。歴史的な理由に...
最近、Amazon Web Services は、Sinnet および NWCD との緊密な協力によ...
最近、ますます多くの経営者と連絡を取ってきましたが、多くの経営者が電子商取引の包囲網に閉じ込められ、...
Hostyun は最近、米国のロサンゼルス データ センターの cn2 vps も使用しました。3 ...
SEO という言葉は、今日ではあまりにも多くの解釈がなされ、誤解されすぎています。現状では、初心者が...
ホームページを構築してから半年以上が経ちました。何も知らなかった初心者から、ホームページがある程度完...
今日のインターネットは、10 年以上前のように、単にテキストや画像を読む場所ではなく、新聞、テレビ、...
クラウド コンピューティングの支持者の間では、クラウド コンピューティングには社内コンピューティング...
ここでは、Kubernetes の利点について詳しく説明し、開発者がスケーラブルで移植可能なアプリケ...
月給5,000~50,000のこれらのプロジェクトはあなたの将来ですSEO の技術的な側面について議...
偽オリジナリティに対する私の嫌悪感は長年続いている。自分のウェブサイトを持つ前は、検索エンジンで検索...
コンテンツは王様、外部リンクは女王。この言葉はウェブサイト作成の始まりから存在しています。私たちSE...
今日のウェブサイト市場はますます飽和状態になりつつあります。さまざまなウェブサイトが次々と登場します...