[問題] 靜態物件什麼時候會被清掉?

看板java作者 (LaPass)時間11年前 (2012/11/13 15:35), 編輯推噓2(2011)
留言13則, 3人參與, 最新討論串1/1
最近看到動態加載這一塊的東西 看到一個頗有趣的做法 就是 可以讓程式生成一隻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

11/13 15:44, , 1F
http://ppt.cc/Xw6j 自己用 URLClassLoader 要更新就全
11/13 15:44, 1F

11/13 15:45, , 2F
部重來 (把 loader 換一個新的) 可行
11/13 15:45, 2F

11/13 15:46, , 3F
不過沒確認過之前建出的舊 Object 會怎樣...
11/13 15:46, 3F

11/13 15:57, , 4F
有趣,好像很多事可以搞的樣子www
11/13 15:57, 4F

11/14 10:25, , 5F
http://ppt.cc/EIJo 可以換classloader,但是沒辦法手動
11/14 10:25, 5F

11/14 10:27, , 6F
unload,也就是說新舊物件會同時存在,而且被視為不同class
11/14 10:27, 6F

11/14 12:43, , 7F
XD 或許可以存 map, 換 class 時再重 new 把值帶過去
11/14 12:43, 7F

11/14 12:46, , 8F
純資料類型這樣轉應該是ok啦~ XD
11/14 12:46, 8F

11/15 09:35, , 9F
我玩過 XD
11/15 09:35, 9F

11/15 09:37, , 10F
之前做的 zk fiddle 就是應用即時編譯跟 classloader 的玩法
11/15 09:37, 10F

11/15 09:39, , 11F
不過要能抽換 Class 的 implement 成本非常高就是了。
11/15 09:39, 11F

11/15 09:40, , 12F
原來那這樣做出來的啊...@@
11/15 09:40, 12F

11/15 09:43, , 13F
^是
11/15 09:43, 13F
文章代碼(AID): #1GeVWkar (java)