it-swarm.dev

İnsanlar neden hala Java yavaş) diyor?

SO ve diğer yerlerde Java uzun bir süre yavaş olma üne sahiptir. Sorular ve cevaplarda şakalar - birçok yorum arasında insanlar hala Java 'ın sadece 90'lı yıllardaki deneyime dayanarak yavaş olduğuna inanıyor.

Bu benim sorunum: İnsanların Java yavaş olduğuna inandıkları nedenlerin onaylanmadı (çoğu) var. Küçük şeylerin dışında, Java oldukça hızlı.

Peki neden insanlar hala Java hızlı olduğuna inanmayı reddediyorlar? C/C++ olmayan bir şeyin yavaş olması zihniyetinin bir parçası mı? İnsanlar zaman içinde kontrol etmedikleri için mi? İnsanlar sadece önyargılı oldukları için mi?

61
TheLQ

Bu uygulamalar. Belirttiğiniz gibi, var defalarca, kanıtlanmış senaryolarda Java kodunun performansını karşılayabilir veya hatta beat C, C++, LISP, VB6 veya JavaScript gibi "performans" dilleri ve böyle bir kanıtla sunulduğunda, aklı başında, açık fikirli rakiplerin çoğu utanç içinde asılı kalacak ve bir daha asla böyle bir iftira yaymaya söz verecek.

... ancak daha sonra Eclipse veya NetBeans veya Guiffy'yi çalıştırırlar veya Java desteklerini tarayıcılarında etkinleştirir veya favori özellik telefonlarında bir uygulama çalıştırmaya çalışırlar.) duyarlı olması için ...

...ve bekle...

...ve bekle...



...ve bekle...







...ve bekle...











...ve...




... bir daha asla yapmayacağına söz verdim mi? Üzgünüm, dolanmış olmalı ...

131
Shog9

Bu soru yanlış tesislerde çalışır: önemli olduğu yerde, Java hala yavaştır. Önemli olduğu yerlerde büyük veri kümelerinde hesaplama ağırlıklı algoritmalardır. Bu can optimize edilebilir, bazen C/C++ kodu ile eşit olabilir, ancak sadece modülerlik ve jeneriklik pahasına. Verimli C++ kodu genel amaçlı bir kütüphane olarak genel ve kullanılabilir olacak şekilde tasarlanabilir. Java kodu yapamıyor. Tüm temel türler için farklı uygulamalar kullanan ve nesne varyantı hala çok C++ 'jenerik sort' den daha yavaş olan çok optimize edilmiş Array.sort Yöntemine bakın. nesneleri eşitlik karşılaştırmaları dinamik olarak göndermelidir.

HotSpot motoru tarafından yapılan tam zamanında optimizasyonlar, bu sanal çağrıların hedefini tahmin edebilir ve satır içi çalışmayı deneyebilir. Ancak bu, C++ ’sort yönteminde gönderilen doğrudan satır içi çağrıdan hala daha yavaştır.

Eski bir meslektaşım, şablonlanmış bir C++ uygulaması ve bir nesne yönelimli Java uygulaması ile büyük veri kümelerinde (q - dinamik şekiller kullanarak gram sayma) bir sorunun karşılaştırmalı karşılaştırmasını yaptı. Java kodu, C++ kodundan daha yavaş büyüklük sıralarıydı.

Tabii ki bu elma ile portakalları karşılaştırıyor. Ancak asıl nokta, Java uygulamasının mümkün olan en iyi uygulama olması (bir kitaplık için gereken modülerlik derecesi göz önüne alındığında performans açısından) ve C++ uygulamasıdır.

Ne yazık ki, karşılaştırma verileri serbestçe mevcut değildir, ancak diğerleri çalışma zamanı soyutlamasının ek yükünü karşılaştırırken benzer sayılar bulmuştur. Örneğin, Scott Meyers --- C'nın genel qsort fonksiyonunun yükü hakkında Etkili STL yazıyor:

