促銷活動
CodeGym University
學習
課程
任務
問卷及小測驗
遊戲
幫助
學習提醒時程表
社群
使用者
論壇
聊天
文章
成功故事
活動
評論
訂閱
亮色主題
課堂
評論
關於我們
開始
開始學習
現在就開始學習
探索地圖
課堂
所有探索
所有等級
Java內存模型
Module 3 a ɛto so abien
等級 18,
課堂 2
Java內存模型簡介 Java 內存模型 (JMM)描述了線程在 Java 運行時環境中的行為。內存模型是 Java 語言語義的一部分,它描述了程序員在開發不是針對特定 Java 機器而是針對整個 Java 的軟件時可以和不應該期望的內容。 1995 年開發的原始 Java 內存模型(特別是指“percolocal 內存”)被認為是失敗的:許多優化無法在不失去代碼安全保證的情況下進行。特別是,編寫多線程“單”有幾種選擇: 訪問單例的每個行為(即使對像是很久以前創建的,並且什麼
Java 中的垃圾收集
Module 3 a ɛto so abien
等級 18,
課堂 3
回想一下 Java 中的垃圾回收是什麼 垃圾收集是通過銷毀未使用的對象來回收完整的運行時內存的過程。 有時程序員可能會忘記銷毀無用的對象,而分配給它們的內存並沒有被釋放。越來越多的系統內存被消耗,最終不再分配。此類應用程序遭受“內存洩漏”。 在某個點之後,不再有足夠的內存來創建新對象,並且程序由於OutOfMemoryError異常終止。 Java 中的垃圾收集是 Java 程序自動管理內存的過程。Java 程序被編譯成在 Java 虛擬機 (JVM) 上運行的字節碼。 當
世代垃圾收集
Module 3 a ɛto so abien
等級 18,
課堂 4
處理多代對象 Java 垃圾收集器實現了分代垃圾收集策略,可以按年齡對對象進行分類。 JVM 中的這種需要(標記和壓縮所有對象)可以稱為低效。由於分配了大量對象,因此它們的列表會增長,從而導致垃圾收集時間增加。對應用程序的實證分析表明,Java 中的大多數對像都是短暫的。 JVM中的堆內存區分為三部分: 年輕一代 新創建的對像從年輕一代開始。年輕一代進一步細分為兩類。 Eden Space - 所有新對像都從這裡開始,它們被分配初始內存。 倖存者空間(FromSpace 和
Java中垃圾收集器的類型
Module 3 a ɛto so abien
等級 18,
課堂 5
串行GC 垃圾收集通過從堆中刪除未引用的對象並為新創建的對象騰出空間來提高 Java 中的內存效率。 Java 虛擬機有八種類型的垃圾收集器。讓我們詳細考慮它們中的每一個。 Serial GC是最簡單的 GC 實現。它適用於在單線程環境中運行的小型應用程序。所有垃圾收集事件都在同一線程上按順序執行。壓縮在每次垃圾收集後執行。 運行收集器會導致“world stop”事件,此時整個應用程序都會暫停。由於整個應用程序在垃圾收集期間被凍結,如果您想盡可能降低延遲,您不應該在現實生活
選擇Java中的垃圾收集器
Module 3 a ɛto so abien
等級 18,
課堂 6
7.1* 如何選擇合適的垃圾收集器 如果您的應用程序沒有嚴格的延遲要求,您應該只運行應用程序並讓 JVM 自己選擇正確的收集器。 在大多數情況下,默認設置工作正常。如有必要,您可以調整堆大小以提高性能。如果性能仍然不如預期,請嘗試修改收集器以滿足您的應用程序要求。 順序的。如果應用程序有一個小數據集(最多約 100 MB)和/或它將在沒有任何延遲要求的單個處理器上運行。 並行。如果優先級是應用程序的峰值性能並且沒有延遲要求(或者一秒或更長時間的暫停是可以接受的)。 內容管理系
Java 中的垃圾鏈接
Module 3 a ɛto so abien
等級 18,
課堂 7
8.1 Java 中的弱引用 Java 中有多種引用。 有StrongReference - 這些是我們每天創建的最常見的鏈接。 Object object = new Object();//создал обьект
Java 並發庫
Module 3 a ɛto so abien
等級 19,
課堂 0
如果字段被聲明為或由在任何讀寫之前獲取的唯一鎖保護,則對該字段的讀寫是原子操作。但是如果仍然遇到錯誤,那麼你會得到一個關於重新排序的錯誤(改變順序,重新排序)。它表現為不正確同步的多線程程序,其中一個線程可以觀察到其他線程產生的影響。
Java 中的原子操作
Module 3 a ɛto so abien
等級 19,
課堂 1
原子操作出現的先決條件 讓我們看一下這個示例,以幫助您了解原子操作的工作原理: public class Counter {
並發集合
Module 3 a ɛto so abien
等級 19,
課堂 2
CopyOnWriteArrayList 對給定集合的add、set、remove操作會導致創建內部數組的新副本。這確保我們不會捕獲ConcurrentModificationException。 請記住,在復制數組時,只會復制對對象的引用,包括對非線程安全元素字段的訪問。此類集合最適用於寫入操作最少的情況。 CopyOnWriteArrayList是ArrayList 的線程安全模擬,基於 CopyOnWrite 算法實現。其他方法和構造函數如下所述: CopyOnW
並發隊列
Module 3 a ɛto so abien
等級 19,
課堂 3
非阻塞隊列 鏈接節點上的線程安全和最重要的非阻塞隊列實現。 ConcurrentLinkedQueue - 它使用適用於垃圾收集器的無等待算法。該算法非常高效且快速,因為它是基於 CAS 構建的。size()方法可以運行很長時間,所以最好不要一直拉。 ConcurrentLinkedDeque - Deque 代表雙端隊列。這意味著可以從兩側添加和提取數據。因此,該類支持兩種操作模式:FIFO(先進先出)和 LIFO(後進先出)。 實際上,如果絕對需要 LIFO,
同步器:在 Java 中同步對資源的訪問
Module 3 a ɛto so abien
等級 19,
課堂 4
信號 當使用文件系統時需要限制線程數時,通常會使用信號量。通過計數器控制對文件或其他共享資源的訪問。如果其值大於零,則允許訪問,但同時計數器會減少。 在計數器歸零的那一刻,當前線程將被阻塞,直到資源被另一個線程釋放。必須通過構造函數設置權限參數的數量。 您需要單獨選擇此參數,具體取決於您的計算機或筆記本電腦的功率。 public class Main {
執行者:可執行對象
Module 3 a ɛto so abien
等級 19,
課堂 5
6.1 可執行對象 所以我們得到了包裹的最大部分。它將描述用於運行異步任務並能夠通過 Future 和 Callable 接口獲取結果的接口,以及用於創建線程池的服務和工廠:ThreadPoolExecutor、ScheduledPoolExecutor、ForkJoinPool。 為了更好地理解,讓我們對接口和類進行一些分解。 6.2 可執行對象的實現 Future是獲取異步操作結果的絕佳接口。這裡的關鍵方法是 get 方法,它會阻塞當前線程(有或沒有超時),直到另一
顯示更多
1
...
32
33
34
35
Please enable JavaScript to continue using this application.