多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 服務器 > JDK自帶工具之jhat

JDK自帶工具之jhat

來源:程序員人生   發布時間:2015-02-07 08:21:02 閱讀次數:4031次

  JhatJDK自帶的1個輕量級小工具。jhat位于javabin目錄下,是用來分析java堆的命令,可以將堆中的對象以html的情勢顯示出來,包括對象的數量,大小等等,并支持對象查詢語言,jhat工具1般和jmap工具配合使用。

1、Jstat命令格式

Jhat dumpFile

2、使用步驟

第1步:導出堆

第2步:分析堆文件

第3步:查看html

有時dump出來的堆很大,在啟動時會報堆空間不足的毛病,可使用以下參數:
jhat -J-Xmx512m <heap dump file>

 

3、利用JMAP的源代碼導出dump文件

package com.jdkTools;

 

import java.util.ArrayList;

import java.util.Random;

 

/**

 * 簡單的利用,有大量的循環和創建對象,供測試JDK自帶的jmap使用

 * 參數:-Xms30m -Xmx60m

 *

 * @author 范芳銘

 */

public class EasyJmap {

    public byte[] placeHolder = newbyte[1 * 1024]; // 占位符

 

    public static void main(String[]args) throws Exception {

        while (true) {

            Random random = newRandom();

            int loops =random.nextInt(10000);

            EasyJmap jstat = newEasyJmap();

            System.out.println("......正在構建對象:" + loops + "(個)");

            jstat.getLoop(loops); //屢次循環,產生大量對象

            Thread.sleep(10);      

        }

    }

 

    public void getLoop(int size) {

        ArrayList<EasyJmap>list = new ArrayList<EasyJmap>();

        for (int i = 0; i < size;i++) {

            EasyJmap jstat = newEasyJmap();

            list.add(jstat);

        }

    }

}

 

4、導出dump文件

C:Program FilesJavajdk1.6.0_25in>jmap-dump:format=b,file=d:/ffm83/jmaplog.txt 1668

Dumping heap to D:ffm83jmaplog.txt ...

Heap dump file created

5、分析堆文件

C:ProgramFilesJavajdk1.6.0_25in>jhat D:/ffm83/jmaplog.txt

Readingfrom D:/ffm83/jmaplog.txt...

Dumpfile created Tue Jan 20 16:47:38 CST 2015

Snapshotread, resolving...

Resolving10893 objects...

Chasingreferences, expect 2 dots..

Eliminatingduplicate references..

Snapshotresolved.

StartedHTTP server on port 7000

Serveris ready.

6、查看堆文件的HTML

默許端口為 7000,可使用http://localhost:7000/訪問
例如:

Packagecom.jdkTools

class com.jdkTools.EasyJmap [0x7d077f8]

OtherQueries

  • All classes including platform
  • Show all members of the rootset
  • Show instance counts for all classes (including platform)
  • Show instance counts for all classes (excluding platform)
  • Show heap histogram
  • Show finalizer summary
  • Execute Object Query Language (OQL) query

 

7、jhat中的OQL(對象查詢語言) 

如果需要根據某些條件來過濾或查詢堆的對象,進入“?   Execute Object Query Language (OQL) query”在jhat的html頁面中履行OQL,來查詢符合條件的對象

OQL基本語法 
select <javascript expression to select>
[from [instanceof] <class name> <identifier>]
[where <javascript boolean expression to filter>]
8、OQL解釋

