作者LaPass (LaPass)
看板java
标题[问题] 静态物件什麽时候会被清掉?
时间Tue Nov 13 15:35:07 2012
最近看到动态加载这一块的东西
看到一个颇有趣的做法
就是
可以让程式生成一只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
2F:推 lovdkkkk:部重来 (把 loader 换一个新的) 可行 11/13 15:45
3F:→ lovdkkkk:不过没确认过之前建出的旧 Object 会怎样... 11/13 15:46
4F:→ LaPass:有趣,好像很多事可以搞的样子www 11/13 15:57
6F:→ LaPass:unload,也就是说新旧物件会同时存在,而且被视为不同class 11/14 10:27
7F:推 lovdkkkk:XD 或许可以存 map, 换 class 时再重 new 把值带过去 11/14 12:43
8F:→ LaPass:纯资料类型这样转应该是ok啦~ XD 11/14 12:46
9F:→ TonyQ:我玩过 XD 11/15 09:35
10F:→ TonyQ:之前做的 zk fiddle 就是应用即时编译跟 classloader 的玩法 11/15 09:37
11F:→ TonyQ:不过要能抽换 Class 的 implement 成本非常高就是了。 11/15 09:39
12F:→ LaPass:原来那这样做出来的啊...@@ 11/15 09:40
13F:→ LaPass: ^是 11/15 09:43