小编Bry*_*n J的帖子

Java 8流对象占用大量内存

在查看一些分析结果时,我注意到在紧密循环中使用流(使用而不是另一个嵌套循环)会导致类型java.util.stream.ReferencePipeline和对象的大量内存开销java.util.ArrayList$ArrayListSpliterator.我将有问题的流转换为foreach循环,并且内存消耗显着下降.

我知道溪流没有做出比普通环更好的表现的承诺,但我的印象是差异可以忽略不计.在这种情况下,似乎增加了40%.

这是我编写的用于隔离问题的测试类.我使用JFR监视内存消耗和对象分配:

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Random;
import java.util.function.Predicate;

public class StreamMemoryTest {

    private static boolean blackHole = false;

    public static List<Integer> getRandListOfSize(int size) {
        ArrayList<Integer> randList = new ArrayList<>(size);
        Random rnGen = new Random();
        for (int i = 0; i < size; i++) {
            randList.add(rnGen.nextInt(100));
        }
        return randList;
    }

    public static boolean getIndexOfNothingManualImpl(List<Integer> nums, Predicate<Integer> predicate) {

        for (Integer num : nums) {
            // Impossible condition
            if (predicate.test(num)) {
                return true; …
Run Code Online (Sandbox Code Playgroud)

java memory java-8 java-stream

20
推荐指数
2
解决办法
7423
查看次数

标签 统计

java ×1

java-8 ×1

java-stream ×1

memory ×1