Java 8 Stream Performance Vs. المجموعات التقليدية
لقد غامرت مؤخرًا في Java 8 وأجريت اختبارًا غير رسمي لمقارنة أداء Stream API الخاص بها مع المجموعات الكلاسيكية. يتضمن الاختبار الخاص بك تصفية قائمة من الأعداد الصحيحة، واستخراج الجذر التربيعي للأعداد الزوجية، وتخزين النتائج في قائمة مزدوجة. ومع ذلك، فأنت تشكك في صحة الاختبار الخاص بك وتتوق إلى توضيح الآثار المترتبة على الأداء الحقيقي.
تقييم الاختبار المعياري
نتائجك الأولية، التي أشارت إلى التدفقات أن تكون أبطأ من عمليات التحصيل، أثارت المخاوف. لضمان تقييم أكثر موثوقية، من الضروري معالجة الأخطاء المحتملة وإجراء اختبار عادل. فيما يلي بعض الاعتبارات:
نتائج المقارنة المعيارية المناسبة
باتباع هذه التوصيات، دعنا نعيد النظر في تقييم الأداء باستخدام JMH واستراتيجيات قياس الأداء المحسنة:@OutputTimeUnit(TimeUnit.NANOSECONDS) @BenchmarkMode(Mode.AverageTime) @OperationsPerInvocation(StreamVsVanilla.N) الطبقة العامة StreamVsVanilla { int النهائي العام الثابت N = 10000؛ static List@OutputTimeUnit(TimeUnit.NANOSECONDS) @BenchmarkMode(Mode.AverageTime) @OperationsPerInvocation(StreamVsVanilla.N) public class StreamVsVanilla { public static final int N = 10000; static ListsourceList = new ArrayList(); static { for (int i = 0; i vanilla() { List result = new ArrayList(sourceList.size() / 2 1); for (Integer i : sourceList) { if (i % 2 == 0){ result.add(Math.sqrt(i)); } } return result; } @Benchmark public List stream() { return sourceList.stream() .filter(i -> i % 2 == 0) .map(Math::sqrt) .collect(Collectors.toCollection( () -> new ArrayList(sourceList.size() / 2 1))); } }
النتائج: عينات الوضع المعياري تعني متوسط وحدات الخطأ StreamVsVanilla.stream متوسط 10 17.588 0.230 ns/op StreamVsVanilla.vanilla avgt 10 10.796 0.063 ns/op
Benchmark Mode Samples Mean Mean error Units StreamVsVanilla.stream avgt 10 17.588 0.230 ns/op StreamVsVanilla.vanilla avgt 10 10.796 0.063 ns/op
خلافًا للنتائج الأولية، يُظهر معيار JMH بوضوح أن نهج التجميع التقليدي أسرع بكثير من نهج التدفق في هذا السيناريو بالذات.
الاستنتاج
بناءً على نتائج المقارنة المرجعية المحسنة، يمكننا أن نستنتج أن:
التدفقات ليست كذلك أبطأ بطبيعتها من المجموعات. ومع ذلك، يمكن أن تفوق النفقات العامة الفوائد في حالات استخدام معينة، مثل عمليات التصفية ورسم الخرائط البسيطة.توفر التدفقات مزايا كبيرة من حيث بساطة التعليمات البرمجية وقابلية الصيانة. إنها تعمل على تبسيط مسارات معالجة البيانات وتقليل التعليمات البرمجية النمطية.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3