以后可能用到的一些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.mzph.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)…