java如何手动释放内存

Python08

java如何手动释放内存,第1张

java当中数组是不需要手动释放的,底层有自动回收垃圾的机制,扩展如下:

前一次循环结果如果没有被引用,那么会等待被自动释放,如果被引用,则不释放。

String[] str2=new String[500]

意思是每次循环都重新定义,并且重新赋值为新创建的数组对象,而上次循环所声明的变量以及所创建的数组对象都被列入自动回收列表了。

我想你说的应该是AjaxAction对象被回收吧

要清楚这个问题必须了解对象的结构

java虚拟机对类实例的引用(即对象)是指向一个句柄的指针,这个句柄自身是一对指针,包含该对象的方法和代表该对象类型的class对象的指针的表,另一个指向在java堆中为该对象数据分配的存储器;

很明显,map对象的句柄是保存在AjaxAction对象分配的存储器中

所以当AjaxAction这个句柄没有被任何引用引用时,被GC回收,其分配的数据存储器也回收,即map对象这个句柄也被回收,map指向的内存没有任何引用指向,同样要被回收

有可能,但是没有什么影响

首先,根本不存在有用的内存这个说法。简单来说,可以把内存看成一个巨大的缓存(相较于真正的cache而言),内存中的一切数据都是暂时的,程序在运行时成为进程,占用内存空间,进程生命周期结束后是大多是会释放内存空间的。为了提高运行速度,少数进程会较长时间的占用内存。

java提供了很多方法来判断内存空间是否可以被释放掉,但是一处已分配的内存空间对操作者是否有用java无法完全做出正确的判断,比如一个局部变量,在方法结束后是一定会被释放的,即便你会很频繁的调用并希望它能一直保有内存。

没有影响是因为内存只是一个缓存,释放了再重新分配就好,只不过是速度慢了些,任何检测的算法都只能是尽量提高速度。