Java知識分享網 - 輕松學習從此開始!????

Java知識分享網

Java1234官方群25:java1234官方群25
Java1234官方群25:838462530
        

實戰springboot+CAS單點登錄課程(免費領取)

SpringBoot打造全棧在線教育平臺實戰課程

畢設代做論文包查重聯系人QQ:1982956321畢設大神 畢設代做論文包查重

66套java實戰課程無套路領取

Java1234 VIP課程

領取微信掃碼登錄Java實現視頻教程

Java1234至尊VIP(特價活動)

Java面試題原理和底層 PDF 下載


分享到:
時間:2020-11-09 16:17來源:http://www.nukdnfhq.buzz 作者:小鋒  侵權舉報
Java面試題原理和底層 PDF 下載
失效鏈接處理
Java面試題原理和底層 PDF 下載

本站整理下載:

相關截圖:


主要內容:

1. HashSet底層原理
基于HashMap實現的,HashSet底層使用HashMap來保存所有元素,hashset實現簡單,hashset操作是調用底層hashmap的方法。默認初始一個容量未16負載因子為0.75的hashmap。
https://www.iteye.com/blog/zhangshixi-673143
2. HashMap底層原理
HashMap是基于哈希表的Map接口的非同步實現。
允許使用null值和null鍵。無序。
HashMap數據結構“數組+鏈表+紅黑樹”。
3. synchronized底層如何實現?鎖優化,怎么優化?
synchronized 是Java內建的同步機制,提供了互斥的語義和可見性,當一個線程已經獲取當前鎖時,其他試圖獲取的線程只能等待或者阻塞在那里。
原理:
synchronized可以保證方法或者代碼塊在運行時,同一時刻只有一個方法可以進入到臨界區,同時它還可以保證共享變量的內存可見性
底層實現:
同步代碼塊是使用monitorenter和monitorexit指令實現的, ,當且一個monitor被持有之后,將處于鎖定狀態。線程執行到monitorenter指令時,將會嘗試獲取對象所對應的monitor所有權,即嘗試獲取對象的鎖;
Java對象頭和monitor是實現synchronized的基礎!
synchronized存放的位置:synchronized用的鎖是存在Java對象頭里的。
Java對象頭包括:
Mark Word(標記字段): 用于存儲對象自身的運行時數據, 如哈希碼(HashCode)、GC分代年齡、鎖狀態標志、線程持有的鎖、偏向線程 ID、偏向時間戳等等。它是實現輕量級鎖和偏向鎖的關鍵
Klass Pointer(類型指針): 是對象指向它的類元數據的指針,虛擬機通過這個指針來確定這個對象是哪個類的實例
monitor:  可以把它理解為一個同步工具, 它通常被描述為一個對象。 是線程私有的數據結構
4. ConcurrentHashMap 的工作原理,底層原理(談到多線程高并發大幾率會問它)
 
5. JVM調優(JVM層層漸進問時大幾率問)
查看堆空間大小分配(年輕代、年老代、持久代分配)
垃圾回收監控(長時間監控回收情況)
線程信息監控:系統線程數量
線程狀態監控:各個線程都處在什么樣的狀態下
線程詳細信息:查看線程內部運行情況,死鎖檢查
CPU熱點:檢查系統哪些方法占用了大量CPU時間
內存熱點:檢查哪些對象在系統中數量最大
jvm問題排查和調優:
jps主要用來輸出JVM中運行的進程狀態信息。
jstat命令可以用于持續觀察虛擬機內存中各個分區的使用率以及GC的統計數據
jmap可以用來查看堆內存的使用詳情。
jstack可以用來查看Java進程內的線程堆棧信息。 jstack是個非常好用的工具,結合應用日志可以迅速定位到問題線程。
Java性能分析工具
jdk會自帶JMC(JavaMissionControl)工具??梢苑治霰镜貞靡约斑B接遠程ip使用。提供了實時分析線程、內存,CPU、GC等信息的可視化界面。
JVM內存調優
對JVM內存的系統級的調優主要的目的是減少GC的頻率和Full GC的次數。 過多的GC和Full GC是會占用很多的系統資源(主要是CPU),影響系統的吞吐量。
使用JDK提供的內存查看工具,比如JConsole和Java VisualVM。
導致Full GC一般由于以下幾種情況:
舊生代空間不足
調優時盡量讓對象在新生代GC時被回收、讓對象在新生代多存活一段時間和不要創建過大的對象及數組避免直接在舊生代創建對象
新生代設置過小
一是新生代GC次數非常頻繁,增大系統消耗;二是導致大對象直接進入舊生代,占據了舊生代剩余空間,誘發Full GC
2). 新生代設置過大
一是新生代設置過大會導致舊生代過?。ǘ芽偭恳欢ǎ?,從而誘發Full GC;二是新生代GC耗時大幅度增加
3). Survivor設置過小
導致對象從eden直接到達舊生代
4). Survivor設置過大
導致eden過小,增加了GC頻率
一般說來新生代占整個堆1/3比較合適
GC策略的設置方式
1). 吞吐量優先 可由-XX:GCTimeRatio=n來設置
2). 暫停時間優先 可由-XX:MaxGCPauseRatio=n來設置
JVM內存管理,JVM的常見的垃圾收集器,GC調優


------分隔線----------------------------
鋒哥公眾號


鋒哥微信


關注公眾號
【Java資料站】
回復 666
獲取 
66套java
從菜雞到大神
項目實戰課程
山东麻将怎么开牌 巴蜀麻将上分模式 深圳风采2018056开奖 十一选五任三神号配组 二人麻将过胡未胡 斗地主棋牌游戏大厅 3d快乐10分钟开奖结果 11选5最牛技巧 22号公牛vs小牛直播 河北推倒胡麻将玩法 微乐龙江棋牌官方网站 波克城市斗地主下载 云南快乐10分最大遗漏 河南福彩22选5预测 青海省11选5最新开奖 微信捕鱼苹果手机充值中心 星悦云南麻将卡二条