JDK飛行記錄器(JFR)是一種結構化日志記錄工具, 它記錄廣泛的系統級(system-level)事件。類似于飛機上的黑盒子,它會持續記錄飛行數據,用于調查飛行事故。JFR會持續記錄JVM中的 一系列事件,用于診斷問題。這種方式的優勢是,它會按時間順序,捕獲導致事故的,詳細系統信息。JFR被設計的,對于性能影響很小,所以 可以安全地在生產環境長時間運行。
優勢:
生成飛行記錄,使用 JFR.start 該實用程序的診斷命令 jcmd。
jcmd 84743 JFR.start duration=5m settings=profile filename=~/jfr/xxkk.jfr
JProfiler是一個用于分析運行JVM內部情況的專業工具。在開發中你可以使用它,用于質量保證,也可以解決你的生產系統遇到的問題。
JProfiler處理四個主要問題:
JProfiler的UI是一個桌面應用程序。你可以以交互的方式實時分析JVM,也可以在不使用UI的情況下,自動化分析。保存在快照中的分析數據,可以通過JProfiler UI打開。此外,命令行工具和構建工具集成可以幫助你自動分析會話。
注意:JProfile 是商業軟件,希望大家在使用的過程中購買正版授權
記錄的對象
內存分析中,可以通過記錄的對象找到最耗費內存的對象。只有總對象大小超過固定閾值(通常是堆的1%)的類才會被記錄。默認情況下,JFR中禁用了這個功能,因為它會引入大量的開銷。
下面兩個字段的解釋:
https://docs.oracle.com/en/java/javase/17/docs/specs/man/jfr.html
分配熱點視圖與分配調用樹一起,允許你直接關注負責創建所選類的方法。就像記錄的對象視圖,分配熱點視圖也支持標記當前狀態和觀察一段時間內的差值。視圖中會添加一個差值列,它顯示了熱點自當_標記當前值_操作被調用后的變化。因為默認情況下,分配視圖不會定期更新,所以你必須單擊_計算_工具欄按鈕以獲得一個新數據集然后與基線值比較。
找到主要是因為 byte[] 數組分配,成為一個分配熱點方法。
/**
* VM ARG : -Xms64m -Xmx64m
*/
public static void main(String[] args) throws InterruptedException {
List<byte[]> list=new ArrayList<>(1000);
//2kb * 10 * 120=2400kb
//數量=10 * 120 / 10=120
for (int i=0; i < 10000; i++) {
Thread.sleep(100);
byte[] arr=new byte[1024 * 2];
list.add(arr);
}
}
跟蹤所有的方法調用及其調用棧會消耗相當大的內存,短時間內就會耗盡所有內存。另外,在一個繁忙的JVM中,很難直觀獲得方法調用的數量。通常情況下,這個數字是如此之大,以至于定位和跟隨跟蹤是不可能的。
另一個方面,只有將收集到的數據進行匯總,許多性能問題才會變得清晰。這樣,你就可以知道在某個時間段內,方法調用相對于整個活動的重要性。如果是單一的跟蹤,你對你所看的數據的相對重要性沒有概念。
這就是為什么JProfiler建立了一個所有觀察到的調用堆棧的累積樹,并注解有觀察到的時間和調用次數。時間順序信息被消除,只保留總數。樹中的每個節點代表一個至少被觀察過一次的調用堆棧。節點的子節點代表在該調用堆棧中看到的所有傳出調用。
調用樹是"CPU視圖"部分的第一個視圖,當你開始進行CPU分析時,它是一個很好的起點, 因為遵循方法調用從起點到最細化的終點的自上而下視圖,最容易理解。JProfiler按照子節點的總時間進行排序,所以你可以深度優先打開樹,分析對性能影響最大的部分。
如果你的應用程序運行得太慢,你要找到那些占用大部分時間的方法。通過調用樹,有時可以直接找到這些方法, 但通常這樣做是行不通的,因為調用樹可能很大而且有大量葉節點
在這種情況下,你需要反轉調用樹:一個所有方法的列表,按其總的自身時間排序,從所有不同的調用堆棧中累計出來, 并通過回溯跟蹤顯示這些方法是如何被調用的。在熱點樹中,葉節點是入口點, 就像應用程序的main 方法或線程的run 方法。從熱點樹中最深的節點開始,調用向上傳遞到頂層節點。
回溯跟蹤中的調用次數和執行時間并不是指該方法節點,而是指頂層熱點節點在這條路徑上被調用的次數。理解這一點很重要:粗略一看,你會認為看到的節點上的信息是該節點的調用次數。然而,在熱點樹中,該信息顯示的是該節點對頂層節點的貢獻。所以,你必須這樣理解這些數字: 沿著這個倒置的調用堆棧,頂層熱點被調用了n 次,總持續時間為t 秒。
通過這里可以看到這個 CASE 是因為正則導致的 CPU 熱點
static String pattern=" ^([\u4e00-\u9fa5]+)((·[\u4e00-\u9fa5]+)+|([\u4e00-\u9fa5]+))$";
static String defaultName="張三·無論其是看都看吶阿斯頓啊·薩肯薩肯打開你發都看啊看你發個卡看那可能發看那個可能看吶";
public static void main(String[] args) throws InterruptedException {
int time=1;
String result;
while (true) {
if (time > 0) {
Thread.sleep(time);
}
result=defaultName.matches(pattern) ? "姓名合法" : "姓名不合法";
}
}
從學了Python了之后,不停的在練習,今天就拿百度練下手爬取實時熱點,需要用的庫有requests_html 非常的簡單! 程序運行結果如下圖:
這里要簡單說下:用到了css選擇器,選擇list-title的元素對象,還有需要注意的是這里百度的頁面需要編碼,因為不是UTF-8的! r.encoding=r.apparent_encoding 用這個即可解決! 獲取的鏈接是一個集合,我們只需要for 遍歷輸出即可!
下面附上源代碼,如有不足的地方歡迎大神指出!學無止境,讓我們一起學習Python吧!
二、網頁常見的結構
header 標簽 --- 頭部分結構
nav 標簽 --- 導航條部分結構
main 標簽 --- 主核心部分內容
footer 標簽 --- 頁尾
01.代碼示例:
<body>
<header>...</header>
<nav>...</nav>
<main>...</main>
<footer>...</footer>
</body>
02.以上源代碼使用 DOM(文件對象模型)表示:
body
header
nav
main
footer
03. header 與 footer 用法
header --- 指整個網頁/或某個區塊的頭部。
一定會包含該區塊的標題
可能會包含該區塊的副標題、版本、署名等等
footer --- 表示整個網頁/或某個區塊的腳部
可能包括版權信息、參考資源、附注等等
小結:
頭是header,腳是footer。
header 和 footer 都可能多次出現,但它們的級別是不同的。
04.nav(navgation 導航) --- 包含一組鏈接,連接至網站其它主要頁面。
nav 標簽 與 header 標簽的關系
不建議將nav放置在header內
頭部/header是從上下文邏輯關系上來說的,并不一定是視覺設計中擺在頂上的內
容,所以一般不會包含nav。
小結:
導航 navigation包含一組鏈接,指向網站的其他主要欄目。
nav和header通常是互相獨立的并列關系。
nav可能在頁面中多次出現,分別指主導航、二級導航等等。
05.main 標簽和 aside 標簽
main --- 代表網頁中的主要內容/主結構
不會包含網站的主導航條、網站總標題和網站總頁腳,但可能包含次一級別的
header/van/footer。
*注:每個網頁最多只有一個main
main 不可能是以下元素的后代:
article(文章標簽)、aside(附屬內容標簽)、footer(網頁標簽)、deader(頭部標簽) 或
nav(導航標簽)
aside(附屬內容)
附屬內容
如果刪除,影響不大
應與主內容main相關
aside有時被翻譯成"側邊",這種翻譯是不準確的。
代碼示例:
<body>
<header>...</header>
<nav>...</nav>
<main>
</main>
<aside></aside>
<footer>...</footer>
</body>
按 DOM(文件對象模型)構建 html :
body
header
nav
main
aside
footer
小結:
01.主內容main,每個頁面只有一個,指該頁面專屬的內容塊,區別于網站的其他頁面。
02.附屬內容aside,與主內容有一些聯系,如果被刪除,對網頁的閱讀沒有明顯影響。
06. article 標簽與 section 標簽
article 是一篇完整的文章,代表頁面中獨立的、完整的、可以獨自被外部引用的內容。
注意:header/footer/nav都可能出現在article中,作為文章自身的頭、尾與文章內部導航。
section (片段或章節) :
無法獨立成文,通常性屬于 article 的一部分,該片段里的開始部分仍有一個自然標題以
及相關內容。
section 也可能是main的子元素。
07.關于 id :
唯一標識符,同一頁面里id不得重復,以半角英文字母開頭,不含特殊字符與空格,描述職能
,不描述樣式。
小結:
01.article 是一篇獨立的完整的文章,可以被外界引用的。
02.section 可以是 article 中的一個章節,也可以是主內容中的一個區塊。
03.不管是 article 還是 section , 第一個子元素總是標題(header 或 h1)。
08. div 標簽(部門、分塊)
div --- 根據職能的不同,劃分出特定的一塊區域,常常結合id屬性使用。
示例:
<header>
<h1>internet...</h1>
</header>
<div id="today">...</div> ---今日熱點功能區域
<div id="login">...</div> ---登陸相關功能區域
<div id="search">...</div> ---搜索功能區域
article、section、div 的區別:
aricle:文章
如果上下文能聯合組成一個有意義的獨立文章;應優先使用 article
section:片段,章節
無法使用article時,該片段里的開始部分仍有一個自然標題,和相關內容。
div:部門、分塊
在無法使用article/section/aside等時,仍承擔著特定功能的分塊。
小結:
在無法使用article/section/aside等時,仍承擔著特定功能的分塊,就可以使用 div 標簽。
div標簽和section標簽一樣,常常帶有id屬性。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。