原创 深入JVM虛擬機之高併發交易系統應如何設置JVM堆內存的大小?

我們以一個每日百萬級別的交易支付系統作爲背景,來分析一下,在線上部署一個系統時,應該如何根據系統的業務來合理的設置JVM對內存的大小。 系統整體架構  支付訂單 1、上述業務流程中,最核心的環節是在用戶發起支付請求的時候,會生成一個支付

原创 深入JVM虛擬機之使用jstat命令摸清線上系統的JVM運行狀態

1、對於運行中的系統,想檢查JVM中的整體運行情況,最常用的工具就是jstat 2、通過jstat可以查看JVM內部的內存的使用情況,還有GC的執行次數以及耗時 3、通過這些指標,可以判斷出系統的當前內存使用壓力以及GC壓力,內存分配是否

原创 深入JVM虛擬機之JVM可能會發生哪幾種OOM?如何進行排查和處理?

總覽: 1、當JVM內存嚴重不足時,會拋出java.lang.OutOfMemoryError:xxxx錯誤 2、根據實際生產經驗,OOM是非常嚴重的問題,一般會對程序日誌中的OutOfMemeoryError配置關鍵字告警,一經發現,立

原创 深入JVM之方法調用是如何導致線程棧內存溢出的?

java.lang.StackOverflowError棧內存溢出是進行復雜運算時非常容易出現的錯誤   棧: 1、每個線程的虛擬機棧的大小是固定的,默認爲1MB。2、每次線程調用一個方法,都會將本次方法調用的棧楨壓入虛擬機棧裏,這個

原创 面試官:談一談Jdk8之後的虛擬機內存包含哪幾個部分?做了哪些調整與改進?

JDK8之前的架構:  紫色部分對於線程而言是私有的,黃色部分對於線程而言是共享的。 堆:   棧: 本地方法棧: 程序計數器: 方法區(永久代) JDK8架構: 最大的調整和改進: 直接內存:也稱爲對外內存 元空間:方

原创 深入JVM虛擬機之JVM有哪些常見的垃圾回收器?各自的特點是什麼?

Java發展至今,已經推出了好幾代垃圾收集器,包括Serial、ParNew、Parallel、CMS、G1以及Java11中最新的ZGC,每一代GC都對前一代存在的問題做出了很大的改善。 新生代使用的垃圾收集器主要有: 1.Serial

原创 面試官:對於堆內存,虛擬機如何進行分代管理?

JVM根據對象在內存中存活的時間長短,將堆內存分爲老年代和新生代。 新生代: 分爲Eden+(S0+S1)   S0、S1統稱爲Survivor   新生代區域比例爲1:1:8  Minor GC:      

原创 深入JVM虛擬機之什麼是堆外內存?什麼情況下發生堆外內存溢出或泄露?

堆內內存: 1.一般情況下,一個新的對象創建在JVM內的堆上,併爲其分配內存空間。堆空間由JVM垃圾回收器管理,稱爲堆內內存(on-heap memory) 2.虛擬機會定期對垃圾內存進行回收,有時會進行一次徹底的回收Full GC 3.

原创 面試官:請你談談JVM類加載器機制和雙親委派模型

Java代碼在編譯好之後會編程.class字節碼文件,加載到Java虛擬機中運行,本篇主要關於類加載器機制。 Java中的類加載器大致可以分爲兩類,一類是系統提供的,一類是java應用開發人員編寫的。系統提供的類加載器主要有以下三個: 1

原创 垃圾回收算法有哪些?每個算法各自有何優劣?

 1.在探討垃圾回收算法之前,首先需要介紹一下垃圾回收機制 2.我們知道對無用的對象,可以進行回收然後釋放空間,所以需要確定哪些對象是需要被回收的    垃圾回收機制:       1、引用計數法:當對象被引用,程序計數器+1;釋放-1;

原创 面試官:Java代碼是如何運行起來的?

Java代碼到底是如何運行起來的?                              程序運行的兩種形式: 1、通過採用jar包的形式                                               2

原创 跨域已經成功,當某些時候出現無法訪問以前正確的路徑的情境時的解決辦法

跨域已經成功,當某些時候出現無法訪問以前正確的路徑的情境,注意有可能是nginx沒有啓動導致的。這些錯誤在D:\nginx-1.16.1\logs的error.log中能夠看到,上網搜索可以找到相應的解決方法。  

原创 以註解的方式實現AOP編程

 概述: Aop,  aspect object programming  面向切面編程 功能: 讓關注點代碼與業務代碼分離! 關注點, 重複代碼就叫做關注點; 切面,  關注點形成的類,就叫切面(類)!  面向切面編程,就是指 對很多功

原创 叫聲小哥哥,帶你去看美麗的Java數據結構之哈夫曼樹

簡介 哈弗曼編碼:又稱爲霍夫曼編碼,它是現代壓縮算法的基礎。 假設要把字符串【ABBBCCCCCCCCDDDDDDEE】轉成二進制編碼進行傳輸 可以轉成ASCII編碼(65-69,01000001-01000101),但是有點冗長

原创 Java窗體類

1、JFrame是一個頂層的框架類,好比一個窗戶的框子。也是一個容器類。這個框子可以嵌入幾個玻璃窗。   JPanel是一個容器類,相當於一大玻璃窗。   JLabel等是一些基礎組件,它必須置於某個容器裏,類似於窗花、剪紙,必須置於窗戶