内存分配Java异常

时间:2019-01-12 15:11:43

标签: java dynamic-memory-allocation

我正在从一本名为《 Java 2:完整参考》的书中学习Java。

根据该书的输出为: 总内存为:1048568 初始可用内存:751392 垃圾回收后的可用内存:841424 分配后的可用内存:824000 分配使用的内存:17424 收集丢弃的整数后的可用内存:842640

我的输出是: 总内存为:121634816 初始可用内存:120142456 垃圾回收后的可用内存:7677000 分配后的可用内存:7635040 分配使用的内存:41960 收集丢弃的整数后的可用内存为7677960

我的问题是上面大胆提及的部分。这本书的输出中提到的“初始可用内存”小于“垃圾回收之后的可用内存”,而在我的输出中,“初始可用内存”比“垃圾回收之后的可用内存”要多。

class MemoryDemo
{
    public static void main(String[] args)
    {
        Runtime r = Runtime.getRuntime();
        long mem1, mem2;
        Integer someInts[] = new Integer[1000];

        System.out.println("Total memory is : " + r.totalMemory());

        mem1 = r.freeMemory();
        System.out.println("Initial free memory : " + mem1);

        r.gc();
        mem1 = r.freeMemory();
        System.out.println("Free memory after garbage collection : " + mem1);

        for(int i = 0; i < 1000; i++)
            someInts[i] = new Integer(i);

        mem2 = r.freeMemory();
        System.out.println("Free memory after allocation : " + mem2);

        System.out.println("Memory used by allocation : " + (mem1 - mem2));

        for(int i = 0; i < 1000; i++)
            someInts[i] = null;

        r.gc();
        mem2 = r.freeMemory();
        System.out.println("Free memory after collecting discarded integers :" + mem2);
    }
}

我需要对此做些解释,并在说明中附上用于下载该书的链接。代码在本书的406页上。 http://iiti.ac.in/people/~tanimad/JavaTheCompleteReference.pdf

2 个答案:

答案 0 :(得分:3)

Java虚拟机的内存大小不是固定数量。您可以在JVM启动时进行设置。默认设置可能因实现方式和版本而异。默认值很可能取决于实际计算机内存的大小。

答案 1 :(得分:2)

这不是错误或错误。您的计算机比本书编写时拥有更多的内存。