我的问题是标题,我通过搜索获得了一些知识:
linux有共享内存 如何衡量应用程序或进程的实际内存使用情况?
JVM将保留在Xms中设置的内存量 -Xms JVM在引用堆内存时的含义是什么?
但还是不知道为什么,有些可以提供一些帮助吗?
这是我在Ubuntu12.04(64位)上的测试运行 JDK 1.7.0_04.和顶部显示如下:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4067 brian 20 0 5316m **262m** 7496 S 0 3.3 0:00.30 java -**Xms4096m** -Xmx4096m Test
4066 brian 20 0 3182m **256m** 7496 S 0 3.3 0:00.30 java -**Xms2048m** -Xmx2048m Test
4065 brian 20 0 2114m **252m** 7492 S 0 3.2 0:00.30 java -**Xms1024m** -Xmx1024m Test
4064 brian 20 0 1314m **76m** 7584 S 0 1.0 0:00.20 java -**Xms256m** …Run Code Online (Sandbox Code Playgroud) import java.io.FileReader;
public class SimpoTest {
public static void main(String[] args) {
FileReader fileReader = null;
try {
fileReader = new FileReader("/home/brian/Desktop/me");
int read = fileReader.read();
System.out.println((char) read);
} catch (Exception e) {
fileReader = null;
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
1 \ echo“ 1”> / home / brian / Desktop / me
2 \将断点设置为“ int read = fileReader.read();”
3 \开始调试
4 \ rm -f / home / brian / Desktop / me
5 \跳到结尾<========控制台上仍输出“ 1” ...
好吧...这对我来说真的很奇怪。因为我虽然应该抛出一个异常。谁能提供任何解释?任何意见或建议表示赞赏。
我正在使用谷歌的guava工具将本地缓存添加到我的服务器.
guava非常适合我的场景,除了它只能将"非null"值存储到其本地缓存中(com.google.common.cache.Cache和com.google.common.cache.LoadingCache都可以).
好吧,这不好.因为我的服务器可能无法从远程数据库获取值,因为时间用完或其他原因.如果我给guava一个默认值,它将被存储在本地缓存中,并且将始终存在,除非满足某些驱逐条件.但问题是我不能给番石榴合理的默认值.
谁能告诉我,为什么番石榴有这种约束,我怎么能绕过呢?ehcache可以更适合我的情况吗?