我有一个基本的SpringBoot 2.1.5.RELEASE应用程序。使用Spring Initializer,JPA,嵌入式Tomcat。
就Java垃圾收集而言,我猜该服务的选项B比选项A更好,因为对象没有保留在内存中,对吗?

选项A:

@Override
    public List<HotelPriceSummary> overRanked7d(User user) {

        List<HotelPriceSummary> overRanked7dList =

                allNonFavoritedHotels(user)
                        .parallelStream()
                        .filter(HotelPriceSummary.overRanked7dHotelsPredicate())
                        .sorted(comparing((HotelPriceSummary cps) -> cps.getDailyPercentageChange()).reversed())
                        .collect(toList());

        return overRanked7dList;
    }


选项B:

@Override
    public List<HotelPriceSummary> overRanked7d(User user) {

        return

                allNonFavoritedHotels(user)
                        .parallelStream()
                        .filter(HotelPriceSummary.overRanked7dHotelsPredicate())
                        .sorted(comparing((HotelPriceSummary cps) -> cps.getDailyPercentageChange()).reversed())
                        .collect(toList());


    }

最佳答案

从JVM实现的角度来看,唯一的区别是声明了对返回对象的新对象引用。因此,在任何情况下都不会创建新对象,也不会使用任何新内存。
从编码角度来看,选项B是首选。

07-28 12:16