以后可能用到的一些OQL

Visual VM對OQL的支持

上面我們學會了如何查看堆內存快照,但是,堆內存快照十分龐大,快照中的類數量也很多。Visual VM提供了對OQL(對象查詢語言)的支持,以便于開發人員在龐大的堆內存數據中,快速定位所需的資源。

2.1 Visual VM的OQL基本語法

OQL 語言是一種類似SQL的查詢語言。基本語法如下:

 
  1. select <JavaScript expression to select>

  2. [ from [instanceof] <class name> <identifier>

  3. [ where <JavaScript boolean expression to filter> ] ]

OQL由3個部分組成:select 子句、from 子句和where 子句。select 子句指定查詢結果要顯示的內容;from 子句指定查詢范圍,可指定類名,如java.lang.String、char[]、[Ljava.io.File(File數組);where 子句用于指定查詢條件。

select 子句和where 子句支持使用Javascript 語法處理較為復雜的查詢邏輯;select 子句可以使用類似json的語法輸出多個列;from子句中可以使用instanceof關鍵字,將給定類的子類也包括到輸出列表中。

在Visual VM的OQL中,可以直接訪問對象的屬性和部分方法。如下例中,直接使用了String對象的count屬性,篩選出長度大于等于100的字符串:

select s from java.lang.String s where s.count >= 100

選取長度大于等于256的 int 數組:

select a from int[] a where a.length >= 256

篩選出表示兩位數整數的字符串:

select {instance: s, content: s.toString()} from java.lang.String s where /^\d{2}$/(s.toString())

上例中,select 子句使用了json語法,指定輸出兩列為String對象以及String.toString() 的輸出。where 子句使用正則表達式,指定了符合/^\d{2}$/條件的字符串。

下例使用 instance 關鍵字選取所有的ClassLoader,包括子類:

select cl from instanceof java.lang.ClassLoader cl;

由于在Java程序中,一個類可能會被多個ClassLoader同時載入,因此,這種情況下,可能需要使用Class的ID來指定Class。如下例,選出了所有ID為0x37A014D8的Class對象實例。

select s from 0x37A014D8 s;

解決內存泄露的一個方法是分許heap dump文件,可以參考?http://visualvm.java.net/oqlhelp.html

我自己總結了一下以后可能用到的一些OQL,如下:

查找所有包含指定類的list

heap.objects(heap.findClass("java.util.ArrayList"),true, function(it){
if(it.size<=0){
return false ;
}
var i=0;
var data = it.elementData[0];
var className = classof(data).name;
if(isClass(className)){
return true
}else{
return false;
}

} )

function isClass(name){
var pattern = /com.netease/ ;
var result = pattern.exec(name);
return result!=null;
}

查找業務類直接或者間接引用的list

select filter(heap.livepaths(s),function(it){

var array = it ;
var i= 0;
var size = array.length;
for(;i<size;i++){
var className = classof(array[i]).name;
if(isClass(className)){
return true
}else{
return false;
}
}
return true ;


})?
from java.util.ArrayList s

?

查找包含內容最多的List,這個應該是查找內存泄露的好語句
map(top(heap.objects('java.util.ArrayList'), 'rhs.size - lhs.size', 5),"toHtml(it)+'='+it.size")

查找當前系統屬性
map(heap.objects(heap.findClass("com.netease.Main")),"it.size")

查找同樣內容最多的string
var counts={};
var alreadyReturned={};

filter(
sort(
map(heap.objects("java.lang.String"),
function(heapString){
if( ! counts[heapString.toString()]){
counts[heapString.toString()] = 1;
} else {
counts[heapString.toString()] = counts[heapString.toString()] + 1;
}
return { string:heapString.toString(), count:counts[heapString.toString()]};
}),?
'lhs.count < rhs.count'),
function(countObject) {
if( ! alreadyReturned[countObject.string]){
alreadyReturned[countObject.string] = true;
return true;
} else {
return false;
}
}
);

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/386762.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/386762.shtml
英文地址,請注明出處:http://en.pswp.cn/news/386762.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode1041困于環中的機器人

題目如下&#xff0c;一道簡單的模擬 在無限的平面上&#xff0c;機器人最初位于 (0, 0) 處&#xff0c;面朝北方。機器人可以接受下列三條指令之一&#xff1a;"G"&#xff1a;直走 1 個單位 "L"&#xff1a;左轉 90 度 "R"&#xff1a;右轉 90…

一個拆分使用的存儲過程例子

set serverout on declare var_tmp varchar2(4000) :; var_element varchar2(4000) :; n_length Number : length(\/); begin values_array : VARCHAR_ARRAY(); -- 初始化數組 for i in (select * from sapsr3.zmdm_mthdr where zmtpre in(6200001…

python的pwntools工具的日常使用

1.安裝 操作系統&#xff1a; ubuntu16.04 環境準備&#xff1a; pythonpiplibssl-devlibffi-dev pwntools安裝&#xff1a; sudo apt-get install libffi-devsudo apt-get install libssl-devsudo apt-get install pythonsudo apt-get install python-pipsudo pip install pwn…

Kibana可視化管理頁面詳細使用說明

Kibana可視化管理頁面詳細使用說明 使用瀏覽器訪問 ip:5601 默認端口&#xff0c;進入首頁 Discover&#xff1a;日志管理視圖 主要進行搜索和查詢 Visualize&#xff1a;統計視圖 構建可視化的圖表 Dashboard&#xff1a;儀表視圖 將構…

OO_BLOG3_規格化設計(JML學習)

目錄 JML語言學習筆記理論基礎應用工具鏈情況JMLUnit/JMLUnitNGUNIT3 作業分析作業 3-1 實現兩個容器類Path和PathContainer作業 3-2 實現容器類Path和數據結構類Graph作業 3-3 實現容器類Path&#xff0c;地鐵系統類RailwaySystem規格撰寫的心得與體會最后&#xff0c;衷心感謝…

JAVA獲取JVM內存空間和物理內存空間

一、獲取JVM內存空間 系統環境&#xff1a;WIN JDK版本&#xff1a;1.8re 直接調用Runtime中相應的方法即可&#xff1a; public long maxMemory() Returns the maximum amount of memory that the Java virtual machine will attempt to use. If there is no inherent lim…

CMU Database Systems - Sorting,Aggregation,Join

Sorting 排序如果可在內存里面排&#xff0c;用經典的排序算法就ok&#xff0c;比如快排 問題在于&#xff0c;數據表中的的數據是很多的&#xff0c;沒法一下都放到內存里面進行排序 所以就需要用到&#xff0c;外排&#xff0c;多路并歸排序 看下最簡單的&#xff0c;2路并歸…

springboot線程池的使用和擴展

實戰環境 windowns10&#xff1b;jdk1.8&#xff1b;springboot 1.5.9.RELEASE&#xff1b;開發工具&#xff1a;IntelliJ IDEA&#xff1b; 實戰源碼 本次實戰的源碼可以在我的GitHub下載&#xff0c;地址&#xff1a;gitgithub.com:zq2599/blog_demos.git&#xff0c;項目主…

統計單詞個數

我是抄題解狂魔 /* 1.s.substr(x,len) 在s中取出從x位置開始&#xff0c;長度為len的字符串&#xff0c;并返回string類型的字符串。 2.s.find(a) 在s中查找字符串a,并返回起始下標&#xff08;從0開始&#xff09;&#xff0c;若不存在&#xff0c;返回1844674407370955161&am…

通過Rancher安裝K8s

說明 我們用kubernetes去管理Docker集群&#xff0c;即可以將Docker看成Kubernetes內部使用的低級別組件。另外&#xff0c;kubernetes不僅僅支持Docker&#xff0c;還支持Rocket&#xff0c;這是另一種容器技術。希望我這篇文章中簡單的描述能讓你對兩者有所理解和認識。 機…

35. 搜索插入位置-LeetCode

心得&#xff1a;這個題也是二分查找&#xff0c;但是有個小技巧&#xff1a;當left>right的時候 left就是要插入的位置。 代碼&#xff1a; 1 class Solution {2 public int searchInsert(int[] nums, int target) {3 if(numsnull||nums.length0)4 …

Kubectl指令集

1 Kubectl指令集 1.1 Master查詢節點信息 [rootmaster1 kubernetes-1.10]# kubectl get nodes 1.2 查詢所有Pod信息 [rootmaster1 ~]# kubectl get pods --namespacekube-system 1.3 查詢故障的Pod信息 [rootmaster1 ~]# kubectl get pods -n kube-sys…

SQL基礎培訓實戰教程[全套]

學習簡介&#xff1a;林楓山根據網上搜索資料進行參考&#xff0c;編寫制作的SQL Server實操學習教程&#xff0c;歡迎下載學習。 下載鏈接目錄如下&#xff1a; 進度0-SQL基礎語法 下載學習文檔 進度1-建數據表-美化版-2018-6-12 下載學習文檔 進度2-關于主鍵-美化…

K8S儀表板Service unavailable故障的解決辦法

K8S儀表板Service unavailable故障的解決辦法 &#xff08;使用Rancher部署Kubernetes后訪問儀表板提示Service unavailable的問題&#xff09; 一、逐項檢查&#xff1a; 1、操作系統Kernel版本&#xff08;3.10以上&#xff09; 2、檢查OS版本&#xff08;Ubuntu16.04.x、…

實驗五報告

一、實驗結論&#xff1a; 1. 二分查找&#xff1a;補足程序ex1_1.cpp// 練習&#xff1a;使用二分查找&#xff0c;在一組有序元素中查找數據項 // 形參是數組&#xff0c;實參是數組名 #include <stdio.h> const int N5; int binarySearch(int x[], int n, int item…

關于瀏覽器內核

介紹一下對瀏覽器內核的理解主要分成兩個部分&#xff1a;渲染引擎(Render Engine)和JS引擎。常見的瀏覽器內核有哪些&#xff1f;Trident內核&#xff1a;IE&#xff0c;360&#xff0c;搜過瀏覽器&#xff1b;Gecko內核&#xff1a;Netscape6及以上版本&#xff0c;Presto內核…

docker 全部殺掉

殺死所有正在運行的容器 docker kill $(docker ps -a -q) 刪除所有已經停止的容器 docker rm $(docker ps -a -q) 刪除所有未打 dangling 標簽的鏡像 docker rmi $(docker images -q -f danglingtrue) 刪除所有鏡像 docker rmi $(docker images -q) 強制刪除鏡像名稱中包含“do…

實驗五 網絡編程與安全-----實驗報告

一、實驗五 網絡編程與安全-1 1.實驗要求&#xff1a; 兩人一組結對編程&#xff1a; &#xff08;1&#xff09;參考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA &#xff1b; &#xff08;2&#xff09;結對實現中綴表達式轉后綴表達式的功能 MyBC.java&#xff1b…

K8S的HelloWorld之旅

安裝kubectl。使用Google提供商&#xff08;如Google Container Engine或Amazon Web Services&#xff09;創建Kubernetes群集。本教程創建一個 外部負載均衡器&#xff0c;它需要一個云提供商。配置kubectl與Kubernetes API服務器通信。有關說明&#xff0c;請參閱云提供商的文…

思維構造——cf1090D

/* 只要找到兩個沒有關系的點即可 */ #include<bits/stdc.h> using namespace std; #define maxn 100005 long long n,m; int a[maxn],b[maxn]; vector<int>G[maxn]; int main(){cin>>n>>m;if(n1){puts("NO");return 0;}if(n*(n-1)/2<m)…