2016-04-12 46 views
-1

Java 8'deki lameller, sorunu bir deyim olarak tanımlamanın ve kodun kısa ve öz bir şekilde saklanmasının mükemmel bir yoludur. Fakat JVM'de hangi ifadelerin yürütüldüğünü değiştiriyorlar mı?Java 8 dağıtımı içinde lamdada yürütme

Nesnelerin listesini yayınlayan ve filtrelenen değerleri aynı veri türünün bir listesi olarak döndüren bir lambda yazıyorum düşünelim. Benim lambda temelde bir filtre ve bir toplayıcı olurdu. VM'ye bu kod parçası gönderildiğinde, derleyici döngüler ve döngüler için geleneksel olarak lambda işlevlerini değiştirir mi?

Bunu soruyorum çünkü Sanal Makine hala aynıdır ve başlangıçta zorunlu programlama stili için tasarlanmıştır. Java 8'de gerçekten değişenler, bir problem bildirimini tanımladığımız yol (FP) idi. Anlayışım doğru mu?

+3

http://stackoverflow.com/questions/16827262/how-will-java-lambda-functions-be-compiled –

+4

Akış boru hatları ile lambdaların kafa karıştırıcı gibi görünmektedir. –

+0

http://stackoverflow.com/a/15241404/2711488 – Holger

cevap

2

Derleyici, lambda işlevlerini "değiştirmez". Lambdalar, normal Java kodları olarak çalışan normal Java kitaplıklarına geçen normal arabirimlerin örnekleri haline gelir.

JIT'ler, lambda çağrılarını satır içi ve basitleştirme yeteneği konusunda daha akıllı olmak için bir şekilde optimize edilmiştir, ancak orada bir sihir yoktur.

+0

JIT, lambdas hakkında bir şey bildiğinden şüpheliyim. Diğer herhangi bir kod gibi yöntemlerden ve sınıflardan oluştuğu için, JIT, söz konusu kodun bir lambda ifadesinden kaynaklanıp kaynaklanmadığına bakılmaksızın, bilinen kalıpları tanımaya çalışacaktır. Sadece lambda ifadelerinin koduna potansiyel bir optimizasyon uygulamak, gereksiz bir kısıtlama olacaktır. – Holger