隨筆分類 - Java虛擬機(jī)
摘要:曹工改bug:cpu狂飆,old gc頻繁,線程神秘死亡連環(huán)案件調(diào)查報(bào)告 前言 前兩天,訪問開發(fā)環(huán)境上一個(gè)java服務(wù),發(fā)現(xiàn)一直轉(zhuǎn)圈圈,因?yàn)槲议_著fiddler,可以看到的現(xiàn)象是,接口一直沒返回;本來想著直接jenkins重新構(gòu)建一下開發(fā)環(huán)境(即重啟服務(wù)),突然覺得,還是看看到底啥情況吧。 #排查過
閱讀全文
摘要:markword #注釋 該文件目錄在: \openjdk-jdk8u\hotspot\src\share\vm\oops\markOop.hpp #ifndef SHARE_VM_OOPS_MARKOOP_HPP #define SHARE_VM_OOPS_MARKOOP_HPP #include
閱讀全文
摘要:背景 大一點(diǎn)的公司,可能有一些組,專門做中間件的;假設(shè),某中間件小組,給你提供了一個(gè)jar包,你需要集成到你的應(yīng)用里。假設(shè),它依賴了一個(gè)日期類,版本是v1;我們應(yīng)用也依賴了同名的一個(gè)日期類,版本是v2. 兩個(gè)版本的日期類,方法邏輯的實(shí)現(xiàn),有一些差異。 舉個(gè)例子,中間件提供的jar包中,依賴如下工具包
閱讀全文
摘要:背景 因?yàn)橄胫纉ava中的關(guān)鍵字,對應(yīng)的操作系統(tǒng)級別的api是啥,本來打算整理幾個(gè)我知道的出來,但是,尷尬的是,我發(fā)現(xiàn)java里最重要的synchronized關(guān)鍵字,我就不知道它對應(yīng)的api是什么。 redis中如何獲取鎖 在redis源碼里,線程如果要進(jìn)入一個(gè)同步區(qū)(只能單線程進(jìn)入的代碼塊),
閱讀全文
摘要:背景 大家知道,jdk安裝的目錄下,一般會有個(gè)src.zip包,這個(gè)包基本對應(yīng)了rt.jar這個(gè)包。rt.jar這個(gè)包里面,就放了jdk中,jdk采用java實(shí)現(xiàn)的那部分類庫代碼,比如java.lang包下面的,什么ArrayList之類的。 如何才能調(diào)試這部分代碼呢,這里的調(diào)試,是說,能夠修改源代
閱讀全文
摘要:Jar包沖突的相關(guān)文章: 了不得,我可能發(fā)現(xiàn)了Jar 包沖突的秘密 一、前言 jar包沖突分多種,簡單理解來說,就是同package且同名的類在多個(gè)jar包內(nèi)出現(xiàn),如果兩個(gè)jar包在同一個(gè)classloader下,那么最終的結(jié)果是,只會加載其中的一個(gè)。 有時(shí),這個(gè)錯(cuò)誤一般在運(yùn)行時(shí)出現(xiàn),報(bào)的錯(cuò)可能是,
閱讀全文
摘要:一、前言 今天事不是很多,正好在Java交流群里,看到一個(gè)比較有意思的問題,于是花了點(diǎn)時(shí)間研究了一下,這里做個(gè)簡單的分享。 先貼一份測試代碼,大家可以先猜測一下,執(zhí)行結(jié)果會是怎樣的: 不知道,你猜對了沒有呢,實(shí)際的執(zhí)行結(jié)果會是下面這樣的: 二、原因分析 這里,一開始大家分析的是,和new有關(guān)系;但下
閱讀全文
摘要:一、前言 今天下午本來在劃水,突然看到微信聯(lián)系人那一個(gè)紅點(diǎn)點(diǎn),看了下,應(yīng)該是博客園的朋友。加了后,這位朋友問了我一個(gè)問題: 問我,這兩塊有什么關(guān)系? 看到這段 gc 日志,一瞬間腦子還有點(diǎn)懵,嗯,這個(gè)可能要翻下書了,周志明的 Java 虛擬機(jī)那本神書里面有講,我果斷地打開了 pdf,找了起來,很快,
閱讀全文
摘要:一、前言 前一陣子比較好奇,想看到底層(虛擬機(jī)、匯編)怎么實(shí)現(xiàn)的java 并發(fā)那塊。 volatile是在匯編里加了lock前綴,因?yàn)関olatile可以通過查看JIT編譯器的匯編代碼來看。 但是原子類,本來在jvm中就是匯編實(shí)現(xiàn)的,反而沒法看。如果能實(shí)際跟蹤一下斷點(diǎn),應(yīng)該也算實(shí)際驗(yàn)證了。 這邊基本
閱讀全文
摘要:一、前言 最近在看《深入java虛擬機(jī)》,看完后,打算自己實(shí)際編譯一個(gè)jvm出來看看,實(shí)踐一下。 書上提到了Oracle JDK和OpenJdk的關(guān)系,Oracle Jdk7 和OpenJdk 7共用了相當(dāng)多的代碼,所以還是很有學(xué)習(xí)的必要的: 二、環(huán)境 我這里的編譯的操作系統(tǒng)是CentOS Linu
閱讀全文
摘要:啟動時(shí)加: -Dsun.misc.ProxyGenerator.saveGeneratedFiles=true
閱讀全文
摘要:一、前言 最近學(xué)習(xí)《深入java虛擬機(jī)》,目前看到內(nèi)存分配策略這塊。本文將進(jìn)行一些實(shí)踐。 二、內(nèi)存分配策略 1.大對象直接進(jìn)入老年代 書中提到了: 下面進(jìn)行測試,代碼如下: 1.1 新生代收集器為Parallel Scavange的情形 以下虛擬機(jī)參數(shù),沒有顯式設(shè)置垃圾收集器,默認(rèn)新生代為Paral
閱讀全文
摘要:一、開啟方法 For Java 1.4, 5, 6, 7, 8 pass this JVM argument to your application: -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:<file-path> For Java 9,
閱讀全文
摘要:前言 相信很多人都看過下面這張圖,(來自《深入理解Java虛擬機(jī):JVM高級特性與最佳實(shí)踐》) 在學(xué)完幾種垃圾收集器類型及組合后,打算看看實(shí)際中程序用到的垃圾收集器。 但是在jconsole中看到的,如下: 兩邊的名稱并不完全匹配,給我造成了很多困惑之處。 實(shí)際上,jconsole里面用到的,我想應(yīng)
閱讀全文
摘要:一、問題及原因 程序里有個(gè)工具類,MQMessageSender.send(),這是個(gè)static方法,平時(shí)一般調(diào)用該方法來發(fā)送mq。 調(diào)用場景如下: 結(jié)果這兩天報(bào)了個(gè)錯(cuò): java.lang.NoClassDefFoundError: Could not initialize class com.
閱讀全文
摘要:一、jinfo命令格式 命令格式: jinfo [option] <pid> 二、打印所有參數(shù) 三、查看某個(gè)參數(shù) 四、動態(tài)修改參數(shù) 1、禁用(不過該參數(shù)不能修改) 2、啟用(也遇到了不能改的) 3、來個(gè)可改的 五、查看系統(tǒng)屬性
閱讀全文
摘要:一、序 最近在學(xué)習(xí)jvm工具時(shí),不少鏈接直指oracle官網(wǎng)。才發(fā)現(xiàn)有不少好東西。 本文翻譯自: https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/prepapp002.html 二、正文 這一節(jié)描述如何設(shè)置環(huán)境及
閱讀全文
摘要:一、問題概述 參考前一篇: jvisualvm連接遠(yuǎn)程應(yīng)用終于成功,附踩大坑記錄!!(一:jstatd方式) 這篇主要講講jmx方式。 二、啟動前設(shè)置jmx參數(shù) 我這邊拿tomcat舉例,其余java應(yīng)用只會比它更簡單,讀者可以自行嘗試下。 在tomcat的bin目錄下,創(chuàng)建setenv.sh(文件
閱讀全文
摘要:一、問題概述 連接遠(yuǎn)程java應(yīng)用除了jstatd方式,還有jmx方式。不必拘泥于一種,一種不行可以果斷嘗試另一種,興許就行了。 姊妹篇在這: jvisualvm連接遠(yuǎn)程應(yīng)用終于成功,附踩大坑記錄!!(二:jmx方式) 目前,在jvisualvm連接失敗的相關(guān)互聯(lián)網(wǎng)博客中,我還沒看到有人和我一樣的解
閱讀全文
摘要:一、環(huán)境信息 遠(yuǎn)程tomcat:linux 64位 centos 7 上tomcat 8 本機(jī):windows7 二、步驟 linux上,在tomcat安裝目錄的bin下,新建setenv.sh,內(nèi)容如下: 另: 如果在windows下,可以創(chuàng)建setenv.bat腳本,內(nèi)容如下: 三、本機(jī)連接 1
閱讀全文

浙公網(wǎng)安備 33010602011771號