Java 基礎 在Java中需要使用記憶體的組件

來源:互聯網
上載者:User

標籤:固定   body   按需載入   載入類   xmx   基於   bsp   分配   實現   

  Java程式啟動後作為一個進程運行在作業系統中,那麼這個進程有哪些部分需要分配記憶體?

  1 Java堆

  Java堆用於儲存Java對象,堆的大小在JVM啟動時向作業系統一次性申請完成,通過-Xmx和-Xms來控制大小。其中,Xmx表示堆的最大值,Xms表示堆的初始值。一旦分配完成,堆的大小就固定了,不能在記憶體不夠時再向作業系統重新申請,同時當記憶體空閑時也不能將多餘的空間交還給作業系統。

  2 線程

  JVM運行實際程式的實體是線程,而線程需要記憶體來儲存資料。每個線程建立時JVM都會為它建立一個堆棧,堆棧的大小因JVM實現的不同而不同。

  3 類和類載入器

  類和類載入器儲存在堆中,該地區稱為永久代(PermGen區)。JVM按需載入類,只會載入一個類到記憶體一次。

  4 NIO

  jdk1.4以後引入了基於通道和緩衝區執行I/O的新方式NIO,使用java.nio.ByteBuffer.allocateDirect()方法分配本機記憶體而不是Java堆上的記憶體。

  5 JNI

  JNI使機器碼(如C語言程式)可以調用Java方法。實際上,Java運行時本身依賴JNI來實作類別庫功能,所以JNI會增加Java運行時的本機記憶體佔用量。

 

  參考資料

  《深入分析Java Web技術內幕》 P201-203

Java 基礎 在Java中需要使用記憶體的組件

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.