写点什么

架構師訓練營 week9 作業

用户头像
ilake
关注
发布于: 2020 年 11 月 22 日

请简述 JVM 垃圾回收原理。

如何判斷對象是否存活:
  • JVM 通過一種可達性分析算法進行垃圾對象的識別,具體過程是:從線程棧幀中的局部變量,或者是方法區的靜態變量出發,將這些變量引用的對象進行標記,然後看這些被標記的對像是否引用了其他對象,繼續進行標記,所有被標記過的對像都是被使用的對象,而那些沒有被標記的對象就是可回收的垃圾對象了。

垃圾回收的主要三種方法:
  • 清理:將垃圾對象佔據的內存清理掉,其實 JVM 並不會真的將這些垃圾內存進行清理,而是將這些垃圾對象佔用的內存空間標記為空閒,記錄在一個空閒列表裡,當應用程序需要創建新對象的時候,就從空閒列表中找一段空閒內存分配給這個新對象。

  • 壓縮:從堆空間的頭部開始,將存活的對象拷貝放在一段連續的內存空間中,那麼其餘的空間就是連續的空閒空間。

  • 複製:將堆空間分成兩部分,只在其中一部分創建對象,當這個部分空間用完的時候,將標記過的可用對象複製到另一個空間中。


常用垃圾回收器算法:
  • 串行回收器:每次垃圾回收會啟用一個線程並同時暫停其他線程。如果回收時間長,對應用程序會有較大影響。

  • 並行回收器:垃圾回收時啟用多個線程,並行處理。在處理的過程中也會暫停應用線程。

  • 並行回收器 CMS:

  • 在初始化標記時 => 暫停應用線程

  • 應用並行執行

  • 直到在垃圾回收之前 => 再次暫停線程進行重標記,

  • 最終執行垃圾回收時與應用程序並行執行。減少了對應用程序的影響。

  • G1 回收器:與 CMS 類似,只是每個階段都以多線程的方式執行。


设计一个秒杀系统,主要的挑战和问题有哪些?核心的架构方案或者思路有哪些?


設計原則
  • 靜態化

  • 併發控制,防秒殺器

  • 簡化流程

  • 前端優化

主要的挑战和问题以及應對
  • 對現有網站的衝擊

  • 秒殺系統獨立佈署,與原先系統完全隔離

  • separate domain, 不同的集群使用不同的 domain

  • 高併發下對系統,資料庫的影響

  • 頁面內容靜態化,將所有可以靜態化的東西全部靜態化,不讓使用者訪問到應用服務器

  • 服務器準備

  • style 服務器

  • 圖片服務器

  • 靜態服務服務器

  • 交易服務器

  • 突然增加的網路服務

  • CDN,有需要的話必須求助於網路公司

  • 跳過秒殺頁面直接下單

  • 動態生成下單頁面

  • 超賣?

  • 不同階段閥門的設計

  • 失敗時?

  • domain 部分,直接把相關 domain redirect 到預先定義好的萬能 error page

  • 備用機器

  • 停止非核心業務集群

  • 萬能 error page => 秒殺活動結束

  • 任何錯誤都導到這邊


設計原則

  • 靜態化

  • 併發控制,防秒殺器

  • 簡化流程

  • 前端優化


用户头像

ilake

关注

还未添加个人签名 2019.04.15 加入

还未添加个人简介

评论

发布
暂无评论
架構師訓練營 week9 作業