C++ ’ın sıralaması, hız konusunda C’nin qsort’unu neredeyse her zaman utandırır. […] Çalışma zamanında sıralama karşılaştırma işlevine yerinde arama yapar… qsort karşılaştırma işlevini bir işaretçi aracılığıyla çağırır. […] Bir milyon çift kişilik bir vektörde yaptığım testlerde, [sort]% 670 daha hızlı koştu…

48
Konrad Rudolph

Çünkü yavaş ... bazı uygulamalarda. Masaüstü uygulamalarının baştan yanıt vermesi gerekir ve başlangıç ​​ek yükü yavaş sayılır.

Öte yandan, bir sunucu çalıştırırsanız, bazı ısıtma (JIT analizi ve derleme) olup olmadığı önemli değildir - mavi ay içinde bir kez yaparsınız, bu yüzden çoğu zaman tamamen yavaş kabul edilemez.

28

Ben söyleyebilirim çünkü insanlar ilk karşılaştığında yavaştı. Buna dayanarak, bir izlenim oluşturdular. Bu izlenimin, kullanmazlarsa değişmesi olası değildir ve bu izlenim nedeniyle kullanmazlar - bu kısır bir döngüdür.

İtiraf etmeliyim ki, Java yavaş ve evet, bu benim daha önceki maruziyetimden) bir izlenim vardı. Şimdi farklı dillere geçtim ve son derece sınırlı maruz kaldım Java O zamandan beri. Sonuç olarak, düşüncem çok değişmedi.

21
Damovisa

Çünkü bir ürünle ilgili insanların algılarını değiştirmek bir nesil gerektirir

Ne kadar hızlı olduğu ile ilgisi yoktur Java. İnsanların zihninde Java 'yavaş' kelimesi ile ilişkili bir const tanımlayıcısıdır.) veya Oracle bu konuda yapabilir.

Oracle'ın Java programlama kültürünü (henüz) bir şey yaparak döküntü veya aptal yok etmediği için mutlu olun. Kullanmak için aşırı lisans ücreti almak gibi. daha önce Sun'a ait olan yazılım patentlerini temel alan kişiler :: sigh ::

Burada naysayer olmaktan nefret ediyorum, ancak Oracle ve Google Java Nice şartlarında mücadele etmedikçe veya Google Java ve 'uygun' açık kaynak platformu, Java bitleri olan oyun alanında çocuk olma yolunda iyi. IE, kimse 20ft kutup ile dokunmak istemeyecektir.

Not: Açıkça söylemek gerekirse, nesil dediğimde bilgisayar terimleri değil, insanlar açısından konuşuyorum. IE, bu algıya sahip olan insanlar yaşlılıktan ölünceye veya daha genç bir neslin yerini alana kadar algı doğru olacaktır. 5 yıl değil 5 yıl olarak düşünün.

16
Evan Plaice

Bunun bir nedeni insanlar gördükleri yerine başkalarının söylediklerine güvenir.

Programlamaya ilk başladığımda söylendiğime göre, Java C++ 'dan "daha yavaş" ve neden Java kullanılabileceğinin nedeni " Java Güvenlik ve rahatlığı performans maliyetiyle getiriyor.) Daha sonra C # icat edildiğinde bile insanlar bunun Java çünkü "yerli".

Ama insanların bunu hissetmeden gördüğü gerçek şu ki, Eclipse, IDE, kesinlikle FASTEST IDE sınıfta.) neredeyse tüm ana akım IDE'lerini, MS ve GNU, Borland'ı kullandılar ..., Eclipse büyük ölçüde hızlı olması nedeniyle IDE'lerin mutlak kralıdır.

Başka bir nedeni zun başlatma süresi.

Java, sistem tepsisinde kalan, biraz bellek tüketen, mola vermenizi hatırlatan bir iletişim kutusu açan küçük bir uygulama geliştirmek için uygun değildir; veya bir metin dosyasını açmak, okumak ve kapatmak için kullandığınız bir not defteri. BÜYÜK bir şeyde kullanılmalıdır, her zaman orada olan bir web sunucusu gibi, bilgi işlem kaynağınızdan en iyi şekilde yararlanın, her saat milyonlarca talebe yanıt verin. Ya da IDE Eclipse gibi binlerce çalışma alanı dosyasını yönetir. Sizi tanımıyorsunuz Java uygulama en az birkaç saat çalışana kadar hızlı, İnanıyorum.

