原创 五、mysql之業務設計

一、邏輯設計 1、範式設計 1.1第一範式 數據庫表中的所有字段都只具有單一屬性,單一屬性的列是由基本數據類型所構成的,設計出來的表都是簡單的二維表 1.2第二範式 要求表中只具有一個業務主鍵,也就是說符合第二範式的表不能存在非主

原创 5、JVM性能優化(內存泄漏、內存溢出、各種JVM命令、定位內存問題)

一、內存溢出、內存泄露 1、內存溢出 程序在申請內存時,沒有足夠的內存空間 棧溢出 虛擬機棧(線程獨享的棧空間)StackOverflowError 棧溢出:不斷創建線程,使得棧空間被打滿,OutOfMemoryError 堆溢

原创 六、JVM調優(GC調優)

前言 JVM調優的本質:並不是爲了顯著的提升系統的性能,不是說調優過後,性能就能提升幾倍或者十幾倍,主要調的是穩定性。如果系統出現了頻繁的垃圾回收,這個系統是不穩定的,所以就需要我們來進行jvm調優,調整垃圾回收的頻次 一、GC調

原创 4、JVM執行子程序

一、class文件結構 1、魔數與 Class 文件的版本 每個 Class 文件的頭 4 個字節稱爲魔數(Magic Number),它的唯一作用是確定這個文件是否爲一個能被虛擬機接受的 Class 文件。使用魔數而不是擴展名來

原创 3、垃圾回收算法與垃圾回收器

一、GC回收對象時,怎麼判斷對象的存活 1、引用計數法 給對象添加一個引用計數器,當對象增加一個引用時計數器加 1,引用失效時計數器減 1。引用計數爲 0 的對象可被回收。c++中的智能指針就是利用引用計數來實現的。優點是快,方便

原创 2、jvm中的對象

一、對象的分配 虛擬機遇到一條new指令時:在常量池中定位到需要new的對象的符號引用,如果未找到,則拋出異常:classNotFoundException 檢查還在 先執行相應的類加載過程,如果沒有就進行加載 內存分配

原创 1、深入理解JVM內存區域

一、爲什麼要了解虛擬機 JVM 不單單隻支持 Java 語言,也支持其他語言(Scala、Kotlin、Groovy 等等)區塊鏈 2.0–以太坊(比特幣是區塊鏈 1.0) 中提供了 EVM 的虛擬機,它的實現和 JVM 類似,基

原创 java.util.concurrent併發學習總結(本章節目錄)

爲了加深學習能力和後來複習,總結了自己學習java.util.concurrent包的一些筆記,歡迎同學們進行閱讀和給出批評建議。 一、線程基礎 1、操作系統進程與線程之定義及區別 2、java線程的共享與協作、synchroni

原创 8、實戰項目-性能優化實戰

一、需求解析 爲學生考試後從題庫中抽取題目生成大量的離線練習冊文檔並打印。 題目在數據庫中存儲形式,平均長度800字節: “下圖是Diameter協議中的那部分? </p><img src=“http://......./....

原创 4.1 java併發容器 - concurrentHashMap

一、HashMap爲什麼是線程不安全的 問題主要出現是hashmap的擴容操作的rehash操作上。 void transfer(Entry[] newTable, boolean rehash) { int ne

原创 7、併發任務執行框架

一、需求分析 舉例 互聯網教育中,會定期爲每個班級或者年級的學生生成近期成績考覈的execl表單用來分析教育的質量,爲每個學生生成表單是一個比較費時間的操作,假如一個任務需要3s,如果需要給一個年級1000名學生批量生成,單線程耗

原创 6.1 併發安全-什麼是線程安全、如何保證、死鎖(以及解決)、活鎖(以及解決)

一、線程安全的定義 如果多線程使用一個類,並且不管多線程如何使用和調度,這個類總是保證正確的行爲,那麼這個類就是線程安全的。 類的線程安全的表現爲: 操作的原子性 內存的可見性 如果不做正確的同步,多線程共享狀態的情況下就會產

原创 5、深入理解java線程池實現原理、合理配置

一、什麼是線程池、爲什麼要使用線程池 概念 存放一組線程的容器就是線程池 作用 可以降低資源的消耗。降低線程創建和銷燬的資源 提高響應速度,可以省去線程創建和銷燬的時間 提高線程的可管理性 二、實現一個自己的線程池 線程池所需

原创 6.2 併發安全-性能和思考、線程安全的單例模式

一、性能和思考 前言:使用併發的目的是要提高性能,引入多線程之後,其實會帶來其他額外開銷,如線程間的協作、增加的上下文的切換、線程的創建和銷燬、線程的調度等等。過度的或對多線程的使用不當會導致多線程甚至沒有多線程的效率高。 衡量應

原创 3.3 深入分析理解AQS實現原理

一、前言 什麼是AQS,以java中的lock作爲引入點(對於lock不太瞭解的可以看我總結的另一篇博文:Java內置鎖、顯示鎖、可重入鎖、讀寫鎖)。大家有沒有想過,當多線程併發的時候,當競爭失敗的鎖是如何實現等待以及被喚醒的呢?