Java內存:堆空間和垃圾收集器

了解關於Java如何通過堆空間和垃圾收集管理內存。 理解內存分配可以幫助避免在Java程序中的內存洩漏。

A+ A-

最近,我寫了一個Java應用程序,它在運行時,需要相當多的內存和我開始了內存不足的錯誤:

 錯誤:java.lang.OutOfMemoryError:Java堆空間 

當我們需要運行內存耗油方案這種情況經常發生。 下面是解決這樣的問題的幾種方法。

什麼是Java堆空間?

首先,讓明白什麼是堆空間。 那麼,Java使用的內存主要是在安排 。 的Java保持個從一個傳遞的參數調用方法到稱為方法 ,在堆疊結構的形式(即參數被壓在和彈出出棧根據需要)。 另一方面,堆是一個隨機存取存儲器空間,其中的Java創建並保持的對象。 Java的創建此堆空間內的對象只要它找到足夠的空間來容納的對象。 所以,當你創建一個新的對象(例如新的String() ;)對象獲取堆空間中創建並佔有它可以放入內存。 在垃圾收集,Java的釋放而不再引用這些對象的堆空間。 但如果引用(即“要求”)對象人數不斷在增加,我們不尊重他們-the JVM用完了堆空間。

的存儲器,一個類將要求量取決於它的數據成員的數量和類型。

  1. 類本身需要8個字節的最低
  2. 每一個數據成員需要4個字節(long和double需要8個字節)。 即使是一個布爾變量是使用4個字節,雖然它只需要一個位得到保存。
  3. 使用的內存量的增長在8字節的塊
優化您的Java程序

第一步來解決這個問題,應該要經過程序,看看它是如何被修改,以使其使用較小的存儲器。 由於長期記憶的成本已經非常低的比較是什麼在20世紀60年代。 和程序員已成為記憶津貼,以他們的程序方面相當奢華。 然而儘管如此,更多的往往不是,我們需要編寫需要比更多的可用內存的程序。 節儉內存使用量的情況下是一件好事,因為它不僅減少了程序崩潰的機會,但也有時它提高執行速度。

你應該設置對象為時,他們不再在你的代碼需要。 如果您運行在其中創建對象(S),但是不要求時,他們不丟棄一個循環,這是更重要的。

利用Java垃圾收集方法

對內存使用優化的第二步可能是顯式調用垃圾收集方法。 Java的自動調用在需要時這種方法並釋放它包含可不再被引用的對象的內存空間。 但是,你也可以在你的代碼中調用這個方法(例如,一個“大任務”的完成,下一個“艱鉅的任務”之後即將開始)。 要調用垃圾收集器,使用方法:

 調用Runtime.getRuntime()GC()。 

可以前後GC()方法被調用監視的存儲器的狀態。

 的System.out.println(“nnCalling垃圾Collectornn”);
的System.out.println(“自由內存才道:”+調用Runtime.getRuntime()freeMemory());
調用Runtime.getRuntime()GC()。
的System.out.println(“自由內存後:”+調用Runtime.getRuntime()freeMemory());
的System.out.println(“nnGarbage收集finishednn”); 

freememory()方法返回的可用內存量可以以字節為單位。 對於由Runtime類提供的其他方式看到的Java API

給更多的內存JVM

內存使用優化儘管努力,有時JVM確實需要更多的內存。 在這種情況下,我們可以通過命令行告訴JVM使用的內存指定數量:

 java的-Xms2000m -Xmx3500m 

-Xms-Xmx開關指定交換空間(虛擬內存)的金額JVM可以在你的設備中使用。

內存-Xms指定最小(即初始)金額

-Xmx指定的內存,JVM可以使用的最高金額。

這些內存值應以MB為單位進行指定。

所以,這是關於Java管理通過堆空間和垃圾回收機制的內存。 這是明智的選擇,每一個Java程序員應該具備的Java如何處理記憶清晰的認識。 只有你就可以對內存密集型程序提高工作效率。

Ads

分享

最近

最好的Ubuntu的替代尋找,如果你是一個Linux愛好者

首先,讓我們越來越熟悉的東西; 基本的,但有點偏離軌道! 你有沒有得到使用Linux和Ubuntu方面困惑? 你任何機...

如何在Gmail收件箱中添加簽名 - 添加在Gmail谷歌的簽名

收件箱由谷歌為谷歌的在過去幾年推出的最好的事情之一。 它帶入一個統一的收件箱幾乎所有我們想要的一切。 我們必須說,設計...

每週科技新聞:諾基亞,谷歌和任天堂

大家好,這是星期五,3月3日,只是像往常一樣,我們又回到我們的每週新聞綜述。 本週的新聞有很多有趣的報導。 從諾基亞的...

樹莓派項目入門 - 你可以用樹莓派做些什麼

樹莓Pi為一系列低功耗,由莓裨基金會創建單板計算機。 最初創建教孩子們計算機科學和編程的基礎知識在發展中國家中,樹莓派...

Android的2017年最佳VPN - 如何使用VPN在安卓

一去不復返的VPN只為高科技,savvies和黑客的天! 而且,承認這一點,我們已經受夠了易怒的演講有關這些服務的。 ...

註釋