11
tactoth

@bigown "İnsanlar neden hala Java yavaş?) diyor?"

Çünkü aptallar. Çünkü iş tecrübeleri yok, ama Dikjstra'nın yaşayan enkarnasyonu ya da Linus Torvald'ın ikinci gelişi olduklarını düşünüyorum, ah, bilmiyorum. Böyle engelli bir şey söylemenin nedenleri çok fazladır, ancak genellikle aptallık, akılsız öznel fanboyizm ve duygusal dikkat-whoring onların arkasında gibi görünmektedir.

Yukarıda söylediklerimin gerçekliğini görebilmeniz için bunu inceleyelim:

Birincisi, yavaş olan, hangi bağlamda, ne için, hangi koşullar altında, hangi mühendislik/bilimsel/iş amacının berbat olduğunu söylemek için ) Herhangi bir X teknolojisi için "X yavaş" veya sadece Y'nin bir tür olumsuz ifade olduğu durumlarda "X yavaştır" diyen herhangi bir kişi, yukarıdaki sorulardan herhangi birine cevap vermeden aptal olarak reddedilmelidir. Bunun gibi ifadelerin mühendislikte yeri yoktur. Siyaset ve çocuk sohbet odalarında belki, ama mühendislik değil.

İkincisi, bu yanlış yönlendirilmiş aptalların çoğu Java yavaş olmaktan dolayı ağlıyorlar çünkü ZOMG, Eclipse'lerinin ateşlenmesi sonsuza dek sürüyor (gee, tüm eklentilerle bir şey yükleyin ve ne olduğunu tahmin edin.) Bu aptalların birçoğu Eclipse'in hızlı çalışması için jvm'nin nasıl ayarlanacağını bile bilmiyor (veya herhangi bir Java uygulama için)) Yani performans ayarlama hakkında hiçbir fikri yok. sadece Java için değil, önemsiz olmayan herhangi bir sistem için, ister donanım ister yazılım olsun, bu nedenle, bu tür düşüncesiz ifadeler yaparken herhangi bir teknik geçerlilik için kendilerini silahsızlandırıyorlar.

Üçüncüsü, Java gelişiminin ne için olduğunu düşünelim: arka uç OLTP; izleme sistemleri ikinci geliyor). kümeler halinde çalıştırın ve aylar olmasa bile haftalarca kesintisiz çalışın.O zaman gerçekten küçük Eclipse veya oyuncak uygulamanızın REAL Java apps) uzun süre koşmak için? Bağlam, insanlar, bağlam.

Son olarak, OLTP omurga Java üzerinde çalışır. Java yavaş değil (en azından için) çelişkili bir kanıt olarak kabul ediyorum "oyuncak X yavaş, berbat" demek amacıyla özel olarak yapılan küçük oyuncak deneyleri, kriterler ve doğrulanamayan annecdotal kanıtlar için önemli olmayan koşullar.

Mühendislik var ve fanatizm var. Tahmin et, bunun gibi hangi kategori ifadeleri?

8
luis.espinal

Çünkü bu konuyu bir kez ve sonsuza dek kapatabilir miyiz?

https://days2011.scala-lang.org/sites/days2011/files/ws3-1-Hundt.pdf [tablolara ilerleyin, Java 3.7 C++ 'dan -12,6 kat daha yavaş, Google çalışanlarının araştırması]

Not: Değilse, bana en az bir snappy Java uygulaması), daha önce görmedim.

8
Coder

Neye kıyasla yavaş? Ben daha hızlı duydum çünkü sıradan Ruby JRuby (Java tabanlı Ruby) değiştirmeyi düşünüyorum.

6
Andrew Grimm

