<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                操作系統對單個進程的內存限制 * 32位系統下,單個進程默認來可以使用2GB內存; ### 本地內存/直接內存\(Direct Memory\) 直接內存并不是虛擬機運行時數據區的一部分,也不是Java虛擬機規范中定義的內存區域,但是這部分內存也被頻繁的使用; 內存不足時拋出OutOfMemoryError或 者OutOfMemoryError:Direct buffer memory #### 特性 * -XX:MaxDirectMemorySize 最大值,默認和Java堆最大值一樣 * 不屬于運行時數據區 * 本機直接內存的分配不受Java堆大小的限制,僅受本機總內存大小以及處理器尋址空間的限制 說明:在JDK 1.4 中新加入了NIO(New Input/Output)類,引入了一種基于通道(Channel)與緩沖區(Buffer)的I/O 方式,它可以使用Native函數庫直接分配堆外內存,然后通過一個存儲在Java 堆里面的DirectByteBuffer 對象作為這塊內存的引用進行操作。這樣能在一些場景中顯著提高性能,因為避免了在Java 堆和Native 堆中來回復制數據。 _**注意使用Native函數庫分配堆外內存,通過JAVA堆DirectByteBuffer引用堆外內存**_ 直接內存是一塊物理內存,專門用于JVM和IO設備打交道,Java底層使用C語言的API調用操作系統與IO設備進行交互。 例如,Java內存中有一個字節數組,現在調用流將它寫入磁盤文件,那么JVM首先會將這個字節數組先拷貝一份到堆外內存中,然后調用C語言API指明將某個連續地址范圍的數據寫入磁盤。 讀操作也是類似,而JVM額外做的拷貝工作也是有意義的,因為JVM是基于自動垃圾回收機制運行的,所有內存中的數據會在GC時不停的被移動,如果你調用系統API告訴操作系統將內存某某位置的內存寫入磁盤,而此時發生GC移動了該部分數據,GC結束后操作系統是不是就寫錯數據了。 所以,JVM對于與外圍IO設備交互的情況下,都會將內存數據復制一份到堆外內存中,然后調用系統API間接的寫入磁盤,讀也是類似的。由于堆外內存不受GC管理,所以用完一定得記得釋放 ### 直接內存(堆外內存)與堆內存比較 * 直接內存申請空間耗費更高的性能,當頻繁申請到一定量時尤為明顯; * 直接內存IO讀寫的性能要優于普通的堆內存,在多次讀寫操作的情況下差異明顯; ### 堆外內存 * 直接內存:可通過-XX:MaxDirectMemorySize調整大小,內存不足時拋出OutOf-MemoryError或 者OutOfMemoryError:Direct buffer memory; * 線程堆棧:可通過-Xss調整大小,內存不足時拋出StackOverflowError(如果線程請求的棧深度大 于虛擬機所允許的深度)或者OutOfMemoryError(如果Java虛擬機棧容量可以動態擴展,當棧擴展時無法申請到足夠的內存); * Socket緩存區:每個Socket連接都Receive和Send兩個緩存區,分別占大約37KB和25KB內存,連接多的話這塊內存占用也比較可觀。如果無法分配,可能會拋出IOException:Too many open files異常; * JNI代碼:如果代碼中使用了JNI調用本地庫,那本地庫使用的內存也不在堆中,而是占用Java虛擬機的本地方法棧和本地內存的; * 虛擬機和垃圾收集器:虛擬機、垃圾收集器的工作也是要消耗一定數量的內存的;
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看