java - 有趣的内存值

标签 java memory heap-memory

我写了一个代码,它使用了大量的内存,所以我正在监视它的输出。 结果有点有趣,有人能解释一下为什么我的空闲内存减少而不是增加,尽管我一直在分配对象,为什么它会堆叠在一个值上?

这是我的监控代码:

Thread th = new Thread(new Runnable() {

        @Override
        public void run() {
            while(true){
                System.out.println("" + (Runtime.getRuntime().freeMemory()/1024));
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException ex) {
                    Logger.getLogger(FaAlgoritmus.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    });
    th.start();

结果:

42454
49666
109869
76995
39779
125981
89814
191056
137835
142766
121279
50221
130072
75460
143199
88164
145557
75224
27234
136953
87933
34991
151526
99113
47005
163787
56278
44491
44491
44491
44491
44491
44491
44491
44491
44491
44489
44489
44489

最佳答案

can someone xplain me why is my free mem lowers and than increases

新对象分配在伊甸园空间。一旦用完 Eden 空间,小型垃圾收集器就会启动并清除未引用的对象(将所有引用的对象提升到幸存者空间之一)。通常,这会导致可用内存量激增。

关于java - 有趣的内存值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10306040/

相关文章:

java - okHttp 和 SPDY 的异常

java - Java 基本问题

java - 合法的 Java 整数和字符运算

c++ - 在 C++ 中手动调用构造函数时,幕后发生了什么?

c# - 如何测量代码的内存使用情况?

java - JVM YoungGen 0%, Perm Gen 99%, OldGen Full

performance - Java 堆瓶颈 - 如何确定原因?

Java 线程和同步块(synchronized block)

c++ - 以这种方式初始化的 char 数组是否自动添加了空终止符?

c++ - 堆上二维数组的内存泄漏