一:Java堆
java堆是存儲java對象的內存區域,JVM在啓動時向操作系統申請堆的大小,也可以通過-Xmx 和-Xms兩個選項來控制堆的大小,但是使用這兩個選項後堆的大小就會固定,不能在向操作系統重新申請內存了
二:線程
線程是JVM運行實際程序的實體,但是線程需要內存空間來存儲一些必要的數據。每當一個線程被創建時,JVM會爲他創建一個堆棧,通常在256KB-756KB之間。
如果線程的數量過多,一:線程佔用的內存用量可能會很大,二:CPU的效率可能會很低,還會導致較差的性能和更高的內存佔用率。
三:類和類加載器
類和類加載器本身需要存儲空間,他們存儲在java堆中的永久代(PermGen);
JVM在加載類時時按需加載的。
四:NIO
NIO是一種基於通道和緩衝區的方式來執行IO操作。NIO並不使用Java堆中的內存,而是直接申請操作系統的內存,這種方式避免了在java堆和本機堆之間複製數據,從而提高了java的IO操作效率。