Java未经请求的内存分配

Dan*_*cco 1 java memory allocation

在JConsole下观察到的以下代码显示了堆大小的不断增加.堆最多可达25mb,然后GC运行并将堆大小减少到接近3MB.这是预期的行为吗?我很惊讶!

public class Dummy {
    public static void main(String[] args) {
        System.out.println("start");
        while(true){
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Snow Leopard.

Tom*_*ine 8

与jconsole通信会导致分配对象.我相信你在这里看到的是你的测量方法的神器.在编译代码时,HotSpot可能还会进行轻微分配.如果您担心,请使用分析器查看正在分配的内容(同样,请注意分析器界面的分配).

正常的GC行为是为了避免不必要的运行.您将在整个网络上看到内存使用情况的锯齿图.缓存和交换友好性与避免工作之间存在一些妥协.此外,服务器HotSpot比客户端HotSpot更积极地使用内存.