java 可用内存_总可用内存java
我想知道為什么創(chuàng)建大表后總的可用內(nèi)存沒(méi)有變化.但是當(dāng)我使用垃圾收集器時(shí),總的可用內(nèi)存增加了.
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);
}
}
}
解決方法:
這是因?yàn)镴VM在TLAB(線程本地分配緩沖區(qū))中創(chuàng)建了int [] ar.讓我用以下示例進(jìn)行說(shuō)明:
1)假設(shè)系統(tǒng)中的總內(nèi)存為100個(gè)單位.
2)即使運(yùn)行了一行代碼,當(dāng)前線程也已經(jīng)創(chuàng)建了一個(gè)TLAB beofre.
3)TLAB的內(nèi)存(例如10個(gè)單位)已經(jīng)從總內(nèi)存中扣除(即Runtime.freeMemory顯示90個(gè)單位)
4)int [] ar在TLAB內(nèi)部創(chuàng)建,因?yàn)門LAB具有可用空間.
5)創(chuàng)建int [] ar后,運(yùn)行Runtime.freeMemory顯示90個(gè)單位(因?yàn)樗窃赥LAB中創(chuàng)建的).
6)現(xiàn)在執(zhí)行GC,您將再次看到100個(gè)單位
標(biāo)簽:memory,java,garbage-collection
來(lái)源: https://codeday.me/bug/20191119/2032586.html
總結(jié)
以上是生活随笔為你收集整理的java 可用内存_总可用内存java的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 西湖卖酸梅汤的女子是哪里人啊?
- 下一篇: ica麦片为什么不能吃?