Değişim hızlı geçiş mekanizması ile çalışma zamanında bir yöntem
Varsayalım sadece bir sınıf oluşan önemsiz bir Java programı var:
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);
}
}
Derlenmiş ve çalıştırın sonra çıktı bu olacak:
Bugün bir sayı 0 ile güzel bir gün
Bugün bir sayı 1 ile güzel bir gün
Bugün bir sayı 2 ile güzel bir gün
Bugün bir 3 numara ile güzel bir gün
...
Benim soru: (ya da ufukta yok) bir şekilde çalışma zamanı replacable
takas yöntemi var mı? replacable
, derleme ve zaten çalışan bir JVM eski sürümü sonra yeni sürümü ile HelloWorld
başka bir sürümü yazmak gibi bir şey mi?
Eğer bu şekilde yeni sürümü yazarsam yani:
private static void replacable(int i) {
System.out.println("Today is an even nicer day with a number " i);
}
bu yapabileceğim bir şey var Erlang's hot code swapping benzer
- orijinal programını çalıştırın
- modifiye sürümü yazmak
- komut satırı programı kullanarak, JVM çalışan bağlanmak ve mevcut yöntem değiştirin
böylece, çalışma zamanı sırasında, bu olacak:
Bugün bir dizi 15000 ile güzel bir gün
Bugün bir dizi 15001 ile güzel bir gün
Bugün bir dizi 15002 ile daha da güzel bir gün
Bugün bir dizi 15003 ile daha da güzel bir gün
...
Yukarıdaki programı tek başına, çalışır Java SE standart bir ortamda, sınıf, başka bir şey yok, Merhaba neredeyse dünya tarzı bir program yani varsayalım.
Not: bayt kodu manipülasyon (cglib), *9, *, JMX**10, Java EE vb. yöntemler hotswapping gibi teknolojiler biliyorum var, ama benim düşündüğüm şey değil. Ayrık düşün.
CEVAP
eğer hedefe ulaşmak için de HotSwap JVM aracı veya jrebel aracı kullanabilirsiniz. HotSwap açık kaynak kodlu araç ama jrebel geliştirme amacı için sadece kullanabilirsiniz geliştirme hala bir reklam
Özellikleri
- Takas Yöntemi Vücut
- Yöntem Ekleyin
- Yöntem Çıkarın
- Alan Ekle
- Alanı Kaldırmak
- Supertype Ekleyin
- Supertype Çıkarın
Yatay bölme dikey bölme gelen Vim hızl...
Neden bitişik in Java daha hızlı geçiş...
Nasıl bir yöntem zamanında tanımlandığ...
Bir dize içinde hızlı bir karakter tüm...
'' 'eğer daha hızlı bir...