JavaRush /Java Blog /Random-TW /喝咖啡休息#60。Java (JVM) 中垃圾收集的工作原理。技術面試中有關 Spring 的 15 個重要問題

喝咖啡休息#60。Java (JVM) 中垃圾收集的工作原理。技術面試中有關 Spring 的 15 個重要問題

在 Random-TW 群組發布

Java (JVM) 中垃圾收集的工作原理

來源: DZone

Java中的垃圾收集過程

Java垃圾收集會自動分配和釋放內存,因此開發人員不必編寫單獨的程式來管理內存,這是使用 Java 程式設計的主要好處之一。每次 Java 程式在 JVM 上運行時,都會在堆上建立對象,並代表分配給程式的一部分記憶體。隨著時間的推移,有些物品將不再需要。垃圾收集器找到這些未使用的物件並將其刪除以釋放記憶體。喝咖啡休息#61。 Java (JVM) 中垃圾收集的工作原理。 技術面試中有關 Spring 的 15 個重要問題 - 1垃圾收集器在評估記憶體堆後,將確定哪些物件正在使用,哪些沒有,並刪除未使用的物件。使用或引用的物件意味著程式的某些部分仍然維護指向該物件的指標。如果一個物件不再使用或不再被引用,那麼它將不再被程式的任何部分引用。因此,可以透過執行垃圾收集來釋放未引用物件使用的記憶體。喝咖啡休息#61。 Java (JVM) 中垃圾收集的工作原理。 技術面試中有關 Spring 的 15 個重要問題 - 2釋放記憶體可以透過三個主要過程來描述:
  1. 標記。
  2. 正常去除。
  3. 透過壓實去除。
標記是識別垃圾收集器使用和未使用的記憶體部分的過程。貼標籤通常是第一步。 正常刪除是刪除未引用的物件的過程,將引用的物件和指標保留在可用空間中。 壓縮刪除- 除了刪除未引用的對象之外,它還會壓縮剩餘的引用對象,將對象移動到一起以使新的內存分配更加容易和更快。

JVM堆記憶體

喝咖啡休息#61。 Java (JVM) 中垃圾收集的工作原理。 技術面試中有關 Spring 的 15 個重要問題 - 3

年輕一代

新創建的物件從年輕代開始。它也被稱為苗圃,因為新的物體開始在這裡生存。年輕代分為 Eden 空間(所有新物件都從這裡開始)和兩個 Survivor 空間(其中物件在單一垃圾收集週期中存活後被移出 Eden)。當年輕代垃圾收集器收集物件時,它們會導致重新垃圾收集。 Eden Space 所有新物件首先在 Eden Space 中建立。當達到 JVM 確定的閾值時,將觸發次要垃圾回收。上述物件從 Eden 空間移動到第一個保存空間(“Eden”和“from”->“to”)。清除 Eden Space 時,未引用的物件將被刪除。 倖存者 0 (S0) 和倖存者 1 (S1) 兩個倖存者(從和到)字段都以空白開頭。當垃圾回收再次發生時,所有引用的物件都將移至剩餘空間。當垃圾收集完成時,倖存者「from」和「to」的位置(名稱)將被交換。如果在之前的垃圾收集期間 S1 處於“to”角色,那麼現在 S1 已滿並成為“from”。相應地,如果S0為空,那麼它將變成“to”。

老一輩

在次要垃圾回收之後,當過時的物件達到一定的年齡閾值(現代 JVM 的預設閾值設定為 15 個垃圾回收週期)時,它們與長壽命物件一起從年輕代移動到舊代。隨著次要垃圾收集器的不斷出現,物件繼續移入老年代空間,它將開始填滿,並且將發生主要垃圾收集。當老一代垃圾收集器收集物件時,就會發生基本垃圾收集。 喝咖啡休息#61。 Java (JVM) 中垃圾收集的工作原理。 技術面試中有關 Spring 的 15 個重要問題 - 4

永續發電

類別和方法等元資料儲存在永久代中。不再使用的類別可以由垃圾收集器從中刪除。在完整垃圾收集期間,所有代中未使用的物件都會被收集。喝咖啡休息#61。 Java (JVM) 中垃圾收集的工作原理。 技術面試中有關 Spring 的 15 個重要問題 - 5

