Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于运行时内存方法获取freeMemory的行为非常古怪_Java_Hibernate_Memory Management_Jvm_Runtime - Fatal编程技术网

Java 基于运行时内存方法获取freeMemory的行为非常古怪

Java 基于运行时内存方法获取freeMemory的行为非常古怪,java,hibernate,memory-management,jvm,runtime,Java,Hibernate,Memory Management,Jvm,Runtime,我正在使用运行时的内存近似方法来进行一些内存使用分析。我创建了以下方法,用于在给定时间近似计算JVM中的空闲内存量: private static long getFreeRuntimeMemory(){ long usedMem, freeMem; usedMem = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); freeMem = Runtime.getRuntime(

我正在使用运行时的内存近似方法来进行一些内存使用分析。我创建了以下方法,用于在给定时间近似计算JVM中的空闲内存量:

private static long getFreeRuntimeMemory(){
    long usedMem, freeMem;

    usedMem = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
    freeMem = Runtime.getRuntime().maxMemory() - usedMem;
    //System.out.println("used "+ usedMem+ " free "+ freeMem);
    return freeMem;
}
我调用这个方法两次——在主方法的第一行,在主方法的最后一行。在这两个调用中,我执行了一些基于hibernate的数据库检索


奇怪的是,这个方法的返回值在第一次调用时更小。这怎么可能?我确实创建了一些对象,它们不应该在主要结束之前解除分配。

1,)最大内存不一定是常数2。)值可能会在三个方法调用之间发生变化,因此不能保证一致3。)在第一次调用之前堆上可能有未使用的对象,这些对象在第二次调用之前已被释放。#1)在我的情况下似乎是常数,在JVM启动之前,最大内存不是固定的吗#2,3)-经过我自己的一些研究,这是有意义的。最大内存是否固定取决于实现。