Tag: 工具

计算Java对象的字节大小

我正在计算java对象[hashmap]的大小[使用的内存]。 它包含[在运行时]不同数据类型的元素,因此[no-of-elem * size-of-element]不是一个好方法。 现在的代码是通过一系列的 if (x) do something else if (primitives) lookup size and calculate 然而,这个过程是CPU占用并且效率低下。 我正在考虑采用以下两种方法: 将对象序列化为缓冲区并获取大小。 查看java.lang.instrument以获取大小 我正在寻找任何人使用这些方法的性能,效率,缩放等经验,或者如果你知道更好的方法。 PS:这是我正在构建的后台实用程序,因此大小不需要超级准确,尽管它应该是正确的。 所以我愿意交换准确性来表现 我对深度大小不感兴趣[不会计算此对象引用的对象的大小。] 我正在寻找性能比较和理解getObjectSize()如何在内部工作..所以我不会搞砸别的东西来提高性能 谢谢

检查数字是否是Java中的整数

是否有任何方法或快速方法来检查数字是否是Java中的整数(属于Z字段)? 我想可能会从四舍五入的数字中减去它,但我没有找到任何可以帮助我的方法。 我应该在哪里检查? 整数Api?

java.lang.Number不实现“+”或任何其他运算符?

我正在创建一个类,它应该能够与任何类型的数组(float,int等)一起使用,所以这里有一个方法: // T extends Number public synchronized T[] average() { Number[] ret = new Number[queue[0].length]; for (int i = 0; i < ret.length; ++i) { for (int j = 0; j < size; ++j) { ret[i] += queue[j][i]; // WTF ERROR?! } ret[i] /= size; // WTF ERROR?! } return (T[])ret; } 除非这不会编译,因为“Number”没有实现“+ =”或“/ =”运算符。 […]

插入Java编译器

我有一个后编译步骤来操作生成的类的Java字节码。 我想让图书馆消费者尽可能轻松地生活,所以我正在研究如何使这个过程自动化,并且(如果可能的话)编译器不可知。 Annotation Processing API提供了许多所需的function(自动服务发现; Eclipse支持)。 不幸的是,这是针对代码生成器, 并不支持操作现有的文物 : 该工具的初始输入被认为是由第0轮创建的; 因此,尝试创建与其中一个输入相对应的源文件或类文件将导致FilerException。 API推荐的Decorator模式不是一个选项。 我可以看到如何使用运行时代理/检测执行该步骤,但这是一个比手动构建步骤更糟糕的选择,因为它需要任何人甚至可以通过API外围触摸来以非显而易见的方式配置其JVM。 有没有办法插入或包装javac调用的编译器工具 ? 有没有人成功地颠覆了注释处理器来操纵字节码,无论文档说什么?