垃圾收集的類型

清理堆內各個部分的垃圾收集通常稱為次要垃圾收集、主要垃圾收集和完整垃圾收集。但由於術語 Minor、Major 和 Full 被廣泛使用而沒有正確的定義,我們將看看所有這些類型的垃圾收集的解釋。

小型垃圾收集

從年輕代空間收集垃圾稱為次要垃圾收集。當 JVM 無法為新物件分配空間時,即 Eden 空間已滿時,總是會觸發這種類型的建置。因此,選擇率越高,小型垃圾收集發生的頻率就越高。

主要垃圾收集

主要垃圾收集清理 Tenured(舊空間)。由於老年代較大,因此組裝的頻率低於年輕代。當物件從老一代中消失時,我們說發生了「主要垃圾收集」。老一代收藏家會嘗試預測何時需要開始收藏,以避免年輕一代的晉升失敗。收集器監視老一代的填充閾值,並在超過該閾值時開始收集。如果這個門檻不足以滿足促銷要求,則啟動「完全垃圾收集」。

完整的垃圾收集

全面的垃圾收集會清理整個垃圾堆——包括新的和舊的空間。許多人對Major(僅限舊代)和Full GC(Young + OLD(堆))感到困惑。Full Garbage Collection 包括在組裝和壓縮老年代後,將所有活著的物件從年輕代提升到老年代。全面的垃圾收集將成為「停止世界」的停止。它確保在收集器運行時不會分配新對象,並且對像不會變得不可存取。

技術面試中有關 Spring 的 15 個重要問題

來源:Dev.to Spring Framework 是 Java 平台的通用框架。任何 Java 應用程式都可以使用其核心功能,並且還有用於創建基於 Java EE 的 Web 應用程式的擴充功能。以下是與 Spring 編碼相關的面試問題和答案清單。我們希望它們能幫助您準備 2021 年的技術面試。喝咖啡休息#61。 Java (JVM) 中垃圾收集的工作原理。 技術面試中有關 Spring 的 15 個重要問題 - 6

1.什麼是春天?

Ans: Spring是一個用於開發Java應用程式的開源框架。Spring框架的核心功能可用於開發任何Java應用程序,並且還有用於創建基於Java EE平台的網路應用程式的擴充功能。Spring 框架旨在透過合併基於 POJO(普通舊 Java 物件)的模型,使 J2EE 更易於在開發中使用並改進程式設計實踐。

2. Spring框架中bean的預設作用域是什麼?

Ans:bean的預設作用域是Singleton(設計模式)。

3.什麼是Bean接線?

答: Bean 連線是在 Spring 容器中的應用程式元件(bean)之間建立關聯的行為。

4.什麼是Spring Security?

Ans:Spring Security是Spring框架的一個獨立模組,專注於為Java應用程式提供身份驗證和授權方法。它還修復了最常見的安全漏洞,例如 CSRF 攻擊。要在 Web 應用程式中使用 Spring Security,可以從一個簡單的註解開始:@EnableWebSecurity。

5. bean 定義包含什麼?

答案:bean 定義包含稱為配置元資料的信息,容器需要了解以下資訊:
  • 如何創建 bean;
  • Bean 生命週期詳細資料;
  • 豆依賴性。

6.什麼是Spring Boot?

Ans:Spring Boot 是一個項目,它提供了一組預先配置的框架來減少樣板配置,以便您可以使用最少的程式碼啟動並執行 Spring 應用程式。

7.什麼是DispatcherServlet以及它的用途是什麼?

Ans:DispatcherServlet 是 Front Controller 設計模式的實現,用於處理 Spring MVC 應用程式的所有傳入 Web 請求。前端控制器模式(企業應用程式設計模式)是 Web 應用程式中的常見模式,其工作是獲取整個請求並將其路由到應用程式的各個元件進行實際處理。在 Spring MVC 中,DispatcherServlet 用於尋找正確的控制器來處理請求。這是使用處理程序映射來完成的:例如,@RequestMapping 註解。

8. 類路徑中是否需要 spring-mvc.jar 或它是 spring-core 的一部份?

Ans:Spring-mvc.jar是spring-core的一部分,這意味著如果你想在你的Java專案中使用Spring MVC框架,那麼你必須在你的應用程式的類別路徑中包含spring-mvc.jar。在Java Web應用程式中,spring-mvc.jar通常放置在/WEB-INF/lib資料夾中。

