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

JVM流API回滚

龚博涛
2023-03-14

当我们给流API一些输入时,它被分成块,JVM创建多个线程来执行块上的执行。

问题:-

如果我给了一百万个条目ArrayList作为并行管道的输入,在JVM内部线程对列表进行前半部分计算之后,就会发生异常

JVM将如何处理回滚。

JVM真的回滚到原始状态吗?

共有1个答案

苏君昊
2023-03-14

没有回滚这样的事情,在正常情况下,没有必要这样做。流操作从源读取数据并生成新结果。在异常的情况下,没有新的结果,并且在处理过程中创建的任何临时对象最终都将被垃圾回收。

在理想情况下,终端操作将等待所有子任务的完成,然后再将异常转发给调用方,但目前没有,请参见此Q

请注意,留档明确不鼓励使用具有有状态行为的函数,因为当使用并行流时,结果可能是不确定的或不正确的。即使没有例外,并行流也可以处理在执行短路操作时对最终结果没有贡献的元素。无论哪种情况,函数产生的副作用都不能回滚。

必须强调的是,这也适用于副作用的合法使用,即peekforEach,其行为在例外情况下不会撤销。如果出于预期目的使用peek,则这不是问题,因为报告元素已被处理仍然是正确的,即使结果由于后续异常而被删除。如果这是传递给forEach的操作的问题,因为您不希望在异常情况下发生这些操作,那么无法首先收集元素,例如,通过toArraycollect(toList()),并在流操作正常完成后对结果执行forEach

当然,如果操作只修改具有自己回滚机制对象的状态,例如将每个元素发送到数据库,则不需要这样做。

在某些情况下,流读取操作确实会修改源的状态,例如,从随机数生成器读取数字时,从缓冲读取器读取行时,或从扫描仪读取令牌时(Java 9)。在这些情况下,该操作还会对源产生无法撤消的影响。

如果是BufferedReader。行()扫描仪。tokens(),文档明确指出,即使在非例外情况下,读卡器/扫描仪在操作后仍处于未指定状态,随机数字生成器通常被视为生成不可预测的数字。因此,对于所有这些情况,没有回滚都不会导致问题。

 类似资料:
  • ipush 放到操作数栈 istore 到本地变量表 div 除 getstatic #2->常量池中的#2 找到函数 符号引用转为直接引用 接下来是invokevirtual 最后肯定有一个return 这个实例还没有涉及到堆空间,如果涉及到堆空间的话很复杂,涉及引用变量

  • aiohttp.web.Request.content和aiohttp.ClientResponse.content都使用流来接受数据,同时也是流形式的API属性。 class aiohttp.StreamReader    流内容读取器    除了已经存在的aiohttp.web.Request.content和aiohttp.ClientResponse.content用于读取原始内容的Str

  • 问题内容: 此处的典型示例是Twitter的API。我从概念上了解REST API的工作原理,从本质上讲,它只是针对您的特定请求的服务器查询,然后您会在其中收到响应(JSON,XML等),很棒。 但是我不确定在后台如何使用流API。我了解如何食用。例如,使用Twitter收听回复。从响应中侦听数据,并在其中分批发送推文。在字符串缓冲区中建立块,然后等待换行指示Tweet的结束。但是他们正在做些什么

  • 问题内容: 在Windows 2003上按计划任务运行的Java应用程序崩溃了,没有日志或任何有助于查明情况的信息。唯一可用的信息是该应用程序返回了代码143(8F)。该错误代码是从计划的任务日志中检索到的。 有谁知道该错误代码(143)代表什么?用户注销是否有可能导致应用程序终止? 谢谢, 问题答案: JVM错误代码143表示内部字段必须有效。这是在OTN讨论论坛上讨论的。但是,结论似乎是扼杀您

  • 主要内容:垃圾回收算法,1、垃圾回收器的分类,2、串行垃圾回收器,3、吞吐量优先,4、响应时间优先,5、G1(Garbage First,jdk9默认),6、Full GC垃圾回收算法 1.标记清除 2.标记复制 3.标记整理 内存效率:复制算法>标记清除算法>标记压缩算法(时间复杂度) 内存整齐度:复制算法=标记清除算法>标记压缩算法 内存利用率:复制算法<标记清除算法=标记压缩算法 年轻代: 存活率低 复制算法 老年代: 区域大,存活率高 标记清除(内存碎片不是太多)+标记压缩共同实现 1、

  • 主要内容:垃圾回收算法,1、垃圾回收器的分类,2、串行垃圾回收器,3、吞吐量优先,4、响应时间优先,5、G1(Garbage First,jdk9默认),6、Full GC垃圾回收算法 1.标记清除 2.标记复制 3.标记整理 内存效率:复制算法>标记清除算法>标记压缩算法(时间复杂度) 内存整齐度:复制算法=标记清除算法>标记压缩算法 内存利用率:复制算法<标记清除算法=标记压缩算法 年轻代: 存活率低 复制算法 老年代: 区域大,存活率高 标记清除(内存碎片不是太多)+标记压缩共同实现 1、