当前位置: 首页 > 知识库问答 >
问题:

处理processElement输出为fat时的内存不足异常

许自强
2023-03-14
PCollection<KV<String, String>> rows = someData
    .apply(Combine.<String, String>perKey(new CombineUserIds()));

public static class CombineUserIds implements SerializableFunction<Iterable<String>, String> {
  private static final long serialVersionUID = 0;

  @Override
  public String apply(Iterable<String> userIdList) {
    return Joiner.on(",").join(userIdList);
  }
}

共有1个答案

池砚文
2023-03-14

从Oracle文档,

线程thread_name:Java.lang.OutofMemoryError中的异常:Java堆空间

原因:详细消息Java堆空间指示无法在Java堆中分配对象。此错误并不一定意味着内存泄漏。问题可以简单到配置问题,即指定的堆大小(如果未指定,则为默认大小)不足以满足应用程序的需要。

解决方案1:增加JVM堆大小,如下所示。

您可以指定每个项目需要多少堆空间

以下是Eclipse的:

鼠标右键点击

Run As - Run Configuration - Arguments - Vm Arguments, 

然后加上这个

-Xmx1024 

-Xmx2048m

解决方案2(仅在尝试解决方案1之后):

同样来自Oracle文档,

3.4.3监视等待终结的对象当用“Java堆空间”>detail消息引发OutOfMemoryError异常时,原因可能是过度使用终结器。要对此进行诊断,您可以使用几个选项来监视等待完成的对象的数量:

JConsole管理工具可用于监视等待完成的对象的数量。此工具在摘要选项卡窗格的内存统计信息中报告挂起的终结计数。这个计数是近似的,但它可以用来描述应用程序的特征,并理解它是否非常依赖于最终确定。

在Oracle Solaris和Linux操作系统上,jmap实用程序可以与-finalizerinfo选项一起使用,以打印关于等待完成的对象的信息。

应用程序可以使用java.lang.Management.MemoryMXBean类的getObjectPendingFinalizationCount方法报告待完成对象的大致数量。到API文档和示例代码的链接可以在自定义诊断工具中找到。示例代码可以很容易地扩展,以包括挂起的终结计数的报告。

 类似资料:
  • 问题内容: 我正在尝试处理重量级元素(图像)的收集。集合的大小在8000-50000个条目之间变化。但是由于某种原因,在处理了1800-1900个条目之后,我的程序因java.lang.OutOfMemoryError:Java堆空间而掉线。 以我的理解,每次调用session.getTransaction()。commit()程序都应该释放堆内存,但是看起来它永远不会发生。我做错了什么?这是代码

  • 最近,在运行我们的应用程序时,我们遇到了内存溢出异常。 这是异常发生之前的堆转储 看起来老根差不多吃饱了(76%)。我假设当它最终达到100%时,OOM就会发生。然而,看起来eden只有13%。 有人能解释为什么即使年轻一代还有一些空间,OOM也会发生吗?

  • 我正在努力解决古老的字谜问题。多亏了许多教程,我能够迭代一组字符串,递归地找到所有的排列,然后将它们与英语单词列表进行比较。我发现的问题是,在大约三个单词之后(通常是关于“变形”之类的东西),我会得到一个OutOfMemory错误。我试着把我的批分成小的集合,因为它似乎是消耗我所有内存的递归部分。但即使只是“变形”也把它锁起来了... 编辑:根据出色的反馈,我已经将生成器从排列更改为工作查找: 它

  • 我用SXSSF写了100万条记录(最坏的情况)。 以下是我编码的方式。我必须将记录写入已经存在的excel模板。此模板在类路径中可用。我将此模板复制到公共位置。使用 XSSFWorkBook 加载此文件。SXSSFWorkbook 使用 XSSFWorkBook 和 window size(-1) 作为参数进行初始化。 当记录计数达到100的倍数时,我将冲洗工作表。 但是在执行这个过程中,堆内存逐

  • 我从记忆中得到消息。我是Android的初学者,我不知道原因。我如何解决这个问题?下面是日志: 1.424 4944-4944/com.bsp.AndroidTraining E/ART:抛出OutOfMemoryError“在OOM之前无法分配带有12个空闲字节和12B的162字节分配”(递归情况)06-10 02:03:51.454 494-4944/com.bsp.androidTraini

  • 问题内容: 我有一个1.2 GB的json文件,当反序列化时,应该给我一个包含15百万个对象的列表。 我要反序列化的计算机是具有16核心和32 GB Ram的Windows 2012服务器(64位)。 该应用程序已针对x64构建。 尽管有这种情况,当我尝试读取json文档并将其转换为我遇到内存不足异常的对象列表时。当我查看任务管理器时,我发现仅使用了5GB内存。 我尝试的代码如下。 一个。 b。