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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java自动gc_具有Java 7中自动资源管理功能的GC

發(fā)布時間:2023/12/3 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java自动gc_具有Java 7中自动资源管理功能的GC 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

java自動gc

這篇文章簡要概述了Java 7中引入的稱為自動資源管理或ARM的新功能。 文章探討了ARM如何減少開發(fā)人員為有效釋放分配的資源的JVM堆而必須編寫的代碼。 Java編程語言中編程的最甜蜜之處之一是對象取消分配的自動處理。 在Java世界中,這通常被稱為垃圾收集。 基本上,這意味著開發(fā)人員不必?fù)?dān)心取消分配其代碼分配的對象。 開發(fā)人員一旦完成使用該對象的操作,便可以使對該對象的所有引用無效,然后該對象就有資格進(jìn)行垃圾回收。 但是,垃圾收集有其另一面。 與C / C ++中的編碼器可以完全控制內(nèi)存分配和取消分配(malloc,free,new,delete等)不同,在Java中,開發(fā)人員對對象的取消分配過程沒有明顯的控制。 JVM管理未使用對象的垃圾回收過程,而運行一個垃圾回收周期實際上取決于JVM的想法。 確實,有諸如System.gc()或Runtime.getRuntime()。gc()之類的方法調(diào)用,它們指示將運行垃圾收集,但是這些方法僅用于提醒JVM:“也許您需要運行垃圾現(xiàn)在收藏,只是一個建議,沒有壓力!”。 JVM被完全授權(quán)忽略這些請求,并且被編碼為僅在真正合適時運行垃圾回收。 因此,在實踐中,始終建議開發(fā)人員不要相信System.gc()或Runtime.getRuntime()。gc()會觸發(fā)完整的垃圾回收,從而不要構(gòu)建其程序邏輯。 不可否認(rèn)的是,自動垃圾收集為提高開發(fā)人員的生產(chǎn)力做了多少工作。 但是,在某些極端情況下,垃圾回收不足以保持“干凈”堆,其中沒有未使用的對象。 尤其是當(dāng)對象處理由底層操作系統(tǒng)提供服務(wù)的某種形式的本機(jī)資源時。 這些對象包括但不限于IO流,數(shù)據(jù)庫連接等。對于此類對象,開發(fā)人員必須明確釋放資源。 通常,這些是通過try-catch塊完成的。 讓我們看一個小示例,該示例在完成流處理之后關(guān)閉InputStream: InputStream in = null;try {in = new FileInputStream(new File("test.txt");//do stuff with in } catch(IOException ie) {//SOPs } finally {//do cleanup } 以上看起來不錯,干凈; 但是,一旦我們嘗試通過finally塊中的in.close()關(guān)閉輸入流,就需要用try-catch塊將其包圍,該塊捕獲已檢查的異常IOException。 因此,代碼示例將轉(zhuǎn)換為: InputStream in = null;try {in = new FileInputStream(new File("test.txt"));//do stuff with in } catch(IOException ie) {//SOPs } finally {try{in.close();}catch(IOException ioe){//can't do anything about it} } 現(xiàn)在,上面的代碼看起來很ated腫,并且在不同層次結(jié)構(gòu)中有多種檢查異常,我們需要更多的catch子句。 很快,代碼變得冗長且難以維護(hù),更不用說代碼失去了其最初的整潔外觀,甚至引起了人們的注意。 但是有個好消息。 Java 7通過新的try-catch塊使此操作變得更加容易。 使用此功能,我們可以避免finally塊本身。 這是我們的做法: try(InputStream in = new FileInputStream(new File("test.txt")) {//do stuff with in } catch(IOException ie) {//SOPs } 上面的代碼塊將自己執(zhí)行清理部分。 通過引入新接口java.lang.AutoCloseable使其成為可能,該接口定義了一個方法void close()throws Exception 。 使用上述語法,可以自動關(guān)閉()d此接口的子類型的對象。 以上功能適用于實現(xiàn)AutoCloseable接口的任何類的對象。 最好的部分是,即使我們在try()塊中初始化了多個AutoCloseable實例,它也會為所有對象調(diào)用close()方法,即使某個對象上的某些close()方法拋出任何異常。 關(guān)于異常的處理,如果在我們的try塊以及隱式的finally塊(實際上已關(guān)閉AutoCloseable )中存在任何IOException,則拋出的異常將是在try塊中拋出的異常而不是隱式的finally塊中的那個。 但是,我們?nèi)匀豢梢詮腡hrowable.getSuppressed()方法中獲取隱式finally塊異常的詳細(xì)信息,該方法是Java 7中新增的方法。 我認(rèn)為自動資源管理功能或ARM是Java 7的重要補(bǔ)充。 編碼愉快!

參考: Java HotSpot博客上的JCG合作伙伴 Swaranga提供了Java 7中具有自動資源管理功能的垃圾收集 。

相關(guān)文章 :
  • Java 7:嘗試資源
  • 概覽Java 7 MethodHandle及其用法
  • Java Fork / Join進(jìn)行并行編程
  • JDK中的設(shè)計模式
  • Java最佳實踐

翻譯自: https://www.javacodegeeks.com/2011/08/gc-with-automatic-resource-management.html

java自動gc

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的java自动gc_具有Java 7中自动资源管理功能的GC的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。