(1)class name是java類的完全限定名,如:java.lang.String, java.util.ArrayList, [C是char數組, [Ljava.io.File是java.io.File[]
(2)類的完全限定名不足以唯1的辨識1個類,由于不同的ClassLoader載入的相同的類,它們在jvm中是不同類型的
(3)instanceof表示也查詢某1個類的子類,如果不明確instanceof,則只精確查詢class name指定的類
(4)from和where子句都是可選的
(5)java域表示:obj.field_name;java數組表示:array[index]

9、OQL經常使用示例

(1)查詢長度大于100的字符串
select s from java.lang.String s where s.count > 100

(2)查詢長度大于256的數組
select a from [I a where a.length > 256
(3)顯示匹配某1正則表達式的字符串
select a.value.toString() from java.lang.String s where /java/(s.value.toString())
(4)顯示所有文件對象的文件路徑
select file.path.value.toString() from java.io.File file
(5)顯示所有ClassLoader的類名
select classof(cl).name from instanceof java.lang.ClassLoader cl
(6)通過援用查詢對象
select o from instanceof 0xd404d404 o

OQL-built-in對象 -- heap 
(1)heap.findClass(class name) -- 找到類
select heap.findClass("java.lang.String").superclass
(2)heap.findObject(object id) -- 找到對象
select heap.findObject("0xd404d404")
(3)heap.classes -- 所有類的枚舉
select heap.classes
(4)heap.objects -- 所有對象的枚舉
select heap.objects("java.lang.String")
(5)heap.finalizables -- 等待垃圾搜集的java對象的枚舉
(6)heap.livepaths -- 某1對象存生路徑
select heaplivepaths(s) from java.lang.String s
(7)heap.roots -- 堆根集的枚舉

OQL-辨識對象的函數 
(1)classof(class name) -- 返回java對象的類對象
select classof(cl).name from instanceof java.lang.ClassLoader cl
(2)identical(object1,object2) -- 返回是不是兩個對象是同1個實例
select identical(heap.findClass("java.lang.String").name,heap.findClass("java.lang.String").name)
(3)objectid(object) -- 返回對象的id
select objectid(s) from java.lang.String s
(4)reachables -- 返回可從對象可到達的對象
select reachables(p) from java.util.Properties p -- 查詢從Properties對象可到達的對象
select reachables(u, "java.net.URL.handler") from java.net.URL u -- 查詢從URL對象可到達的對象,但不包括從URL.handler可到達的對象
(5)referrers(object) -- 返回援用某1對象的對象
select referrers(s) from java.lang.String s where s.count > 100
(6)referees(object) -- 返回某1對象援用的對象
select referees(s) from java.lang.String s where s.count > 100
(7)refers(object1,object2) -- 返回是不是第1個對象援用第2個對象
select refers(heap.findObject("0xd4d4d4d4"),heap.findObject("0xe4e4e4e4"))
(8)root(object) -- 返回是不是對象是根集的成員
select root(heap.findObject("0xd4d4d4d4")) 
(9)sizeof(object) -- 返回對象的大小
select sizeof(o) from [I o
(10)toHtml(object) -- 返回對象的html格式
select "<b>" + toHtml(o) + "</b>" fromjava.lang.Object o
(11)選擇多值
select {name:t.name?t.name.toString():"null",thread:t} frominstanceof java.lang.Thread t

OQL-數組、迭代器等函數 
(1)concat(enumeration1,enumeration2) -- 將數組或枚舉進行連接
select concat(referrers(p),referrers(p)) from java.util.Properties p
(2)contains(array, expression) -- 數組中元素是不是滿足某表達式
select p from java.util.Properties where contains(referres(p),"classof(it).name == 'java.lang.Class'")
返回由java.lang.Class援用的java.util.Properties對象
built-in變量
it -- 當前的迭代元素
index -- 當前迭代元素的索引
array -- 被迭代的數組
(3)count(array, expression) -- 滿足某1條件的元素的數量
select count(heap.classes(), "/java.io./(it.name)")
(4)filter(array, expression) -- 過濾出滿足某1條件的元素
select filter(heap.classes(), "/java.io./(it.name)")
(5)length(array) -- 返回數組長度
select length(heap.classes())
(6)map(array,expression) -- 根據表達式對數組中的元素進行轉換映照
select map(heap.classes(),"index + '-->' + toHtml(it)")
(7)max(array,expression) -- 最大值, min(array,expression)
selectmax(heap.objects("java.lang.String"),"lhs.count>rhs.count")
built-in變量
lhs -- 左側元素
rhs -- 右側元素
(8)sort(array,expression) -- 排序
select sort(heap.objects('[C'),'sizeof(lhs)-sizeof(rhs)')
(9)sum(array,expression) -- 求和
select sum(heap.objects('[C'),'sizeof(it)')
(10)toArray(array) -- 返回數組
(11)unique(array) -- 唯1化數組

 

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲黄色三级视频 | 欧美性色欧美a在线观看 | 亚洲欧美综合图片 | 久久中国| 成人自拍偷拍 | 337p日本欧洲亚洲大胆艺术图666 | 美日韩在线 | 欧美一级高清免费播放 | 午夜爱爱免费视频 | 欧美一级在线全免费 | 天堂mv亚洲mv在线播放9蜜 | 精品精品国产高清a毛片牛牛 | 欧美一级视频在线高清观看 | freexx性欧美hd | 91精品国产亚洲爽啪在线影院 | 久久国产免费福利资源网站 | 欧美日韩午夜精品不卡综合 | 欧美a在线播放 | 国产爱v| 国产精品国产欧美综合一区 | 五月天伊人| 天堂色| 日韩2页| 茄子成视频片在线观看 | 亚洲最大免费视频网 | 欧美成人h版网址 | 久久视频一区 | 中文字幕成人在线观看 | 国产精品亚洲综合网站 | 日韩欧美爱爱 | 国产农村精品一级毛片视频 | 欧美13一14周岁a在线播放 | 欧美图片小说视频 | 久久国产免费福利资源网站 | 伊人免费视频 | 真实男女xx00动态视频 | 国产麻豆精品在线观看 | 日韩欧美一及在线播放 | 中文字幕亚洲专区 | 国产视频xxx | 一区二区视频在线观看免费的 |