日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java中gc是怎么工作的_java中的GC(gabage collection)如何工作

發布時間:2023/12/19 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中gc是怎么工作的_java中的GC(gabage collection)如何工作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.

“引用記數(reference counting)”是一種簡單但速度很慢的垃圾回收技術。每個對象都含有一個引用記數器,當有引用連接至對象時,引用計數加1。當引用離開作用域或被置 為null時,引用計數減1。雖然管理引用記數的開銷不大,但需要在整個程序生命周期中持續地開銷。垃圾回收器會在含有全部對象的列表上遍歷,當發現某個 對象的引用計數為0時,就釋放其占用的空間。這種方法有個缺陷,如果對象之間存在循環引用,可能會出現“對象應該被回收,但引用計數卻不為零”的情況。對 垃圾回收器而言,定位這樣存在交互引用的對象組所需的工作量極大。引用記數常用來說明垃圾收集的工作方式,似乎從未被應用于任何一種Java虛擬機實現 中。

2.

Java虛擬機將采用一種“自適應”的垃圾回收技術。至于如何處理找到的存活對象,取決于不同的Java虛擬機實現。有一種作法名為“停止——復制” (stop-and-copy)。這意味著,先暫停程序的運行,(所以它不屬于后臺回收模式),然后將所有存活的對象從當前堆復制到另一個堆,沒有被復制 的全部都是垃圾。當對象被復制到新堆時,它們是一個挨著一個的,所以新堆保持緊湊排列,然后就可以按前述方法簡單、直接地分配新空間了。

3.

Java虛擬機中有許多附加技術用以提升速度。尤其是與加載器操作有關的,被稱為“即時”(Just-In-Time,JIT)編譯的技術。這種技術可以 把程序全部或部分翻譯成本地機器碼(這本來是Java虛擬機的工作),程序運行速度因此得以提升。當需要裝載某個類(通常是在你為該類創建第一個對象) 時,編譯器會先找到其 .class 文件,然后將該類的字節碼裝入內存。此時,有兩種方案可供選擇。一種是就讓即時編譯器編譯所有代碼。但這種做法有兩個缺陷:這種加載動作散落在整個程序生 命周期內,累加起來要花更多時間;并且會增加可執行代碼的長度(字節碼要比即時編譯器展開后的本地機器碼小很多),這將導致頁面調度,從而降低程序速度。 另一種做法稱為“惰性編譯(lazy uation)”,意思是即時編譯器只在必要的時候才編譯代碼。這樣,從不會被執行的代碼也許就壓根不會被JIT所編譯。新版JDK中的Java HotSpot技術就采用了類似方法,代碼每次被執行的時候都會做一些優化,所以執行的次數越多,它的速度就越快。

注釋:

1.垃圾對象可能不被垃圾回收;

2.垃圾回收并不等于“析構”(區分與c++)

總結

以上是生活随笔為你收集整理的java中gc是怎么工作的_java中的GC(gabage collection)如何工作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。