質問

実行中のJVMのイメージをダンプし、後でJVMにイメージをロードすることで以前の状態を復元することは可能ですか?答えは否定的であると確信していますが、間違っているのが大好きです。

JVMで利用可能なすべての動的言語により、対話性が向上します。コーディングセッションを保存できると、VMを以前のセッションに手動で復元する時間を節約できます。

役に立ちましたか?

解決

このために提案されたJSR 323 しばらく前ですが、拒否 。これらの記事には、この背後にある研究とそれが何をするかに関するいくつかのリンクがあります。あまりにも未熟なアイデアとしてほとんど拒否されました。

ハイパーバイザー(おそらくXen)を介して仮想化テクノロジーに取り組んでおり、JVMを移動できるようになりつつあるスタートアップを少なくとも1つ(残念ながら名前を思い出さないで)聞いたことがあるファイルシステム参照とソケットエンドポイント。彼らはハイパーバイザーレベルであったため、それらすべてにアクセスできました。それとJVMをフックすることで、彼らはほとんどの部分を手にしました。私は彼らが下に行ったかもしれないと思う。

今日入手できる最も近いものは Terracotta です。これにより、JVMヒープの一部をクラスター化して保存できます永続化できるサーバーアレイ内。 JVMの起動時に、クラスターに接続し、クラスターのヒープとして指定された部分を使用し続けることができます。実際のオブジェクトは、必要に応じてフォールトインされます。

他のヒント

現在は不可能です。一般に、異なるコンテキストでプロセスのメモリイメージを一時停止して再起動することは、達成するのが非常に困難です。オープンOSリソースで何をしますか?異なる命令セットを持つマシンへの転送?データベース接続?

また、実行中のJVMの画像はおそらく非常に大きく、実際に関心のある状態のサブセットよりもはるかに大きい可能性があります。したがって、パフォーマンスの観点からは良い考えではありません。

はるかに優れた戦略は、アプリケーションの状態を永続化して再作成するコードを持つことです。これは、ほとんどのJVM動的言語で比較的実現可能です。 Clojureで同様のことを行います。インタラクティブ環境(REPL)があり、別のJVMで必要なアプリケーション状態を再構築する一連の操作を作成して実行することができます。

これは現在、私が知っているどのJVMでも不可能です。プログラムを環境から切り離して実行する場合、JVMでこのようなものを実装することはそれほど難しくありません。ただし、多くのプログラムには、環境へのフック(ファイルハンドル、データベース接続など)があるため、このような実装が非常に困難になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top