Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
87a46b4e
D
dragonwell8_hotspot
项目概览
openanolis
/
dragonwell8_hotspot
通知
2
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_hotspot
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
87a46b4e
编写于
7月 31, 2008
作者:
M
martin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6731726: jmap -permstat reports only 50-60% of permgen memory usage.
Reviewed-by: swamyv, martin Contributed-by: yamauchi@google.com
上级
274b6a88
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
35 addition
and
29 deletion
+35
-29
agent/src/share/classes/sun/jvm/hotspot/tools/PermStat.java
agent/src/share/classes/sun/jvm/hotspot/tools/PermStat.java
+35
-29
未找到文件。
agent/src/share/classes/sun/jvm/hotspot/tools/PermStat.java
浏览文件 @
87a46b4e
...
...
@@ -266,46 +266,52 @@ public class PermStat extends Tool {
out
.
println
();
}
private
static
long
objectSize
(
Oop
oop
)
{
return
oop
==
null
?
0L
:
oop
.
getObjectSize
();
}
// Don't count the shared empty arrays
private
static
long
arraySize
(
Array
arr
)
{
return
arr
.
getLength
()
!=
0L
?
arr
.
getObjectSize
()
:
0L
;
}
private
long
computeSize
(
InstanceKlass
k
)
{
long
size
=
0L
;
//
InstanceKlass object size
//
the InstanceKlass object itself
size
+=
k
.
getObjectSize
();
// add ConstantPool size
size
+=
k
.
getConstants
().
getObjectSize
();
// Constant pool
ConstantPool
cp
=
k
.
getConstants
();
size
+=
cp
.
getObjectSize
();
size
+=
objectSize
(
cp
.
getCache
());
size
+=
objectSize
(
cp
.
getTags
());
// add ConstantPoolCache, if any
ConstantPoolCache
cpCache
=
k
.
getConstants
().
getCache
();
if
(
cpCache
!=
null
)
{
size
+=
cpCache
.
getObjectSize
();
}
// add interfaces size
ObjArray
interfaces
=
k
.
getLocalInterfaces
();
size
+=
(
interfaces
.
getLength
()
!=
0L
)?
interfaces
.
getObjectSize
()
:
0L
;
ObjArray
transitiveInterfaces
=
k
.
getTransitiveInterfaces
();
size
+=
(
transitiveInterfaces
.
getLength
()
!=
0L
)?
transitiveInterfaces
.
getObjectSize
()
:
0L
;
// Interfaces
size
+=
arraySize
(
k
.
getLocalInterfaces
());
size
+=
arraySize
(
k
.
getTransitiveInterfaces
());
// add inner classes size
TypeArray
innerClasses
=
k
.
getInnerClasses
();
size
+=
innerClasses
.
getObjectSize
();
// Inner classes
size
+=
objectSize
(
k
.
getInnerClasses
());
//
add fields size
size
+=
k
.
getFields
().
getObjectSize
(
);
//
Fields
size
+=
objectSize
(
k
.
getFields
()
);
//
add methods size
//
Methods
ObjArray
methods
=
k
.
getMethods
();
size
+=
(
methods
.
getLength
()
!=
0L
)?
methods
.
getObjectSize
()
:
0L
;
TypeArray
methodOrdering
=
k
.
getMethodOrdering
();
size
+=
(
methodOrdering
.
getLength
()
!=
0L
)?
methodOrdering
.
getObjectSize
()
:
0
;
// add each method's size
int
numMethods
=
(
int
)
methods
.
getLength
();
for
(
int
i
=
0
;
i
<
numMethods
;
i
++)
{
Method
m
=
(
Method
)
methods
.
getObjAt
(
i
);
size
+=
m
.
getObjectSize
();
int
nmethods
=
(
int
)
methods
.
getLength
();
if
(
nmethods
!=
0L
)
{
size
+=
methods
.
getObjectSize
();
for
(
int
i
=
0
;
i
<
nmethods
;
++
i
)
{
Method
m
=
(
Method
)
methods
.
getObjAt
(
i
);
size
+=
m
.
getObjectSize
();
size
+=
objectSize
(
m
.
getConstMethod
());
}
}
// MethodOrdering - an int array that records the original
// ordering of methods in the class file
size
+=
arraySize
(
k
.
getMethodOrdering
());
return
size
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录