Görüşler fikirdir ve gerçekler gerçeklerdir.

İşte Google Code Jam'den programcıların zor bilgi işlem sorunlarını kısa sürede çözmelerine tartışmaya zorlayan bir gerçek, yani kullandıkları dilin performansının önemli bir rol oynadığı anlamına geliyor:

Geçmiş baskılarda (2009, 2010, 2011), son turlara gelen programcıların yaklaşık% 75'i Java kullanarak% 15'in aksine C++ kullanıyordu.

Kaynak -> http://www.go-hero.net/jam/

6
Daniel Scocco

TMHO, bunun nedeni VM tarayıcıda başlatılması için gereken süredir. Bir uygulama yavaş başlarsa, insanlar sadece bunu hatırlayacaktır. Çünkü uzun başlangıç ​​zamanı gerçekten sinir bozucu. Gerçekten. İş arkadaşımdan biri çok fazla yavaş olduğu için Firefox'u kullanmadığını söyledi. (?!?) Ama, Evet, tamam, pencerelerde, Firefox'un gösterilmesi çok zaman alıyor. Bu uygulama yavaş, genel hızı hakkında fikrini yaptı.

6
Pierre Watelet

1997 dolaylarında HP Vectra VE (200 MHz) ve Windows 95 kullandım. Çoğu uygulama bu konuda çok hızlı çalıştı, ancak daha sonra Java (doğru hatırlıyorsam IDE'ler) ile yazılmış birkaç uygulamayı denedim. Çok yavaşlardı, en azından GUI kısımları. Başlaması uzun sürdü ve GUI öğeleri (örn. Menüler) çok duyarlı değildi - görsel geri bildirimlerde gecikmeler vardı. Ayrıca, Java GUI uygulamaları oldukça farklı bir görünüme sahip olduğu için, bu görünümü (ve Java'yı) düşük performansla ilişkilendirmeyi öğrendim.

4
Andreas Rejbrand

Yavaş olarak ne demek istediğine bağlı.

Her şeyden önce, Java son zamanlarda birçok ilerleme kaydetti ve çoğu durumda çok hızlı.

  • Java başlangıçta yavaştır, çünkü herhangi bir şey yapmadan önce JVM'yi yüklemeniz gerekir.
  • Bazı güvenlik özellikleri bazı durumlarda performansları öldürebilir. Rasgele erişimli sınır kontrolü örnek teşkil eder.
  • Java) JVM'ye karşı çalışmayı gerektirir (örnek olarak önbellek satırından yararlanmak için).
  • Meta programlamanın olmaması, her soyutlamada çalışma zamanında bir penalite anlamına gelir, bu nedenle performans birçok durumda tasarım maliyetine gelir.
  • Java, tasarım yoluyla gerçek zamanlı kısıtlamayı neredeyse hiç sağlayamaz ve bu bazı insanlar tarafından "yavaş" olarak düşünülebilir.

Bu arada, Java, bazı durumlarda, Vanilla C/C++ 'dan daha hızlıdır. Ancak bu diller size bunları düzeltmek için araçlar sağlar.

Java, üretkenliği amaçlayan bir programlama dilidir. Şimdi çoğu uygulama için yeterince hızlı, ancak bazıları için yeterli değil.

Genel olarak, Java'nın yavaşlığı aşırı kullanılan bir argümandır, çünkü çoğu durumda geri döndürülemez.

4
deadalnix

Basit, standart Java kodu basit, standart C/C++/D koduyla eşit veya daha hızlı olma eğilimindedir Basit, standart kod gereksiz yere çok fazla bellek ayırma gerçekleştirme eğilimindedir, özellikle değil herhangi bir CPU mimarisine ayarlanmış, tonlarca düşük seviye optimizasyon vb. yapılmamıştır. Java'nın HotSpot GC'si şaşırtıcı bir şey değildir ve VM optimizasyonlar statik bir derleyiciden daha iyi olma eğilimindedir) yapabilirdi.

