gpt4 book ai didi

java - VisualVM OQL : how to search for primitive float values rather than actual Float instances?

转载 作者:行者123 更新时间:2023-12-04 06:34:22 32 4
gpt4 key购买 nike

我想知道如何搜索与某个数字匹配的所有原始浮点值。

当做这样的事情时:

select n from java.lang.Float n where n.value == 1.00

仅找到 Float 类实例。我正在探索的应用程序使用不同的包装器,而不仅仅是使用原始浮点值作为我需要搜索的字段的 Float(例如 vector )。

我将如何做到这一点?

以下返回“未找到浮点数错误”:
select n from float n where n.value == 1.00

最佳答案

原始值仅作为其所属结构中的一个字段(或直接位于堆栈中)存在。因为它不是对象,所以不能被引用。尝试类似以下内容:

select v from Vector v where v.x == 1.0 || v.y == 1.0 || v.z == 1.0

如果要检查所有对象中的所有浮点字段,则 应该可以使用 OQL 的反射功能来做到这一点,使用类似以下内容:
select filter(heap.objects(), function(it) {
var cls = classof(it);
while (cls) {
for (var i = 0; i < cls.fields.length; i++) {
var field = cls.fields[i];
if (field.signature == 'F' && it[field.name] == 0.0)
return true;
}
cls = cls.superclass;
}
return false;
})

然而,虽然使用 jhat 可以正常工作,但它在我的 VisualVM 版本 (1.6.0_22) 中不起作用,因为 cls.fields 似乎不正确地返回静态字段列表而不是实例字段。

它也很慢,需要 10 秒来搜索 1MB 堆转储。可能可以通过仅搜索有限的一组类来优化代码并加快速度。

关于java - VisualVM OQL : how to search for primitive float values rather than actual Float instances?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5021988/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com