有人可以解释三个参考类之间的区别(或发布链接到一个很好的解释)?SoftReference> WeakReference> PhantomReference,但当我会用每一个?为什么会出现WeakHashMap,但没有SoftHashMap或PhantomHashMap?
如果我使用以下代码......
WeakReference<String> ref = new WeakReference<String>("Hello!");
if (ref != null) { // ref can get collected at any time...
System.gc(); // Let's assume ref gets collected here.
System.out.println(ref.get()); // Now what?!
}
Run Code Online (Sandbox Code Playgroud)
...怎么了?我是否必须ref在每个语句之前检查是否为null(这是错误的,但我应该怎么做)?对不起快速问题,但我无法理解这些Reference课程......谢谢!
java reference weak-references phantom-reference soft-references
在我的一个项目中,我不断压缩很少的数据块.现在我发现jvm然后增长到6GB的RAM(驻留(RES)RAM,不共享或虚拟等)然后因为内存不足而死亡.好像垃圾收集器从未运行过.我已经拿出相关代码并将其粘贴在下面.当我运行它(java6,32位linux)时,它增长到1GB内存.有人知道如何减少内存使用量?
import java.util.Random;
import java.util.zip.Deflater;
import java.util.zip.Inflater;
class test {
int blockSize = 4096;
Random r = new Random();
public test() throws Exception {
blockSize = 4096;
byte [] data = new byte[blockSize];
for(int index=0; index<blockSize; index++)
data[index] = (byte)r.nextInt();
for(long cnt=0; cnt<1000000; cnt++) {
byte [] result = compress(data);
if (result != null)
data[0] = result[0];
}
}
byte [] compress(byte [] in) {
assert in.length == blockSize;
Deflater compresser = new Deflater();
compresser.setInput(in);
compresser.finish();
byte [] out = …Run Code Online (Sandbox Code Playgroud)