繁体   English   中英

Hadoop Text数据类型是可变的还是不可变的?

[英]Is Hadoop Text datatype mutable or immutable?

在mapreduce程序之一中,我在context.write期间使用了new Text()

context.write(key, new Text(outputRecord.toDelimitedString("|")));

当我使用上面的语句时,我想知道如何存储Text对象以及如何处理内存管理。 还想知道在没有被任何对象引用之后存在对象值。

请让我知道这件事。

Hadoop中没有Text不是不可变的。 它不可能,因为Hadoop的序列化过程隐含地禁止不变性。

在这种特殊情况下, context.write只是将Text的内容序列化为调用内部的字节缓冲区,因此Text对象将在方法返回后很快被删除。

请记住, Text对象在传递给方法时仍然存在堆栈引用,因此它不符合垃圾回收的条件。

如果您选中了Hadoop Text源代码,那么您的所有问题都将得到解答。

此类使用标准UTF8编码存储文本。 它提供了在字节级序列化,反序列化和比较文本的方法。 长度类型为整数,并使用零压缩格式进行序列化。

此外,它提供了字符串遍历的方法,而无需将字节数组转换为字符串。

还包括用于序列化/解析字符串,编码/解码字符串,检查字节数组是否包含有效UTF8代码,计算编码字符串长度的实用程序。

从源代码中可以看出,该类不是不可变的。

关于你的问题:

还想知道在没有被任何对象引用之后存在对象值

您需要阅读有关JVM内存模型的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM