看板 java 關於我們 聯絡資訊
最近看到動態加載這一塊的東西 看到一個頗有趣的做法 就是 可以讓程式生成一隻java檔 再呼叫編譯器把他編譯 之後再把這個物件載入 http://jingbo2759.blog.163.com/blog/static/98375315201042011617445/ 那 我想反過來問 有辦法把命令JVM把一個靜態物件給unload嗎? 翻到的資料說,這是GC在管的 但GC怎麼判斷一個靜態物件還會不會用到? 我不確定正式名稱是叫做靜態物件還是static field之類的 但我指的是這種 class Ball { static ballNO=-1; { //靜態建構,JAVA保證在第一次調用Ball之前會執行 ballNO = 0; } Ball() { ballNO++; //記數Ball被建立的次數 } } 其中的ballNO會在Ball被調用時建立 每次new Ball就會+1 但我怎確定,在兩次new Ball之間不會被歸零? (意思兩次使用new Ball間,整個Ball class被unload) 另外想個問的問題是..... 可以做到,在JVM還在運行的狀況下,把一個class給unload,重新載入嗎? 假設我有版本更新,就能在不停掉JVM的狀況下,把某個class給換掉 或是在JVM還在運行之中,偷偷加一些其他東西到某個class中之類的 不好意思,因為看到的書比較少再講這方面的東西,所以跑上來請教 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.59.16.65
lovdkkkk:http://ppt.cc/Xw6j 自己用 URLClassLoader 要更新就全 11/13 15:44
lovdkkkk:部重來 (把 loader 換一個新的) 可行 11/13 15:45
lovdkkkk:不過沒確認過之前建出的舊 Object 會怎樣... 11/13 15:46
LaPass:有趣,好像很多事可以搞的樣子www 11/13 15:57
LaPass:http://ppt.cc/EIJo 可以換classloader,但是沒辦法手動 11/14 10:25
LaPass:unload,也就是說新舊物件會同時存在,而且被視為不同class 11/14 10:27
lovdkkkk:XD 或許可以存 map, 換 class 時再重 new 把值帶過去 11/14 12:43
LaPass:純資料類型這樣轉應該是ok啦~ XD 11/14 12:46
TonyQ:我玩過 XD 11/15 09:35
TonyQ:之前做的 zk fiddle 就是應用即時編譯跟 classloader 的玩法 11/15 09:37
TonyQ:不過要能抽換 Class 的 implement 成本非常高就是了。 11/15 09:39
LaPass:原來那這樣做出來的啊...@@ 11/15 09:40
LaPass: ^是 11/15 09:43