OQL オブジェクト問い合わせ言語
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
*目次 [#ae388f58]
#contents
*OQLとは [#o645a4c8]
**簡単に言うと [#id1a71b2]
OQLは特定のクラスオブジェクト検索を行えるものです。
***もう少し細かくいうと [#h0f51ff3]
オブジェクト問い合わせ言語 (オブジェクトといあわせげんご...
※Wikiより
http://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%...
なお、このページでは扱うOQL (Object Query Language):は、J...
*目的 [#pa7d91f5]
メモリリーク解析のため、ヒープのスナップショットをとって...
見つけたいのは、循環参照しているインスタンスだ。
それを絞り込むのに、OQLってつかえるの?っておもって情...
*select文の文法 [#vc34f018]
OQLは、JavaScrip埋め込み型言語(JavaScript Expression ...
select <JavaScript expression to select>
[ from [instanceof] <class name> <identifier>
[ where <JavaScript boolean expression to filter> ]
*逆引き [#f521a7ba]
自分では、まだ、問い合わせ文をつくれないので、サイトに掲...
**注意点 [#k2cedc1f]
ただし、これらのクエリーは発展途上なので、安定してるとい...
たとえば、下記のサンプルで、
Fileオブジェクトの持っている path フィールドの中身の値を...
というのがありますが、実際に、jvisualvm.exeでやってみると、
|OK|select x from java.io.File x|
|OK|select x.path from java.io.File x|
|ERROR|select x.path.value from java.io.File x|
javax.script.ScriptException: sun.org.mozilla.javascript...
でした。
**新しいバージョンをつかいましょう [#qe5f0c04]
あたらしいプラグインをjvisualvmでとりこもうとしたら、
あなたのjvisualvmは古いので、このプラグインは取り込めませ...
たしかに、バージョンふるいかもしれない。Java7がでているの...
だから、あたらしい、バージョンのJavaをダウンロードしてき...
**100文字以上のString を保持しているオブジェクトを検索し...
SELECT s FROM java.lang.String s WHERE (s.count >= 100)
**文字列を正規表現で検索 [#jb8aba98]
select {instance: s, content: s.toString()} from java.la...
where /java/(s.toString())
**部分文字列で検索 [#t74a384e]
select toHtml(x)+" "+x.toString() from java.lang.String ...
x.toString().substring(0,5)=="<html"
**Fileオブジェクトの持っている path フィールドの中身の値...
select file.path.value.toString() from java.io.File file
**クラスローダの一覧を表示させたい [#v296c22a]
SELECT classof(cl).name FROM INSTANCEOF java.lang.Class...
**配列の要素数が256以上あるインスタンスを調べたい [#cee9f...
select a from int[] a where a.length >= 256
**継承したクラスの一覧を表示 [#xd652cd8]
例1
select classof(o).name from instanceof java.lang.ref.Ref...
例2
SELECT ac FROM INSTANCEOF android.app.Activity ac
例3
select heap.findClass("java.io.InputStream").subclasses()
**継承をしているクラスを列挙 [#ycbe3e00]
例
select heap.findClass("java.io.BufferedInputStream").sup...
**Returns whether two given Java objects are identical or...
select identical(heap.findClass("Foo").statics.bar, heap...
だれか訳して
**IDを表示 [#y7ddcc73]
select objectid(o) from java.lang.Object o
**IDでインスタンスを検索 [#edd08720]
0xd404b198 の場合
select o from instanceof 0xd404b198 o
または
select heap.findObject("0xd404b198")
**任意のクラスの任意のstaticメソッドを検索 [#j0e93bed]
例:"java.lang.System"でstaticsなpropsメソッドの場合
select heap.findClass("java.lang.System").statics.props
**任意のクラスの任意のメソッドを検索 [#a17a6696]
例:"java.lang.System"でpropsメソッドの場合
select heap.findClass("java.lang.System").props
**任意のクラスのフィールド数を取得 [#v845f6bb]
例:"java.lang.System"の場合
select heap.findClass("java.lang.String").fields.length
**到達可能なオブジェクトを列挙したい [#obff0cb1]
select reachables(p) from java.util.Properties p
**到達可能なオブジェクトを列挙するが、指定したメソッドか...
select reachables(u, 'java.net.URL.handler') from java.n...
**複数のフィールドを表示 [#fed317bd]
select { name: t.name? t.name.toString() : "null", threa...
from instanceof java.lang.Thread t
**参照数を表示したい [#j928fa82]
select count(referrers(o)) from java.lang.Object o
**参照しているオブジェクト一覧がほしい [#h7502111]
select referrers(f) from java.io.File f
**指定回数以上参照されている任意のオブジェクトを一覧をだ...
select u from java.net.URL u where count(referrers(u)) ...
**参照しているフィールド一覧を得る [#mbe6e2ad]
select referees(heap.findClass("java.io.File"))
**任意の名前のクラス一覧を正規表現で取得 [#odf722b9]
select filter(heap.classes(), "/java.net./(it.name)")
**指定したオブジェクトが使っているメモリを調べる [#v07de7...
select sizeof(o) from int[] o
**注意!時間がかかる:関連するオブジェクトのメモリを集計...
select rsizeof(o) from instanceof java.lang.HashMap o
**結果をHTMLフォーマットで返す [#x1317c2e]
select "<b>" + toHtml(o) + "</b>" from java.lang.Object o
**弱参照しているもの一覧 [#df606c95]
select f.referent from java.lang.ref.SoftReference f
where f.referent != null
**finalizableなオブジェクト一覧 [#febdc899]
select f.referent from java.lang.ref.Finalizer f
where f.referent != null
**Find all finalizable objects and approximate size of th...
訳すの疲れた
詳しくは、ここみて
https://blogs.oracle.com/sundararajan/entry/querying_java...
select { obj: f.referent, size: sum(map(reachables(f....
from java.lang.ref.Finalizer f
where f.referent != null
*集計関数を使った例 [#seea60a4]
countとか、maxとか
まとめるのめんどくさくなってきたので、
http://visualvm.java.net/oqlhelp.html
みてね。
*複雑な例 [#ob6ca7c8]
**クラスローダごとにヒストグラム出す [#e371e9e5]
select map(sort(map(heap.objects('java.lang.ClassLoader'...
'{ loader: it, count: it.classes.elementCount }'), 'lh...
'toHtml(it) + "<br>"')
**クラスローダごとに、循環参照しているものをだしたい! [#...
システムの変数を列挙します。
select map(filter(heap.findClass('java.lang.System').pro...
function (it) {
var res = it.key.toString() + ' = ' + it....
return res;
});
*副問い合わせ [#ldfa95c6]
**サブクエリー カラムの例 [#z4886264]
select role.name, (select u from User u where u = role.u...
**サブクエリー FROM句の例 [#z5b24df8]
SELECT t.name
FROM ( SELECT t FROM Tutors t WHERE t.salary > 300 ) r, ...
WHERE s.fee > 30
**サブクエリー WHERE句の例 [#h5553223]
SELECT p.name
FROM p in People
WHERE not ( p.name in SELECT t.name FROM t in TAs )
*比較演算 [#f7c4ba35]
http://www.topazproject.org/trac/wiki/Topaz/Manual/Sectio...
-lt()
less-than - arguments may be literals, URI's, or objects ...
-gt()
greater-than - arguments may be literals, URI's, or objec...
-le()
less-or-equal-than - arguments may be literals, URI's, or...
-ge()
greater-or-equal-than - arguments may be literals, URI's,...
The where clause is optional; if left out no further cont...
*長文例 [#nedbc942]
こんな書き方ができるんやね。ってことでまとめてみる
**java heap analysis with oql: Count unique strings [#p26...
http://stackoverflow.com/questions/8242205/java-heap-anal...
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...
}
return { string:heapString.toString(), count:coun...
}),
'lhs.count < rhs.count'),
function(countObject) {
if( ! alreadyReturned[countObject.string]){
alreadyReturned[countObject.string] = true;
return true;
} else {
return false;
}
}
);
** select sum(heap.objects("sun.util.calendar.ZoneInfo"),...
select
map(heap.objects("java.lang.String"),
function tally(obj) {
if(typeof tally.total == 'undefined') {
tally.total = 0;
tally.count = 0;
}
tally.total += sum(map(reachables(obj), "sizeof(it...
tally.count++;
return tally.total/tally.count;
}
);
*リンク [#e1be54b0]
**IBM Netcool/Precision IP向けのOQL [#kbcdfaad]
http://publib.boulder.ibm.com/infocenter/tivihelp/v8r1/in...
**メモリリークを発見!Androidアプリのメモリ解析手法 その...
http://andbrowser.com/development/knowhow/289/eclipse-and...
**memory leak in our Tomcat container [#x44ebb02]
http://stackoverflow.com/questions/2692745/oql-query-to-f...
**GQL リファレンス [#rabc9b3f]
https://blogs.oracle.com/poonam/resource/OQL.htm
**JAVAのAPI DOC org.eclipse.mat.snapshot.OQL [#z5d5891a]
http://help.eclipse.org/juno/ntopic/org.eclipse.mat.ui.he...
*JAVAツールのjavascriptのデバックについて [#t582f68b]
https://blogs.oracle.com/sundararajan/entry/javascript_de...
終了行:
*目次 [#ae388f58]
#contents
*OQLとは [#o645a4c8]
**簡単に言うと [#id1a71b2]
OQLは特定のクラスオブジェクト検索を行えるものです。
***もう少し細かくいうと [#h0f51ff3]
オブジェクト問い合わせ言語 (オブジェクトといあわせげんご...
※Wikiより
http://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%...
なお、このページでは扱うOQL (Object Query Language):は、J...
*目的 [#pa7d91f5]
メモリリーク解析のため、ヒープのスナップショットをとって...
見つけたいのは、循環参照しているインスタンスだ。
それを絞り込むのに、OQLってつかえるの?っておもって情...
*select文の文法 [#vc34f018]
OQLは、JavaScrip埋め込み型言語(JavaScript Expression ...
select <JavaScript expression to select>
[ from [instanceof] <class name> <identifier>
[ where <JavaScript boolean expression to filter> ]
*逆引き [#f521a7ba]
自分では、まだ、問い合わせ文をつくれないので、サイトに掲...
**注意点 [#k2cedc1f]
ただし、これらのクエリーは発展途上なので、安定してるとい...
たとえば、下記のサンプルで、
Fileオブジェクトの持っている path フィールドの中身の値を...
というのがありますが、実際に、jvisualvm.exeでやってみると、
|OK|select x from java.io.File x|
|OK|select x.path from java.io.File x|
|ERROR|select x.path.value from java.io.File x|
javax.script.ScriptException: sun.org.mozilla.javascript...
でした。
**新しいバージョンをつかいましょう [#qe5f0c04]
あたらしいプラグインをjvisualvmでとりこもうとしたら、
あなたのjvisualvmは古いので、このプラグインは取り込めませ...
たしかに、バージョンふるいかもしれない。Java7がでているの...
だから、あたらしい、バージョンのJavaをダウンロードしてき...
**100文字以上のString を保持しているオブジェクトを検索し...
SELECT s FROM java.lang.String s WHERE (s.count >= 100)
**文字列を正規表現で検索 [#jb8aba98]
select {instance: s, content: s.toString()} from java.la...
where /java/(s.toString())
**部分文字列で検索 [#t74a384e]
select toHtml(x)+" "+x.toString() from java.lang.String ...
x.toString().substring(0,5)=="<html"
**Fileオブジェクトの持っている path フィールドの中身の値...
select file.path.value.toString() from java.io.File file
**クラスローダの一覧を表示させたい [#v296c22a]
SELECT classof(cl).name FROM INSTANCEOF java.lang.Class...
**配列の要素数が256以上あるインスタンスを調べたい [#cee9f...
select a from int[] a where a.length >= 256
**継承したクラスの一覧を表示 [#xd652cd8]
例1
select classof(o).name from instanceof java.lang.ref.Ref...
例2
SELECT ac FROM INSTANCEOF android.app.Activity ac
例3
select heap.findClass("java.io.InputStream").subclasses()
**継承をしているクラスを列挙 [#ycbe3e00]
例
select heap.findClass("java.io.BufferedInputStream").sup...
**Returns whether two given Java objects are identical or...
select identical(heap.findClass("Foo").statics.bar, heap...
だれか訳して
**IDを表示 [#y7ddcc73]
select objectid(o) from java.lang.Object o
**IDでインスタンスを検索 [#edd08720]
0xd404b198 の場合
select o from instanceof 0xd404b198 o
または
select heap.findObject("0xd404b198")
**任意のクラスの任意のstaticメソッドを検索 [#j0e93bed]
例:"java.lang.System"でstaticsなpropsメソッドの場合
select heap.findClass("java.lang.System").statics.props
**任意のクラスの任意のメソッドを検索 [#a17a6696]
例:"java.lang.System"でpropsメソッドの場合
select heap.findClass("java.lang.System").props
**任意のクラスのフィールド数を取得 [#v845f6bb]
例:"java.lang.System"の場合
select heap.findClass("java.lang.String").fields.length
**到達可能なオブジェクトを列挙したい [#obff0cb1]
select reachables(p) from java.util.Properties p
**到達可能なオブジェクトを列挙するが、指定したメソッドか...
select reachables(u, 'java.net.URL.handler') from java.n...
**複数のフィールドを表示 [#fed317bd]
select { name: t.name? t.name.toString() : "null", threa...
from instanceof java.lang.Thread t
**参照数を表示したい [#j928fa82]
select count(referrers(o)) from java.lang.Object o
**参照しているオブジェクト一覧がほしい [#h7502111]
select referrers(f) from java.io.File f
**指定回数以上参照されている任意のオブジェクトを一覧をだ...
select u from java.net.URL u where count(referrers(u)) ...
**参照しているフィールド一覧を得る [#mbe6e2ad]
select referees(heap.findClass("java.io.File"))
**任意の名前のクラス一覧を正規表現で取得 [#odf722b9]
select filter(heap.classes(), "/java.net./(it.name)")
**指定したオブジェクトが使っているメモリを調べる [#v07de7...
select sizeof(o) from int[] o
**注意!時間がかかる:関連するオブジェクトのメモリを集計...
select rsizeof(o) from instanceof java.lang.HashMap o
**結果をHTMLフォーマットで返す [#x1317c2e]
select "<b>" + toHtml(o) + "</b>" from java.lang.Object o
**弱参照しているもの一覧 [#df606c95]
select f.referent from java.lang.ref.SoftReference f
where f.referent != null
**finalizableなオブジェクト一覧 [#febdc899]
select f.referent from java.lang.ref.Finalizer f
where f.referent != null
**Find all finalizable objects and approximate size of th...
訳すの疲れた
詳しくは、ここみて
https://blogs.oracle.com/sundararajan/entry/querying_java...
select { obj: f.referent, size: sum(map(reachables(f....
from java.lang.ref.Finalizer f
where f.referent != null
*集計関数を使った例 [#seea60a4]
countとか、maxとか
まとめるのめんどくさくなってきたので、
http://visualvm.java.net/oqlhelp.html
みてね。
*複雑な例 [#ob6ca7c8]
**クラスローダごとにヒストグラム出す [#e371e9e5]
select map(sort(map(heap.objects('java.lang.ClassLoader'...
'{ loader: it, count: it.classes.elementCount }'), 'lh...
'toHtml(it) + "<br>"')
**クラスローダごとに、循環参照しているものをだしたい! [#...
システムの変数を列挙します。
select map(filter(heap.findClass('java.lang.System').pro...
function (it) {
var res = it.key.toString() + ' = ' + it....
return res;
});
*副問い合わせ [#ldfa95c6]
**サブクエリー カラムの例 [#z4886264]
select role.name, (select u from User u where u = role.u...
**サブクエリー FROM句の例 [#z5b24df8]
SELECT t.name
FROM ( SELECT t FROM Tutors t WHERE t.salary > 300 ) r, ...
WHERE s.fee > 30
**サブクエリー WHERE句の例 [#h5553223]
SELECT p.name
FROM p in People
WHERE not ( p.name in SELECT t.name FROM t in TAs )
*比較演算 [#f7c4ba35]
http://www.topazproject.org/trac/wiki/Topaz/Manual/Sectio...
-lt()
less-than - arguments may be literals, URI's, or objects ...
-gt()
greater-than - arguments may be literals, URI's, or objec...
-le()
less-or-equal-than - arguments may be literals, URI's, or...
-ge()
greater-or-equal-than - arguments may be literals, URI's,...
The where clause is optional; if left out no further cont...
*長文例 [#nedbc942]
こんな書き方ができるんやね。ってことでまとめてみる
**java heap analysis with oql: Count unique strings [#p26...
http://stackoverflow.com/questions/8242205/java-heap-anal...
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...
}
return { string:heapString.toString(), count:coun...
}),
'lhs.count < rhs.count'),
function(countObject) {
if( ! alreadyReturned[countObject.string]){
alreadyReturned[countObject.string] = true;
return true;
} else {
return false;
}
}
);
** select sum(heap.objects("sun.util.calendar.ZoneInfo"),...
select
map(heap.objects("java.lang.String"),
function tally(obj) {
if(typeof tally.total == 'undefined') {
tally.total = 0;
tally.count = 0;
}
tally.total += sum(map(reachables(obj), "sizeof(it...
tally.count++;
return tally.total/tally.count;
}
);
*リンク [#e1be54b0]
**IBM Netcool/Precision IP向けのOQL [#kbcdfaad]
http://publib.boulder.ibm.com/infocenter/tivihelp/v8r1/in...
**メモリリークを発見!Androidアプリのメモリ解析手法 その...
http://andbrowser.com/development/knowhow/289/eclipse-and...
**memory leak in our Tomcat container [#x44ebb02]
http://stackoverflow.com/questions/2692745/oql-query-to-f...
**GQL リファレンス [#rabc9b3f]
https://blogs.oracle.com/poonam/resource/OQL.htm
**JAVAのAPI DOC org.eclipse.mat.snapshot.OQL [#z5d5891a]
http://help.eclipse.org/juno/ntopic/org.eclipse.mat.ui.he...
*JAVAツールのjavascriptのデバックについて [#t582f68b]
https://blogs.oracle.com/sundararajan/entry/javascript_de...
ページ名: