我在觀看直播http://www.humblebundle.com,我看到他們在運行應用程序,並在Eclipse中更改代碼。這只是下次他們編譯和運行時的變化,還是他實際上正在改變應用程序,因爲它以某種方式運行?實時代碼編譯?
實時代碼編譯?
回答
有時。 在調試模式下,eclipse可以編譯和更改正在運行的JVM中的類文件,這稱爲熱代碼替換。
的想法是,你就可以開始在給定的運行 工作臺調試會話,並在你的開發工作臺改變的Java文件,並 調試器將取代在接受VM的代碼,而這是 運行。不需要重新啓動,因此引用「熱」。
來源:Eclipse Wiki
有某些情況下在那裏這是不行的,在這種情況下,Eclipse會提示你重新啓動。
「某些情況」是當你編輯的東西不僅僅是一個方法體,即添加一個新的方法,改變簽名,新的類或配置。所以基本上熱代碼替換的功能非常有限 – 2012-02-18 14:21:48
在運行時更改應用程序代碼的能力是調試器的功能。在Eclipse和許多其他流行的IDE中,它「開箱即用」。功能有幾個限制:不能改變方法簽名,添加/刪除類成員等
這就是所謂的hot code replace:
的想法是,你可以在給定的運行時工作臺啓動調試會話並在您的開發工作臺中更改Java文件,並且調試器將在運行時替換接收VM中的代碼。不需要重新啓動,因此引用「熱」。
如果您處於調試模式,則可以在應用程序運行時進行某些更改。它是否有效取決於更改是否爲當前加載的代碼。例如,您可以在程序未進行排序時更改排序函數,並在下次排序時使用新代碼。
從流中判斷是不可能的。 Java在某種程度上都具有這種能力 - 您可以通過一些限制來使用調試器替換由JVM加載的類。還有JRebel,它擺脫了很多這些限制。
- 1. 編譯代碼時出錯
- 2. 編譯時間代碼塊
- 3. 編譯時代碼生成
- 4. GMP-彙編代碼?編譯代碼
- 5. 編譯Yacc代碼
- 6. C代碼編譯
- 7. 編譯vhdl代碼
- 8. 編譯C代碼
- 9. 代碼不編譯
- 10. 反編譯彙編代碼
- 11. 用C++編譯器編譯c代碼
- 12. 編譯錯誤的代碼的編譯
- 13. 反編譯預編譯源代碼ASP.NET
- 14. 在ubuntu中編譯/編譯源代碼
- 15. .NET如何以及何時實際編譯代碼?
- 16. C代碼的實時編碼
- 17. 編譯目標代碼時出錯
- 18. 在運行時編譯java代碼
- 19. 在運行時編譯運行代碼
- 20. 編譯C源代碼時出錯
- 21. CGAL:編譯代碼時出錯
- 22. Ruby on Rails - 編譯時執行代碼
- 23. 在編譯時運行任意代碼
- 24. 編譯代碼時出現LNK2019錯誤
- 25. 何時函數編譯代碼
- 26. 從源代碼編譯gcc時出錯
- 27. IOException異常時動態編譯代碼
- 28. 調試運行時編譯代碼?
- 29. Java代碼在編譯時轉換
- 30. 編譯代碼塊時的問題13.12
你應該在你的問題中包含更多的上下文,以便在直播結束後有意義。 – millimoose 2012-02-17 20:58:04