㈠ java 當一個線程結束時(程序還在走),該線程的內存會回收嗎
Java的垃圾回收機制是自動發生的,發生的時間是不確定的,當內存不足是或是cpu空閑的時候,都有可能進行垃圾回收機制,如果想具體了解可以看看Java虛擬機相關內容.
㈡ java項目中很多地方使用線程池,線上伺服器內存佔用越來越大.每個線程佔用8.8M.問題是哪兒
針對你說的這種情況,可以使用jvisualvm.exe直接查看內存使用情況,查看是否是有大對象。
㈢ 新建一個JAVA線程,佔用的是JAVA堆內存還是操作系統的內存
Thread對象本身是在堆內存創建的,調用start()後開辟的線程空間是屬於棧內存的。內存管理在Java語言中是JVM自動操作的,當JVM發現某些對象不再需要的時候,就會對該對象佔用的內存進行重分配(釋放)操作,而且使得分配出來的內存能夠提供給所需要的對象。
在一些編程語言裡面,內存管理是一個程序的職責,但是書寫過C++的程序員很清楚,如果該程序需要自己來書寫很有可能引起很嚴重的錯誤或者說不可預料的程序行為,最終大部分開發時間都花在了調試這種程序以及修復相關錯誤上。
相關信息
在以前的編程過程中,手動內存管理帶了計算機程序不可避免的錯誤,而且這種錯誤對計算機程序是毀滅性的,所以內存管理就成為了一個很重要的話題,但是針對大多數純面向對象語言而言,比如Java,提供了語言本身具有的內存特性。
自動化內存管理,這種語言提供了一個程序垃圾回收器(Garbage Collector[GC]),自動內存管理提供了一個抽象的介面以及更加可靠的代碼使得內存能夠在程序裡面進行合理的分配。最常見的情況就是垃圾回收器避免了懸掛引用的問題。
因為一旦這些對象沒有被任何引用「可達」的時候,也就是這些對象在JVM的內存池裡面成為了不可引用對象,該垃圾回收器會直接回收掉這些對象佔用的內存,當然這些對象必須滿足垃圾回收器回收的某些對象規則,而垃圾回收器在回收的時候會自動釋放掉這些內存。