9.使用Spring有什麼好處?

答:以下列出了使用 Spring 框架的一些好處:
  • 輕量級-Spring 在尺寸和透明度方面相對輕量級。Spring框架的基本版本約為2MB。
  • 控制反轉 (IOC) - 使用控制反轉技術在 Spring 中實現鬆散耦合。物件提供它們的依賴關係,而不是建立或搜尋依賴物件。
  • 面向方面-Spring支援面向方面的編程,並透過將應用程式業務邏輯與系統服務解耦來確保一致的開發。
  • 容器- Spring 容器建立對象,將它們綁定在一起,配置它們,並管理它們從創建到處置的整個過程。
  • MVC 框架- Spring Web 框架是一個設計良好的 MVC Web 框架,它提供了 Struts 等 Web 框架或其他過度設計或不太流行的 Web 框架的替代方案。
  • 事務管理-Spring有一個一致的事務管理接口,可以擴展到本地事務(例如使用單一資料庫)或全域事務(例如使用JTA)。
  • 異常處理- Spring 提供了一個方便的 API,用於將特定於技術的異常(例如 JDBC、Hibernate 或 JDO 拋出的異常)轉換為一致的、未經檢查的異常。

10.什麼是Spring bean?

Ans:Spring bean 是由 Spring 容器管理的物件的實例。它們由框架建立和連接,並放置在「物件包」(容器)中,您稍後可以從中檢索它們。連線構成了依賴注入。這意味著您可以簡單地說“我需要這個東西”,框架將遵循一定的規則來獲取該物件。

11. 核心容器模組的用途是什麼?

Ans:核心容器提供了Spring框架的核心功能。主容器的主要元件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用反轉控制將配置和應用程式規範依賴項與實際應用程式程式碼分開。

12.什麼是應用程式上下文?

答:乍一看,應用程式上下文和bean工廠是一樣的。兩者都載入 bean 定義,將 bean 捆綁在一起,並根據請求分發它們。但它也規定:
  • 用於解析文字訊息的工具,包括對國際化的支援。
  • 載入文件資源的常用方式。
  • 註冊為偵聽器的 Bean 的事件。

13. 如何將 Java Server Faces (JSF) 與 Spring 整合?

答:JSF 和 Spring 確實共享一些相同的功能,特別是在控制反轉服務領域。透過在 faces-config.xml 設定檔中聲明 JSF 託管 bean,您可以允許 FacesServlet 在啟動時實例化該 bean。您的 JSF 頁面可以存取這些 bean 及其所有屬性。JSF 和 Spring 可以透過兩種方式整合: DelegatingVariableResolver:Spring 附帶一個 JSF 變數解析器,讓您一起使用 JSF 和 Spring。DelegatingVariableResolver 首先將值的查找委託給底層 JSF 實作的預設解釋器,然後委託給 Spring WebApplicationContext 的「業務上下文」。這使得將依賴項注入到 JSF 管理的 bean 中變得容易。 FacesContextUtils:自訂 VariableResolver 在將其屬性對應到 faces-config.xml 中的 beans 時效果很好。但如果您需要捕獲 bean,FacesContextUtils 類別可以讓這件事變得簡單。它與 WebApplicationContextUtils 類似,但它接受 FacesContext 參數而不是 ServletContext 參數。
ApplicationContext ctx = FacesContextUtils.getWebApplicationContext (FacesContext.getCurrentInstance ());

14.什麼是Spring MVC框架?

答:Spring Web MVC框架提供了模型-視圖-控制器架構和預先建置元件,可用於開發靈活且鬆散耦合的 Web 應用程式。MVC 模式導致應用程式的不同方面(輸入邏輯、業務邏輯和 UI 邏輯)分離,同時允許這些元素之間的鬆散耦合。

15. Spring 中的事件處理是如何運作的?

答:ApplicationContext中的處理是透過ApplicationEvent類別和ApplicationListener介面提供的。也就是說,如果一個 bean 實作了ApplicationListener,那麼每次將ApplicationEvent發佈到ApplicationContext時,就會註冊該 bean。感謝您的閱讀,祝您技術面試順利!
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION