前一次循环结果如果没有被引用,那么会等待被自动释放,如果被引用,则不释放。
String[] str2=new String[500]
意思是每次循环都重新定义,并且重新赋值为新创建的数组对象,而上次循环所声明的变量以及所创建的数组对象都被列入自动回收列表了。
在a=null;这一刻,是没有回收的。首先,java是没有法用程序代码来释放内存的。就算你调用了object的finalize()和Runtime的gc(),都是无法在调用那一刻后就释放内存的。内存的释放是JVM来做的,sun在设计的时候就不允许用java代码来释放内存。
在一个普通的java application中,至少有mian线程和gc线程。gc线程就是不断的来查看当前有哪些变量没有使用了,需要回收,就通知JVM,该回收了。注意,仅仅是通知,而不是调用执行。
这是finalize()给出的API:
Called by the garbage collector on an object when garbage collection
determines that there are no more references to the object
这是gc()方法给出的API
The virtual machine performs this recycling
process automatically as needed, in a separate thread, even if the
gc method is not invoked explicitly.
0xFF == 二进制的:1111 1111&是按位与运算,任何一个byte &0xFF都得原有的数,它主要应用于int等,可以参照这个:http://zhidao.baidu.com/question/2055765535243071187
所以你上面的例子中的两个&0xFF是废代码
第一个函数原本的意思应该为了截取最后一个字节。但是因为传递的不是int而是byte导致变得是byte强制类型转换为int,是个失败的设计,因为只要强制转换为byte就能达到相同效果了。多此一举
第二个函数是为了取得一个数对应的十六进制字符串,不过也跟上面的一样,因为传递的是byte,导致整个设计也是失败的。