對戰-3~5年浩鯨雲計算

目錄

一.JVM分區

二.Spring Cloud 常用組件

三.Spring Cloud 與Dubbo

四.Spring IOC和AOP是什麼,項目中哪些功能用到

五.SpringBoot和Spring比較

六.Java什麼情況下會內存溢出,怎麼處理


一.JVM分區

JVM有五大分區,程序計數器、虛擬機棧、本地方法棧、堆、方法區。

  1. 程序計數器,是當前程序執行的行號指示器。通過改變計數器的值,來確定下一條指令,比如循環、跳轉、分支、異常處理、線程恢復等都以來計數器來完成。程序計數器的存儲的數據所佔空間的大小不會隨着程序改變,所以程序計數器不會發生內存溢出(OutOfMemory);

  2. 虛擬機棧,即棧內存,是java執行方法的內存模型。每個方法執行的時候都會創建一個棧幀,用於存儲局部變量表、操作數棧、動態鏈接和方法返回的地址等信息。程序變量表存儲的是基本數據類型、returnAddress類型和對象引用。程序變量表的大小是在程序編譯期間完成分配,在程序執行期間不會發生改變。操作數棧主要用來存儲運算結果及運算的操作數。在數據結構中,棧最典型的應用就是對表達式求值。程序中所有的計算過程都是借用操作數棧完成的。

  3. 本地方法棧,與虛擬機棧類似,不過本地方法棧爲虛擬機使用本地方法(native)服務。

  4. ,是java所有線程共享的一個內存,虛擬機的啓動和創建,幾乎所有的對象實例都在這裏創建,因此該區域經常發生垃圾回收。從內存回收的角度看,由於現在的收集器基本都是採用分代回收算法,所以java堆中還可以分爲新生代和老年代。新生代又分爲Eden空間、From Survivor空間、To Survivor空間。

  5. 方法區,與java堆一樣,是各個線程共享的內存區域,不需要連續的內存,並且可以動態擴展,動態擴展失敗一樣會拋出OutOfMemoryError異常。方法區用於存放虛擬機已經加載的類信息、常量、靜態變量、即時編譯器編譯的代碼等數據。java虛擬機把方法區描述爲堆的一個邏輯部分,爲了與java堆區分開,方法區又叫非堆,很多人跟願意稱之爲永久代。從JDK1.7開始準備“去永久代“規劃,1.7的HotSpot中,已經把原來放在方法區中的靜態變量、字符串常量池等轉移到堆內存中。在JDK1.8中,永久代已經不存在,存儲的類信息、編譯器編譯後的代碼等已經轉移到元空間(MateSpace)中,元空間並沒有處於堆內存中,而是直接佔用本地內存。

二.Spring Cloud 常用組件

  1. Spring Cloud Eureka,構成Eureka的體系包括服務註冊中心、服務提供者、服務消費者。
  2. Spring Cloud Ribbon,客戶端負載均衡器。Eureka只是維護了服務註冊中心、生產者和消費者三者之間的關係,真正的服務消費者調用服務生產者提供的數據,是通過Spring Cloud Ribbon來實現的。服務消費者是將服務從服務註冊中心獲取服務生產者列表維護在本地的,這種客戶端發現模式的方式是服務消費者選擇合適的節點進行訪問服務生產者提供的數據,選擇合適節點的過程,就是Spring Cloud Ribbon完成的。
  3. Spring Cloud Feign,是一個web服務客戶端。它使Eureka和Ribbon的使用更加簡單。如果NetFlix Ribbon依賴關係也在類路徑中,那麼Feign默認也會負責負載均衡。
  4. Spring Cloud HysTrix,斷路器,防止系統對某一故障服務持續進行訪問。當一個服務出現故障,而服務調用方不知道它發生了故障,若此時調用方的請求不斷增加,最後就會等待發生故障的依賴方,相應形成任務積壓,最終導致自身服務癱瘓。
  5. Spring Cloud Config,分佈式配置中心組件。支持配置服務放在配置服務的內存中(即本地),也支持遠程Git倉庫。Config中分爲兩個角色,config server和config client。config server用於配置屬性的存儲,存儲的位置可以是Git倉庫、Svn倉庫或者本地文件等。config client用於服務屬性的讀取。
  6. Spring Cloud Zuul,服務網關。通過服務網關統一向外部提供Rest API服務過程中,除了具備服務路由,負載均衡功能之外,還具備了權限控制等功能。爲微服務架構提供前門保護作用,同時將權限控制這些比較重的非業務邏輯內容遷移到服務路由層面,使得服務集羣主體具備更高的可複用性和可測試性。
  7. Spring Cloud Bus,消息總線。動態更新服務配置。

三.Spring Cloud 與Dubbo

  1. 服務調用方式,dubbo是RPC;Spring Cloud時Rest API;
  2. 註冊中心,dubbo時zookeeper,Spring Cloud 是eureka,也可以是zookeeper;
  3. 服務網關,dubbo沒有實現,Spring Cloud 有Zuul插件負責服務網關,負責消費者請求分發。
  4. Spring Cloud支持斷路器;與git完美集成配置文件支持版本控制;消息總線實現配置文件的更新和服務自動裝配等

四.Spring IOC和AOP是什麼,項目中哪些功能用到

  1. IOC,控制反轉,也可以叫依賴注入。利用工廠模式,將對象交給容器處理,容器會根據配置文件的配置,自動生成類的實例對象和管理對象。在spring容器啓動的時候,容器會將這些bean初始化好,在需要調用的時候,可以直接使用。
  2. AOP,面向切面編程,就是縱向編程。將一些功能剝離出來,統一管理,在具體運行時,由容器進行動態織入。主要用到的場景有,日誌記錄、簽名校驗、參數校驗、事務管理以及異常處理等。

五.SpringBoot和Spring比較

Spring Boot是Spring的擴展,消除配置Spring應用程序的xml文件配置。是開發變得更快更高效。

Spring Boot提供默認配置,提供可插拔設計。

六.Java什麼情況下會內存溢出,怎麼處理

  1. 棧內存溢出,線程過多創建。解決方法,使用線程池,設置固定長度的線程池,合理利用線程資源,避免過多的創建線程。如果計算型的業務,線程數量和CPU數量一致,如果是IO操作的業務,推薦設置CPU數量的兩倍。另外就是調整JVM棧大小。
  2. 堆溢出,堆中主要存儲的是對象,如果不斷的new對象,垃圾回收器來不及回收,則會造成對內存溢出。可以調整JVM(-Xmx4096M )堆的總大小。
  3. 永久代溢出。jdk1.7和1.8移除了永久代,所以代碼1.6有可能發生永久代溢出。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章