java 可用内存_总可用内存java

我想知道为什么创建大表后总的可用内存没有变化.但是当我使用垃圾收集器时,总的可用内存增加了.

import java.util.Random;

public class Main{

public static void main(String[] args) throws Exception

{

C c = new C();

System.out.println("Free memory: "+Runtime.getRuntime().freeMemory());

c.CreateTable();

System.out.println("Free memory: "+Runtime.getRuntime().freeMemory());

System.gc();

System.out.println("Free memory: "+Runtime.getRuntime().freeMemory());

}

}

class C{

public void createTable()

{

int[] ar = new int[70000];

Random r = new Random();

for(int i = 0; i

{

ar[i]=r.nextInt(99);

}

}

}

解决方法:

这是因为JVM在TLAB(线程本地分配缓冲区)中创建了int [] ar.让我用以下示例进行说明:

1)假设系统中的总内存为100个单位.

2)即使运行了一行代码,当前线程也已经创建了一个TLAB beofre.

3)TLAB的内存(例如10个单位)已经从总内存中扣除(即Runtime.freeMemory显示90个单位)

4)int [] ar在TLAB内部创建,因为TLAB具有可用空间.

5)创建int [] ar后,运行Runtime.freeMemory显示90个单位(因为它是在TLAB中创建的).

6)现在执行GC,您将再次看到100个单位

标签:memory,java,garbage-collection

来源: https://codeday.me/bug/20191119/2032586.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值