java—hadoop文本数据类型是可变的还是不可变的?

yhqotfr8  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(430)

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

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

在使用上述语句时,我想知道如何存储文本对象以及如何处理内存管理。还想知道一个对象存在一个值后不被任何对象引用。
请告诉我这件事。

fjnneemd

fjnneemd1#

Text 在hadoop中不是一成不变的。这不可能,因为hadoop的序列化过程隐含地禁止了不变性。
在这种情况下, context.write 只会序列化 Text 直接在调用中放入字节缓冲区,因此 Text 对象将在方法返回后很快被丢弃。
请记住,仍然有一个堆栈引用指向 Text 对象,因此它将不符合垃圾收集的条件。

uajslkp6

uajslkp62#

如果您检查了hadoop文本源代码,您的所有问题都将得到回答。
此类使用标准utf8编码存储文本。它提供了在字节级序列化、反序列化和比较文本的方法。长度类型为整数,并使用零压缩格式序列化。
此外,它还提供了字符串遍历方法,而无需将字节数组转换为字符串。
还包括用于序列化/反序列化字符串、编码/解码字符串、检查字节数组是否包含有效的utf8代码、计算编码字符串长度的实用程序。
从源代码中可以看出,类不是不可变的。
关于你的问题:
还想知道一个对象存在一个值后不被任何对象引用
您需要了解jvm内存模型。

相关问题