我写了一个小测试用例来解释我的问题。正如你在onCreate方法中看到的那样,我在堆内存中分配了一个新的long数组(大约4MB的内存)。我想当我调用finish()并点击DDMS的“Cause GC”时,我会看到占用的内存不超过3或4 MB,就像我第一次启动应用程序时一样。 而是试图做这个动作:
每次点击时,Heap中分配的内存增加了4Mb。
现在我问为什么?我也注意到,如果我以正确的方式在onDestroy中为dumpArrayLong分配null垃圾收集器空闲内存。但是编写一个大型应用程序来记住在onDestroy()中分配null所有变量是不可能的。它总会引入内存泄漏。
这是测试用例:
package it.hello;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class HelloAndroid extends Activity {
private long dumpArrayLong[];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dumpArrayLong = new long[1024 * 1024 / 2]; // 4 MB
setContentView(R.layout.main);
Button btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
startActivity(new Intent(HelloAndroid.this, HelloAndroid.class));
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}