1つのクラスだけで構成される簡単なJavaプログラムがあると仮定します。
public class HelloWorld {
private static void replacable(int i) {
System.out.println("Today is a nice day with a number " + i);
}
public static void main(String[] args) throws Exception {
for(int i = 0; i < 100000; ++i) {
replacable(i);
Thread.sleep(500);
}
}
コンパイルして実行すると、出力は次のようになります。
今日は数字が0のいい日です
今日はナンバーワンのいい日です
今日は2番のいい日です
今日は3番のいい日です
..。
私の質問:実行時にメソッドを交換する方法はありますか(または近い将来にありますか) replacable
?HelloWorld
の新しいバージョンで別のバージョンをreplacable
作成し、それをコンパイルしてから、すでに実行中のJVMで古いバージョンをコンパイルするようなものですか?
したがって、次のように新しいバージョンを作成すると、次のようになります。
private static void replacable(int i) {
System.out.println("Today is an even nicer day with a number " + i);
}
私がこれを行うことができるErlangのホットコードスワッピングに似たものはありますか?
- オリジナルプログラムを実行する
- 修正版を書く
- コマンドラインプログラムを使用して、実行中のJVMに接続し、既存のメソッドを置き換えます
そのため、実行時にこれが発生します。
今日は15000番のいい日です
今日は15001という数字のいい日です
今日は15002という数字でさらに良い日です
今日は15003という数字でさらに良い日です
..。
上記のプログラムがスタンドアロンであり、標準のJava SE環境で実行され、クラスパス上に他に何もないため、ほぼHelloワールドスタイルのプログラムであると想定します。
注:バイトコード操作(cglib)、aspectJ、jRebel、JMX、Java EEのメソッドのホットスワップなどのテクノロジーが存在することは知っていますが、それらは私が考えているものではありません。Erlangについて考えてみてください。