问题标签 [javolution]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
975 浏览

java - 需要一个在添加和删除时不会产生任何垃圾的高效 Map 或 Set

因此,由于 Javolution 不起作用(请参见此处),我非常需要一个高效且在简单使用下不会产生垃圾的 Java Map 实现。java.util.Map添加和删​​除键时会产生垃圾。我检查了 Trove 和 Guava,但看起来他们没有 Set<E> 实现。我在哪里可以找到一个简单而有效的替代方案java.util.Map

编辑 EJP:

条目对象在添加条目时分配,在删除条目时释放给 GC。:(

0 投票
2 回答
989 浏览

java - Java:将文本解析为原始数字而无需对象实例化

使用 java 语言,我阅读了包含数字的文本文件。有 TB 的数据和数千亿的数字。

目标是尽可能快地获取数据,并尽量减少 GC 活动。我想将文本直接解析为基元(double、float、int)。

直接我的意思是:

  • 无需实例化任何瞬态辅助对象
  • 在 java.lang.Double、java.lang.Float 中没有装箱数据...
  • 无需创建瞬态 java.lang.String 实例(如果要调用 JDK Double.parseDouble(...),这是一个强制性步骤)

到目前为止,我一直在使用 javolution 框架:

我查看了 javolution 代码,它确实没有分配任何瞬态对象。并且因为它接受一个 CharSequence,您可以呈现从数据文件中解码的字符,而无需实例化瞬态字符串。

有替代方案或更好的方法吗?

0 投票
1 回答
896 浏览

java - 查找第三方库抛出的异常

我希望我能正确解释这一点。我正在使用 Javolution 库来读取和写入 XML 配置文件。我正在使用 XMLStreamReader/Writer。在阅读过程中,我希望读取标签并将其属性存储在 LinkedHashMap 中。但是,我抛出了一个异常,这对我来说似乎没有任何意义,因为它什么时候被抛出以及代码中当前正在发生什么。

使用 Eclipse 调试器,将属性的键和值添加到我的地图时会引发异常。

在添加键和值之后,this立即捕获来自 Javolution 的异常:

两者都不keyvalue空。当它们被添加到地图时,我无法进一步进入代码以查看异常被抛出的位置,没有堆栈跟踪,没有任何文件/行号显示在任何地方以解释异常的位置或什至是如何抛出的。

从对 Javolution 旧实现的快速谷歌搜索中,我可以看到这个特殊的异常仅使用 XMLStreamWriterImpl 类型的几个方法引发。我在每次使用这些方法时都设置了断点,但是调试器直到在代码中很晚才发现它们被使用(并且我的 localName 变量在声明时被初始化)。

有人对我如何确定为什么抛出此异常有任何建议吗?

堆栈跟踪:

0 投票
1 回答
476 浏览

java - 使用 BTrace 查找第一次创建类的时间

我正在尝试使用 BTrace 来查找何时在我的程序中首次实例化某种类型(Eclipse 调试器无法找到它),因为我看到了一些奇怪的行为(Javolution XMLStreamWriterImpl 之前以某种方式向我的 XML 添加元素它甚至应该已经创建)。

无论如何,我有以下通过 JVisualVM 使用的方法,但运行时没有显示任何内容。

0 投票
3 回答
676 浏览

memory-leaks - Java OutOfMemoryError 使用 Javolution 结构

我正在使用 Javolution Struct 来表示 Java 中的 C 结构。

但是,每次我创建一个新项目时,它都会在进程的本机部分分配,并增加内存使用量。

最终,该进程达到 4GB 内存,尽管 Java 堆大小仍然很小。然后该进程被操作系统杀死(我被迫使用 32 位 java)。

这是一个小班演示这个问题:

这是此过程的“顶部”。如您所见,内存增长非常迅速:

886 根 20 0 1617m 447m 5536 S 26.8 1.2 0:00.83 java -cp 。结构测试
886 根 20 0 1917m 761m 5536 S 28.2 2.1 0:01.12 java -cp。结构测试 886 根 20 0 2116m
990m 5540 S 359.9 2.7 0:04.80 java -cp。结构测试 886 根 20 0 2120m
1.0g 5580 S 115.3 2.8 0:06.00 java -cp。结构测试 886 根 20 0 2302m
1.2g 5580 S 23.5 3.3 0:06.24 java -cp。结构测试 886 根 20 0 2568m
1.4g 5580 S 180.3 4.1 0:08.08 java -cp。结构测试 886 根 20 0 2817m
1.7g 5580 S 95.5 4.8 0:09.09 java -cp。结构测试 886 根 20 0 3114m
2.0g 5580 S 26.4 5.6 0:09.36 java -cp。结构测试
886 根 20 0 3406m 2.3g 5580 S 30.2 6.4 0:09.67 java -cp。结构测试 886 根 20 0 3699m
2.6g 5580 S 25.5 7.3 0:09.93 java -cp。
结构测试886 根 20 0 3994m 2.9g 5580 S 27.4 8.1 0:10.21 java -cp。结构测试

我可以尝试重用该结构,而不是重新创建它,但我需要多个线程中的许多项目。

有没有一种简单的方法来指示进程释放我不再需要的结构的内存?

编辑:在 RedHat Linux 上测试(主要是 6.2,但也发生在 5.6 上)。2.6.32-220.el6.x86_64 Red Hat Enterprise Linux Server 版本 6.2 (Santiago) 适用于 Java 1.6.0_03 (1.6.0_03-b05) 和 64 位版本的 1.6.0_30。

谢谢,艾尔

0 投票
0 回答
1223 浏览

java - 如何在 Java 类中声明 C 嵌套结构

我正在尝试将 ac 结构映射到 Java 类。到目前为止一切正常,但我不知道如何映射具有另一个结构作为成员的结构。

在 Struct 类 javadoc 中有一个包含指向同一结构的指针的结构示例(使用类 Reference32),但这不是我需要的。

我找不到有关如何实现此目的的更多文档。

这是一个简化的例子:


变量“_otherStruct”永远不会在 Java 中填充。我尝试将 java 变量定义为 Composite 类而不是 Reference32,但它没有成功。

这样做的正确方法是什么?

先感谢您

更新

正如主要开发人员 Jean-Marie Dautelle 向我指出的那样,这是通过使用内部方法完全支持的:

这完美地工作

0 投票
1 回答
702 浏览

loops - 如何迭代 Javolution FastMap

从 2 月开始使用 Javolution 6.0.0 快照。

据此,我们可以迭代 FastMap,但我不断收到 java.lang.UnsupportedOperationException

http://javolution.org/target/site/apidocs/javolution/util/FastMap.html

我的代码

更多来自链接中解释的示例...... map.head 和 map.tail 甚至不存在。

那么我们该怎么做呢?

0 投票
2 回答
1790 浏览

java - Java读取二进制结构

我需要读取包含此结构的二进制文件:

有没有一种优雅的方式来做到这一点?我以这种方式尝试了 javolution lib:

前 2 个值(魔法值和版本)是正确的,但对于第三个值,我已经得到 0,这是错误的。

使用十六进制编辑器打开的文件(第一个字节,不是整个文件):

这是十六进制编辑器的输出:

我必须承认我真的不知道如何阅读这个。前 16 个字节是后面跟着“00”的字符串。然后是版本“02”-在这里我不知道 uint 需要多少字节

有什么建议么?

0 投票
0 回答
440 浏览

java - Javolution 字符串 UDP

我是 Javolution 和 C/C++ 的新手。但到目前为止我真的很喜欢它,而且我认为让代码更干净。

我一直在玩 UDP 示例,可以在这里找到 http://javolution.org/target/site/apidocs/javolution/io/Struct.html

它运行良好,除非我使用 UTF8String。这正常吗。

所以我有一个这样的结构

然后我有另一个类通过 udp 发送结构

现在在连接的另一端,我有以下内容

现在这不起作用,但我删除名称并只保留年龄然后我可以检索年龄的值?

是否可以通过网络通过 Struct 发送字符串?

谢谢你,安东尼

0 投票
0 回答
73 浏览

xml - javolution xml修改

我试图修改创建的 xml 文件中的属性值。我必须使用 javolution api 来管理 XML 文件。

我使用 XMLStreamWriter 创建了一个 XML 文件,我在工具执行开始时添加了几个组件,但我想在之后修改一些值。我怎样才能达到这些属性以进行修改?

例如,我在执行开始时创建 EXECUTION_START 和 EXECUTION_STOP 属性。但我必须在最后更新 EXECUTION_STOP 值。

你有什么想法吗?还是我必须关闭流并重新打开它?以及应该使用什么来打开 XML 文件,以更改内容。

Tks