在mapreduce程序之一中,我在context.write期间使用new Text()
。
context.write(key, new Text(outputRecord.toDelimitedString("|")));
当我使用上述语句时,我想知道如何存储Text对象以及如何处理内存管理。还想知道在没有被任何对象引用之后存在对象值。
请让我知道这件事。
答案 0 :(得分:1)
Hadoop中的Text
不是不可变的。它不可能,因为Hadoop的序列化过程隐含地禁止不变性。
在这种特殊情况下,context.write
只是将Text
的内容序列化到调用内部的字节缓冲区中,因此Text
对象将在方法返回后很快被删除。
请记住,Text
对象在传递给方法时仍然存在堆栈引用,因此它不符合垃圾回收条件。
答案 1 :(得分:0)
如果您选中Hadoop Text源代码,则会回答您的所有问题。
此类使用标准UTF8编码存储文本。它提供了在字节级序列化,反序列化和比较文本的方法。长度类型为整数,并使用零压缩格式进行序列化。
此外,它还提供了字符串遍历的方法,而无需将字节数组转换为字符串。
还包括用于序列化/解析字符串,编码/解码字符串,检查字节数组是否包含有效UTF8代码,计算编码字符串长度的实用程序。
从源代码中可以看出,这个类是不可变的。
关于你的问题:
还想知道在没有被任何对象引用之后存在对象值
您需要了解JVM内存模型。