[英]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.