Öte yandan, gerçekten performansa ihtiyacınız varsa ve bunu elde etmek için bir şeyleri elle ayarlamak istiyorsanız, C/C++/D bunun için daha fazla fırsat sunar. Java'da satır içi birleştirici kullanamazsınız. Kayan nokta sayılarını bit dizisi olarak işlemek için kirli tip çift numaralar kullanamazsınız. Özel kullanım durumunuz için GC'den daha hızlı olabilecek özel bellek yönetimi şemalarını kullanamazsınız. Java C/C++/D'deki gibi yığın üzerine neredeyse ayıramazsınız. Java) kabaca eşdeğer bir şey elde etmenin tek yolu yüksek sıralı fonksiyonlar arayüzler ve çalışma zamanı bağlama ile D ve (sanırım, eğer yanılıyorsam beni düzeltin) C++, esneklik kaybı olmadan derleme zamanında gerçekleşmesine izin vererek, şablonları şablonlara geçirebilirsiniz.

2
dsimcha

Java “yavaşlığı” için bir başka nokta 64bit çalışma zamanıdır.

Bazı kişilerin Java 64bit bilgisayarlarda onlar için çok yavaş olduğunu şikayet ettiklerini duydum. Anlaşıldığı gibi, 64bit Java çalışma zamanı, başlamadan önce tüm programı derleyen sunucu JVM'yi kullanır.

BURADA neden 64bit VM daha yavaş başlar).

Örneğin Windows'ta:

C:\> Java -version  
Java version "1.6.0_21"  
Java(TM) SE Runtime Environment (build 1.6.0_21-b06)  
Java HotSpot(TM) 64-Bit Server VM (build 17.0-b16, mixed mode)  
1
AndrejaKo

Değersiz bir bozuk para atmak için Java webapps genellikle uzun başlatma ve yanıt sürelerine sahip olduğunu görüyorum, burada bana Python veya Ruby daha iyi olurdu.

Eclipse benim programlama çoğu için kullanıyorum ve Java daha hızlı yerel olarak çalışan ve "bağımsız" değilse, başka bir şey gibi hızlı olduğunu söylemeliyim.

0
thomas

Java performansı çok özneldir, ancak Java 'ın yavaş olmasının algısı büyük ölçüde diğerlerinin belirttiği nedenlerden dolayıdır: çoğu insan bir şeyin algılanması renklidir daha önceki deneyimleri ve Java başlık altında her zaman iyi optimize edilmiş bir dil olmamıştır. Aynı şekilde, Vanilla Eclipse tam olarak hızlı değildir IDE Visual Studio gibi bir IDE) ile karşılaştırıldığında yanıt verme açısından birlikte çalışabilir.

Bununla birlikte, Java başlangıçta olan UI sorunlarının dışında, çoğu uygulama için yeterince hızlıdır. Arama yaparsanız diğerleriyle karşılaştıran makaleler) diller ve sunulan sonuçların çoğu, onu yalnızca büyük veri kümeleriyle uğraşırken sorun olacağı bir aralığa koyuyor.

Biyoinformatik alanında, iyi desteklendiği ve zaten bir kurulum tabanı olduğu için oldukça az kullanılmaktadır, Java 'ın sahip olduğu avantajlardan biri, oldukça hızlı bir gelişme yapabilmenizdir. Biyoenformatik için kullanılan dillere bakarsanız (şahsen R, Python ve Java düzenli olarak) kullanıyorum) bunların hiçbirinin tam olarak en hızlıdır ve biyoinformatikteki veri kümelerinin 100 gigabaytlık bilgi içine girmesi olağandışı değildir.Günün sonunda, insan saati hala daha değerlidir ve hız farklılıkları fark edilirken, veri kümelerinin boyutu zaten bir gecede koşacak kadar büyük olma eğilimindedir.

Java] 'da hızlı bir kullanıcı arayüzü yazmak daha kolay olsaydı, çoğu insanın dili gerçekten günlük bir sorun olduğu için yeterince zorlamadığı için hız algısının radardan düşeceği gibi görünüyor. temeli.

0
rjzii