日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JDK14性能管理工具:Jconsole详解

發(fā)布時(shí)間:2024/2/28 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDK14性能管理工具:Jconsole详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 簡介
  • JConsole
    • 概覽
    • 內(nèi)存
    • 線程
    • VM信息
    • MBean
  • 總結(jié)

簡介

我們在開發(fā)java項(xiàng)目的時(shí)候,或多或少都會(huì)去用到Java的性能管理工具。有時(shí)候是為了提升應(yīng)用程序的性能,有時(shí)候是為了查找java應(yīng)用程序的bug。

性能監(jiān)控和調(diào)試工具在英文中叫做profile tool,提起這種工具大家可能會(huì)想到一些非常出名的jprofile等收費(fèi)工具,其實(shí)JDK也自帶了一些性能調(diào)試工具,比如JMC和Jconsole。

JMC現(xiàn)在已經(jīng)和JDK的版本獨(dú)立出來了,詳情請參考我之前的文章:JDK 14的新特性:JFR,JMC和JFR事件流,今天我們將會(huì)重點(diǎn)講解Jconsole的使用。

更多精彩內(nèi)容且看:

  • 區(qū)塊鏈從入門到放棄系列教程-涵蓋密碼學(xué),超級賬本,以太坊,Libra,比特幣等持續(xù)更新
  • Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續(xù)更新
  • Spring 5.X系列教程:滿足你對Spring5的一切想象-持續(xù)更新
  • java程序員從小工到專家成神之路(2020版)-持續(xù)更新中,附詳細(xì)文章教程

更多內(nèi)容請?jiān)L問www.flydean.com

JConsole

JConsole是JDK自帶的管理工具,在JAVA_HOME/bin下面,直接命令JConsole即可開啟JConsole。

JConsole有兩種連接方式,一種是連接本地的進(jìn)程,一種是連接遠(yuǎn)程的程序。

本地連接是不需要密碼的,直接選擇相應(yīng)的JVM程序即可。本地連接有一個(gè)前提,就是JConsole的用戶一定要和java程序的用戶是相同的,否則無法操作JVM。

遠(yuǎn)程連接是通過JMX協(xié)議進(jìn)行的,JMX的全稱是Java Management Extention,現(xiàn)在大家做web可能對這個(gè)協(xié)議不太清楚,如果是做客戶端程序,接觸的應(yīng)該會(huì)多一些。簡單點(diǎn)講,JMX是用來做遠(yuǎn)程管理的。程序把要管理的Bean暴露出去,然后通過JMX協(xié)議連接進(jìn)行操作。

好了,我們連上一個(gè)自己寫的程序試一下。

概覽

JConsole分為六大部分,概覽,內(nèi)存,線程,類,VM和MBean。

先看一下概覽:

概覽展示了堆內(nèi)存使用量,線程,類和CPU占用率這四大內(nèi)容。

內(nèi)存

我們這個(gè)程序是使用JDK14來啟動(dòng)的,我們看下它的內(nèi)存情況:

從上圖中,我們可以看到使用JConsole可以監(jiān)控堆內(nèi)存,非堆內(nèi)存的一些情況,更進(jìn)一步,還可以監(jiān)控內(nèi)存池中的一些項(xiàng)目的使用情況。

G1垃圾回收器中的Eden,Old和Survivor space大家應(yīng)該都很熟悉了。

Young Gen被劃分為1個(gè)Eden Space和2個(gè)Suvivor Space。當(dāng)對象剛剛被創(chuàng)建的時(shí)候,是放在Eden space。垃圾回收的時(shí)候,會(huì)掃描Eden Space和一個(gè)Suvivor Space。如果在垃圾回收的時(shí)候發(fā)現(xiàn)Eden Space中的對象任然有效,則會(huì)將其復(fù)制到另外一個(gè)Suvivor Space。

就這樣不斷的掃描,最后經(jīng)過多次掃描發(fā)現(xiàn)任然有效的對象會(huì)被放入Old Gen表示其生命周期比較長,可以減少垃圾回收時(shí)間。

在JDK8之前,類定義、字節(jié)碼和常量等很少會(huì)變更的信息是放在持久代Perm Gen中的。不過在JDK8之后,Perm Gen已經(jīng)被取消了,現(xiàn)在叫做Metaspace。Metaspace并不在java虛擬機(jī)中,它使用的是本地內(nèi)存。Metaspace可以通過-XX:MaxMetaspaceSize來控制。

Code Cache是JVM用來存儲native code的,因?yàn)槭怯肏eap的形式來存儲的,所以叫Code Heap。Code Heap被分為三個(gè)部分,Non-method,Profiled和Non-profiled。

Non-method部分包含的是非方法的code,比如說編譯器緩沖區(qū)和字節(jié)碼解釋器。這些代碼是永久保存在代碼緩存區(qū)中的。代碼堆的大小是固定的。Non-method使用-XX:NonMethodCodeHeapSize來控制。

Profiled部分表示存的是生命周期比較短的稍微優(yōu)化的profiled methods。Profiled使用–XX:ProfiledCodeHeapSize來控制。

Non-profiled存放的是優(yōu)化過的,non-profiled方法,并且他們的生命周期會(huì)比較長。Non-profiled用-XX:NonProfiledCodeHeapSize來控制。

最后還有一個(gè)Compressed Class Space,它是和-XX:+UseCompressedOops,-XX:+UseCompressedClassesPointers有關(guān)的。實(shí)際上是一個(gè)指針的壓縮,可以使用32bits來表示之前64bits的指針。

線程

線程列出了程序目前正在運(yùn)行的線程,如果點(diǎn)擊具體的線程信息還可以看到線程中的堆棧跟蹤和線程狀態(tài)統(tǒng)計(jì),非常有用。

類很簡單,顯示了加載的類的個(gè)數(shù)。

VM信息

VM信息展示了虛擬機(jī)相關(guān)的一些參數(shù)。

MBean

最后,MBean暴露了JVM中的一些Bean,我們可以查看這些bean的信息或者調(diào)用Bean中的方法。

以我們之前講過的JFR為例,我們可以調(diào)用JFR的startRecording,stopRecording等方法。

總結(jié)

JConsole是一個(gè)比較簡單但是也很實(shí)用的profile工具,希望大家能夠在編寫代碼之余,多多考慮代碼的性能和效率。

本文作者:flydean程序那些事

本文鏈接:http://www.flydean.com/jdk14-jvm-jconsole/

本文來源:flydean的博客

歡迎關(guān)注我的公眾號:程序那些事,更多精彩等著您!

總結(jié)

以上是生活随笔為你收集整理的JDK14性能管理工具:Jconsole详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。