Neden insanlar hala Java'nın yavaş olduğunu söylüyor? [kapalı]


61

SO ve diğer yerlerde uzun süredir Java yavaş olma ününe sahiptir. Gönderen şakalar için birçok yorumlarla soru ve cevapları, insanlar hala Java yavaş sadece 90'lı yıllarda onunla deneyime dayalı inanıyoruz.

Bu benim sorunum: insanların Java'nın yavaş olduğuna inanma nedenlerini (çoğu) ispatladık . Küçük şeylerin dışında Java oldukça hızlı.

Peki neden insanlar hala Java'nın hızlı olduğuna inanmayı reddediyorlar? C / C ++ olmayan herhangi 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?


10
Umm, C # da hızlı;)
Evan Plaice

12
um, bu bağlantı java'nın yavaş olduğunu ispatlamaz.

13
Benim hissim, Java'nın yavaş değil, yanıt vermediği.
zneak

23
Şişirilmiş ve korkunç UI Kütüphaneleri ..?
dmp

4
Çünkü JVM çekirdeğin bir parçası değildir. Oh, belki bazı linux adamlar gelecekte ekleyecektir.
Xiè Jìléi

Yanıtlar:


131

Uygulamalar. Notu olarak, var yapmacık senaryolarda Java kodu karşılamak hatta ki, yine, zaman ve zaman kanıtlamıştır yendi C, C ++, Lisp, VB6 veya JavaScript gibi sözde "performant" dillerin performansı. Ve böyle kanıtlarla sunulduğunda, çoğu aklı başında, açık fikirli muhalifler kafalarını utanç içinde asacaklar ve bir daha asla böyle bir iftira yaymaya söz verecekler.

... ancak daha sonra, Eclipse veya NetBeans veya Guiffy yazılımlarını başlatırlar veya tarayıcılarında Java desteğini etkinleştirirler veya en sevdikleri özellik telefonunda bir uygulama çalıştırmayı denerler. Ve tepki vermesi için bekliyorlar ...

... ve bekle ...

... ve bekle ...



... ve bekle ...







... ve bekle ...











... ve ...




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


44
En basit Java GUI'larının bile başlaması en az 1,5 saniye sürer. Bu küçük bir parça değil.
Peter Boughton

32
Javascript'in "performans" dili olduğunu düşünmedim.
zneak

11
IDE'lerden bahsetmek için +1. Eclipse’in yanıt verebilirliği ile Visual Studio benzeri bir IDE arasında çok büyük bir fark var.
mellowsoon

56
Bununla ilgili sorunlarım var. Firefox, esas olarak C ++ dilinde yazılmış ve yavaş. Bu C ++ 'nın yavaş olduğu anlamına mı geliyor? Hayır, Firefox'un yavaş olduğu anlamına gelir. Bir dilin yavaş olduğunu söylemek, içinde yazılmış en büyük programın yavaş olması nedeniyle aptalca.
TheLQ

13
Jonas, bulabildiğim en basit örneği kullanmak beni kötü bir programcı yapmaz. Java GUI'sini göz kırpmadan daha az hızda çalıştıran sihirli bir yönteminiz varsa, devam edin ve gösterin .
Peter Boughton

48

Bu soru sahte tesislerde çalışır: önemli olduğu yerlerde Java hala yavaştır. Önemli olan, büyük veri kümelerindeki hesaplama ağırlıklı algoritmalardır. Verilen, bunlar bazen C / C ++ koduyla aynı olacak şekilde optimize edilebilir, ancak yalnızca modülerlik ve jeneriklik pahasına. Verimli C ++ kodu, genel amaçlı bir kütüphane olarak genel ve kullanışlı olacak şekilde tasarlanabilir. Java kodu yapamaz. Array.sortTüm temel türler için farklı uygulamalar kullanan ve nesne varyantı hala C ++ 'jenerikinden daha yavaş olan ve sortbu nesnelerin eşitlik karşılaştırmalarını dinamik olarak vermek zorunda kaldıklarından , yoğun olarak optimize edilmiş yönteme bakın .

HotSpot motorunun gerçekleştirdiği tam zamanında yapılan optimizasyonlar aslında bu sanal aramaların hedefini tahmin edebilir ve satır içi girişimi yapabilir. Ama bu yine de C içeride gönderilir doğrudan satır içine çağrı daha yavaş ++' sortyöntemi.

Eski bir meslektaşım, şablonlanmış bir C ++ uygulaması ve nesne yönelimli bir Java uygulamasıyla devasa veri kümeleri ( dinamik şekilleri kullanarak q -gram sayma) probleminin karşılaştırmalı karşılaştırmalarını yaptı . Java kodu, C ++ kodundan daha yavaş büyüklükte emirdi.

Tabii ki bu, elmaları portakallarla karşılaştırmak. Ancak, Java uygulamasının mümkün olan en iyi uygulama olduğu (performans açısından, bir kütüphane için gereken modülerlik derecesi verilen) olduğu gibi, C ++ uygulaması da önemliydi.

Ne yazık ki, kıyaslama verileri serbestçe elde edilemiyor, ancak diğerleri çalışma zamanı soyutlamasının genel giderini karşılaştırırken benzer rakamlar buldular. Örneğin, Scott Meyers , C'nin genel fonksiyonunun ek yükü hakkında Etkin STL’de yazar qsort:

C ++ 's sıralaması, hız geldiğinde neredeyse her zaman C'nin qsort'unu utandırır. […] Çalışma zamanında, sort, karşılaştırma işlevine satır içi çağrılar yapar… qsort karşılaştırma işlevini bir işaretçiyle çağırır. […] Bir milyon çiftlik bir vektöre yapılan testlerimde, [sıralama]% 670'e kadar daha hızlı koştu…


6
Adil olmak gerekirse std::sort, diğer dillerde benzer bir şey yapmanın zor olduğu durumlardan biridir. Ancak gördüğüm projelerin büyük çoğunluğu yazıya std::sortbenzemiyor. C ++ 'da (kötü) Java kodu yazıyorlar ve sorun yaşadıklarından şikayet ediyorlar.
Billy ONeal

2
Büyük veri kümelerinin yavaş olduğu konusunda hikayenizi yedekleyecek herhangi bir raporunuz var mı? İnsanların 1-2 milyon girişli Listeleri işlem yapmaktan bahsettiğini duydum ve hala hızlı. Ve bellekteki büyük veri kümeleriyle uğraşmamak (genellikle bir DB'de böyle şeyler) bir miktar niş alanı mıdır?
TheLQ

8
@TheLQ: Kaynak, Gogol-Döring & Reinert tarafından yayınlanan SeqAn kitabıdır. Ve karşı örneğiniz hakkında: hangi işlemler? Ve ne “hızlı” olarak görüyorlar? Ayrıca, 1E6 girişleri o kadar büyük değil. ;-) Ve bunun bir niş alan olup olmadığı konusunda - kesinlikle. Ancak hızlı hesaplamalar yapmanız gereken yer burasıdır. Mesele şu ki Java hızlı mı, ucuz işlemler için yeterince hızlı mı değil mi? Küçük bir veri kümesinde, her şey yeterince hızlıdır.
Konrad Rudolph

2
mümkün olan en iyi uygulama
jeremy-george

3
@fonzo Makul bir yaklaşım olabilir. Yeterince basit bir algoritma ve iyi tanımlanmış bir metrik için orada, Karalayın edebilir bir mümkün olan en iyi uygulama olacaktır. Buradaki durum bu. Algoritma basittir ve optimize edildiği iyi tanımlanmış bir durum vardır: verilen bir girişte çalışma süresi.
Konrad Rudolph

28

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

Öte yandan, eğer bir sunucuyu çalıştırırsanız, ısınmanın bir önemi yoktur (JIT analizi ve derleme) - bir kez mavi ay içinde yaparsınız, bu yüzden çoğu zaman tamamen yavaş sayılmaz.


Başlatma maliyetleri bir problemdir, ancak bazı komut satırı anahtarları ile ayar yapabilirsiniz
TheLQ

22
Komut satırı anahtarları hakkında gerçekte kaç kullanıcı biliyor?
Walter

17
Eğer Salıncak / AWT için 1.5s başlangıç gecikme kaldırmak için bir komut satırı anahtarını verebilirseniz TheLQ, devam edin ve bu cevap verin: stackoverflow.com/questions/508723/...
Peter Boughton

6
Ve bir Java şeyi içeren bir bağlantıya tıklarsam, tarayıcının 5 saniye boyunca kilitlenmesini önlemek için bu komut satırı anahtarlarını nasıl ayarlarım? İnsanların Java'yı yavaşlatmasına neden olan şey budur ve bir kere yüklendiğinde aslında hızlı bir şekilde çalışması önemli değildir.
Roman Starkov

21

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

Kabul etmeliyim ki, Java'nın yavaş olduğu izlenimini edindim ve evet, bu benim önceki maruz kalmamdan kaynaklanıyordu. Şimdi farklı dillere geçtim ve o zamandan beri Java'ya son derece sınırlı maruz kaldım. Sonuç olarak, benim fikrim çok değişmedi.


3
+1 - Tamamen katılıyorum. Java'nın ilk günlerinde nefret ediyordum. .NET Framework, yönetilen kodun nedenine gerçekten yardım etti: C # 'yi beğendim ve sonunda Java'yı da takdir ettim.
Wizard79

7
Merhaba dünyayı çalıştırmak hala bir saniye sürüyor. Başlangıç ​​zamanı açısından yavaştır.
intuited

@intuited C ++ / C # üzerinde bir sunucu oluşturmayı deneyin veya HECK'i bulabileceğiniz herhangi bir dilde CAV ile karşılaştırmayı deneyin. "Ma, Java'dan daha hızlı 10 satır C kodu yazdım ama okuyamazsın" tipindeki bir adamsanız, C ile olan şey hızlı olmasıdır. C kodunuzun büyüdüğü an, hızınız yavaşlar;)
AceofSpad

16

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

Java'nın ne kadar hızlı olduğu ile ilgisi yok. İnsanların kafasında Java, 'yavaş' kelimesiyle ilişkili bir yapı tanımlayıcısıdır. Çok az, sizin veya Oracle'ın yapabileceği hiçbir şey yok.

Sadece Oracle'ın kızarık ya da aptalca bir şey yaparak Java programlama kültürünü (henüz) tahrip etmediği için mutlu olun . Kullanmak için aşırı lisans ücreti almak gibi. Veya daha önce Sun'ın sahip olduğu yazılım patentlerine dayanarak insanları dava etmek. ::iç çekmek::

Burada naysayer olmaktan nefret ediyorum, ancak Oracle ve Google, Java ile mücadele etmek için güzel şartlar koymadıkça, ya da Google, Java'yı satın almaya zorlamadığı ve 'uygun' bir açık kaynak platform haline getirmediği sürece, Java, çocuk olma yolunda ilerliyor. bitleri olan oyun alanı. IE, kimse 20 ft direk ile dokunmak istemeyecektir.

Not: Sadece net olmak gerekirse, nesil derken bilgisayar terimleri değil insan terimlerinden bahsediyorum. IE, bu algıyı tutan insanlar yaşlılıktan ölene veya daha genç bir kuşakla değiştirilinceye kadar algı doğru olacaktır. 5 yılda 5 yıl değil düşünün.


2
Google’ın o kadar fazla Java kullandığını düşünüyorum ki, bunları satın almak tamamen olanaksız bir teori değil. Muhtemelen onunla mutlu olurum.
Bart van Heukelom

1
@ Donroby: Peki bu dilleri kim önemsiyor? Yirmi yıl içinde Java niş bir dil olacak.
aasc

1
@aasc - Java yirmi yılda modası geçmiş olabilir, ancak LISP şu anda değil ve o zaman olmayacak.
Don Roby

2
@aasc "Programlama dilleri genellikle bir nesilden fazla yaşayamaz" İyi Lord adam, Pascal, 5 Milyon Visual Basic Geliştiricisi olan 1 milyon Delphi Geliştiricisi ... Bu yorum için herhangi bir gerekçe ???
Reallyethical

2
@ Reallyethical Ana akımda değil. Kaç işletme Lisp, Fortran, Cobol'a bağlıdır. Lisp ile daha çok akademi'de mahsur kaldı ve diğer dillerin özellikleri için bir model olarak kullanıldı, birkaç tanesi gerçek üretim projeleri için kullanıldı. Fortran, yüksek performanslı matematiksel modelleme için niş bir dil haline gelmiştir ve Cobol, yalnızca bankacılık endüstrisinin eski / güvenilir kodlarını yeni bir platforma değiştirmekten korktuğu için kalmaktadır. C ++ göz kamaştırıcı istisnadır, çünkü bugün hala çok yaygın şekilde kullanılmaktadır ve benimsenmiştir.
Evan Plaice

11

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

Programlamaya ilk başladığımda söylenenlere göre Java, C ++ 'dan "yavaştır" ve Java'nın neden kullanılabildiğinin sebebi, "rahat ve kolay" olmasıdır. Java'nın performans pahasına Güvenlik ve rahatlık getirdiğine inanılıyor. Daha sonra C # icat edildiğinde bile insanlar "yerli" olduğundan Java'dan daha hızlı olduğuna inanıyor.

Ancak insanların bunu hissetmeden gördükleri gerçek şu ki, tutulması, Java ile yapılan IDE'nin kesinlikle sınıftaki en hızlı IDE olduğu. Neredeyse tüm ana akış IDE'lerini kullandım, MS ve GNU, Borland ..., eclipse IDE'lerin mutlak kralıdır, büyük oranda hızlı olması nedeniyle.

Diğer bir sebep de uzun başlangıç ​​zamanı .

Java, sistem tepsisinde kalan, az miktarda hafıza tüketen, ara 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 şey üzerinde kullanılmalı, her zaman orada bulunan bir web sunucusu gibi, bilgi işlem kaynağınızı optimize etmiş, her saat milyonlarca talebe yanıt vermeli. Veya binlerce çalışma alanı dosyasını yöneten bir tutulma benzeri bir IDE. En azından birkaç saat boyunca çalışana kadar Java uygulamasının hızlı olduğunu bilmiyorsunuz.


1
Her zaman yavaşlık görüyorum.
aasc

28
Tutulma hızlı mı? LMAO
finnw 18:10

2
@finnw - ayarlasanız olur. Kutunun dışında ve tüm eklentilerle, açıkçası hızlı olmayacak. Açıkçası hiçbir zaman vim veya jedit veya Notepad ++ ile karşılaştırılamaz, ancak bu "hızlı" veya "yavaş" argümanlar ve ifadeler bir bağlam olmadan anlamsızdır.
luis.espinal,

2
Ancak, bunu Eclipse'den daha basit olduğuna inanmadığım Delphi 7 ile karşılaştırabilirsiniz. Delphi 7, neredeyse not defteri kadar hızlı. Bu delilik.
Roman Starkov

4
@finnw, zillions eklentisi ile bir IDE için oldukça hızlı :)

8

@bigown "Neden insanlar hala Java'nın yavaş olduğunu söylüyor?"

Çünkü aptallar. Çünkü iş tecrübeleri yok ama Dikjstra'nın canlı enkarnasyonu olduklarını ya da Linus Torvald'ın ikinci gelişi olduklarını düşünüyorum. Böyle bir gerizekalı şey söylemenin nedenleri çoktur, ama genellikle aptallık, akılsız öznel fanboyizm ve duygusal dikkat kırıcı onların arkasında görünüyor.

Bunu diseksiyon edelim, böylece yukarıda söylediklerimin gerçeğini görebileceksiniz:

Birincisi, ne yavaştır, ne bağlamda, ne için, hangi şartlar altında, hangi mühendislik / bilimsel / iş amacına sahip ( ne berbat demek için bunlardan biri değil.) Herhangi bir teknoloji için "X yavaş" diyen herhangi biri X, veya basitçe "X, Y" dir, burada Y, bir tür olumsuz ifadedir, yukarıdaki soruları yanıtlamadan, aptal olarak reddedilmelidir. Bunun gibi ifadelerin mühendislikte yeri yoktur. Politika ve genç sohbet odalarında belki, fakat mühendislikle ilgili değil.

İkincisi, bu yanlış yönlendirilmiş aptalların çoğu Java'nın yavaş olması nedeniyle ağlıyor, çünkü ZOMG, tutulmaları sonsuza kadar ateş açıyor (gee, tüm eklentileri içeren şeyi yükle ve ne olacağını tahmin et.) Bu aptalların çoğu nasıl olduğunu bile bilmiyor jvm'nin tutulması için hızlı çalışması (veya bu konuda herhangi bir Java uygulaması için) ayarlamak. Yani, sadece Java için değil, önemsiz olmayan herhangi bir sistem için donanım veya yazılım olsun, performans ayarlaması hakkında hiçbir fikri yoktur. İşte orada, böyle akılsız beyanlarda bulunma konusunda herhangi bir teknik geçerliliği için kendilerini silahsızlandırıyorlar.

Üçüncüsü, Java geliştirme yığınının ne işe yaradığını düşünelim: en başta OLTP ilk önce arka uç; izleme sistemleri ikinci sırada geliyor. Her iki tür sistemin de kümelerde çalışması ve aylar olmasa da haftalarca kesintisiz çalışması amaçlanmıştır. REAL Java uygulamalarının amacı uzun süre çalışacaksa, küçük tutulma veya oyuncak uygulamanızın bir iki dakika sürmesi gerçekten önemli mi? Bağlam, insanlar, bağlam.

Son olarak, Google ve Ebay’de OLTP’nin omurgası Java’da çalışıyor. Java'nın yavaş olmadığının bir kanıtı olarak kabul ediyorum (en azından önemli koşullar için, küçük oyuncak deneyleri, kriterler ve özellikle "X yavaşsa, berbat" demek amacıyla yapılan değerlendirmeler ve kanıtlanamayan kanıtlar.

Mühendislik var ve fanboyizm var. Tahmin et, bunun gibi hangi kategori ifadelerine ait?


19
Java'nın kabul edilebilir bir şekilde hızlı çalışmasını sağlamak için JVM'imi ayarlamak zorunda kalırsam, -O2C ++ 'nın kabul edilebilir şekilde hızlı çalışmasını sağlamak için hiçbir şey (hariç ) ayarlamak zorunda kalmazsam , Java yavaş olur.
David Thornley

@David - Açık ifade. Herkes Java'nın C ++ 'dan daha yavaş olduğunu bilir. Ancak, mantıksal olarak yavaş olduğunu takip etmiyor. Gcc bayraklarından bahsetmek de yorumun geçerliliğini vermiyor. Sadece it is slower than something else.bir jaguarın çitadan daha yavaş olduğunu belirtir . Bu eski yapar slowmı? Bazı mühendislik objektifliğini deneyin ve kendinize şunu sorun: bir mantıksal olarak şunu söyleyebilirim, bir arbitrarilyşey slowbasitçe, çünkü neyin ne için olduğunu tanımlayan it is slowerbaşka bir şeyden mi? Mantıksal olarak yapabilir misin? without mentioning a context of operationsfast enough
luis.espinal,

5
@ luis.espinal: 2 numaralı nedeninize cevap veriyordum: insanlar Java'nın yavaş olduğunu söylüyorlar, çünkü sizce Java'yı ayarlayamıyorlardı. Lütfen "hızlıca kabul edilebilir" kullanımıma da dikkat edin. Bana göre kabul edilebilir bir şekilde hızlı olmayan bir şeyin yavaş olduğu ve insanların rutin olarak yavaş iddia ettiği bir şeyin muhtemelen kabul edilebilir bir şekilde hızlı olmadığı anlaşılıyor.
David Thornley

4
@luis espinal Kant'a benziyorsunuz :) Buradaki insanlar, C ++ gibi diğer pratik, üretime hazır dillere kıyasla daha yavaş anlamına gelen daha yavaş anlamına gelen açık bir varsayımda bulundular. (Fiziği hatırla ??) potansiyel enerjiyi ölçerken, her zaman bir toprağa göre ölçersiniz. Şimdi gramerinize bakarken, "X aptal" temelsizdir. ve "X, Knuth'dan daha aptaldır", X'i mutlak bir dilsiz yapmaz, çünkü burada hemen hemen herkes X olabilir. Yavaş yavaş demeye katılıyorum seçkin değil, ama burada "aptal" olmadığını söyleyen insanlar, ancak sadece örtük bir varsayım üzerinde anlaşmış oldular.
yati sagade

1
@luis hahaa .. güzel gözlem. (Kant'ın bir reenkarnasyonu olduğuna inancım daha da sağlamlaştı;)) Ve bu tartışmalar alev savaşlarında ve verimsiz tuş vuruşlarında son buluyor ... Bana göre, mücadele için en iyi araç gibi görünen şeye bağlı kalmalıyım. eldeki iş. Katılıyorum, Kant2? : P
yati sagade

8

Çü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, C ++ 'dan 3.7-12.6 kat daha yavaş, Google çalışanları tarafından araştırılıyor]

Not: Değilse, daha önce görmemiş bir başlangıç ​​için bana en az bir çabuk Java uygulaması adı verin.


6
Lütfen cevabınızdaki PDF içeriğini özetleyiniz.
Adam Lear

1
Bu makale bilimsel araştırma standartlarından çok uzaktır. Tüm dillerde aynı algoritmaları ve optimizasyonları bile tam olarak karşılaştırmaz. "E. Java Ayarlamaları Jeremy Manson, Java'nın performansını orijinal C ++ sürümüyle aynı seviyeye getirdi. Bu sürüm java_pro dizininde tutuldu. Jeremy'nin kodu daha da iyileştirmek için kasıtlı olarak reddettiğini, C ++ optimizasyonlarının çoğunun Java'ya uygulanacağını unutmayın. yanı sıra sürümü. " jeremymanson.blogspot.com/2011/06/scala-java-shootout.html
Piotr Kolaczkowski

6

TMHO, bunun nedeni, tarayıcıda VM'yi başlatmak için gereken zamandır. Bir uygulama yavaş başlarsa, insanlar sadece bunu hatırlayacaktır. Çünkü, uzun başlangıç ​​zamanı gerçekten can sıkıcıdır. Gerçekten mi. İş arkadaşlarımdan biri bana çok yavaş olduğu için Firefox kullanmadığını söyledi. (?!?). Ancak, Evet, Tamam, Windows'ta Firefox'un ortaya çıkması çok zaman alıyor. Ona göre, bu uygulama yavaştır, genel hızı hakkında fikrini yaptı.


Mozilla Firefox hızlı başlamasını sağlamak için çaba korkunç çok harcama olmuştur yüzden ... var
Spudd86

2
Windows gibi görünebilir. Evet, oturum açtıktan sonra masaüstünü gerçekten hızlı bir şekilde görüyorsunuz, ancak daha sonra yanıt vermesi için bir süre beklemeniz gerekiyor.
Bart van Heukelom

6

Neye kıyasla yavaş? Normal Ruby'den JRuby'ye (Java tabanlı ruby) değiştirmeyi düşünüyorum çünkü daha hızlı olduğunu duydum.


1
JRuby , 1.9'dan bile Ruby'den daha hızlı. Ancak, boşluk kapanıyor.
Dan Rosenstark

2
Büyük bir sorunu işaret ettiği için +1. Her ne kadar OP muhtemelen C # veya C ++ ile karşılaştırılıyor diyebilirim.
Billy ONeal

@Yar, CRuby'nin JRUby ile yetişmekte olduğuna işaret ediyor?

6

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

İşte programcılara, zorlu hesaplama problemlerini kısa sürede çözmeleri için zorlayan Google Code Jam'in bir gerçeği, yani kullandıkları dilin performansının önemli bir rol oynadığı anlamına geliyor:

Son basımlarda (2009, 2010, 2011), final turlarına gelen programcıların yaklaşık% 75'i Java kullanarak% 15'ine karşılık C ++ kullanıyordu.

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


3
Bu yalnızca Java'nın hız odaklı bir rekabetin üstesinden gelebileceğini kanıtlıyor, ancak çoğu insan C ++ 'ı seçiyor.
Adam Lear

3
"zorlu bilişim sorunlarını kısa sürede çöz" - ne, kodu yazmak için geçen süre veya kodu çalıştırmak için geçen süre ? Ne olursa olsun, sizin gerçeğiniz şudur - bir gerçek - bunun soru ile ne ilgisi var? Gerçeğinden bir sonuç mu çıkarıyorsun?
oculus

bunun nedeni, final turlarını yapan programların% 75'inin Java'nın hiç test etmeden yavaş olduğunu ve bu nedenle de test etmeden hızlı olduğuna inandıkları için C ++ kullanmaları olabilir.
saat

4

1997 dolaylarında bir HP Vectra VE (200 MHz) ve Windows 95 kullandım. Çoğu uygulama bu konuda çok hızlı çalıştı, ancak daha sonra Java'da yazılmış birkaç uygulamayı denedim (doğru hatırlıyorsam IDE'ler). Çok yavaşlardı, en azından GUI parçaları. Başlamaları uzun zaman aldı ve GUI öğeleri (örneğin, menüler) çok tepkili değildi - görsel geri bildirimlerde gecikmeler oldu. Ayrıca, Java GUI uygulamaları kendine özgü bir görünüme sahip olduğu için, bu görünümü (ve Java'yı) düşük performansla ilişkilendirmeyi öğrendim.


2
1997'yi hatırladım! Büyük bir yıl, 1997'den beri pek çok şarap - ve gözlem - artık kullanılamıyor.
Dan Rosenstark

1
Ben de 1997'yi çok iyi hatırlıyorum. Windows sürekli çöktü ve bir sürücü kurulurken yeniden başlatılması gerekiyordu. Hurda parçası.

Ve 1997 hakkındaki fikrini değiştirmedin mi? 2011’in 1997’den tamamen farklı olduğunu fark ettiniz mi?
Jesper,

5
Bu verilerden yaptığım analizler 1997’nin emeceği şeydi.
JasonTrue

4

Ne demek yavaş demek istediğine bağlı.

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

  • 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ı düşürebilir. Rasgele erişime sahip sınır kontrolü bir örnektir.
  • Java'da gerçekten hızlı bir şeyler yapmak JVM'ye karşı çalışmayı gerektirir (örnek olarak önbellek satırından yararlanmak için).
  • Metaprogramlamanın eksikliği, her soyutlamada çalışma zamanında bir ceza anlamına gelir, bu nedenle performans çoğu durumda tasarımın maliyetine gelir.
  • Java, tasarım gereği - gerçek zamanlı kısıtlamayı pek sağlayamamaktadır ve bu, bazı insanlar tarafından "yavaş" olarak değerlendirilebilir.

Bu arada, java bazı durumlarda vanilya C / C ++ 'dan daha hızlıdır. Ancak dilleri keser, size onları ince ayar araçları.

Java, üretkenliği hedefleyen bir programlama dilidir. Artık çoğu uygulama için yeterince hızlı, ancak bazıları için yeterli değil.

Genelde, Java'nın yavaşlığı aşırı kullanılmış bir argümandır, çünkü çoğu durumda kararsızdır.


2

Basit, kanonik Java kodu, basit, kanonik C / C ++ / D koduyla aynı veya daha hızlı olma eğilimindedir. Basit, kanonik kod gereksiz yere çok fazla bellek ayırma eğilimindedir, özellikle herhangi bir CPU mimarisine ayarlanmamış, tonlarca düşük seviyeli optimizasyon yapmamış, vb. statik bir derleyicinin yapabileceğinden daha iyi olması için.

Öte yandan, gerçekten performansa ihtiyacınız varsa ve bunu elde etmek için işleri ayarlamak için istekli iseniz , C / C ++ / D bunun için daha birçok fırsat sunar. Java'da satır içi assembler kullanamazsınız. Kayan nokta sayılarını bit dizisi olarak değerlendirmek için kirli tipte kurnaz hileler 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’daki yığında neredeyse C / C ++ / D’de olduğu gibi tahsis edemezsiniz. Java'da yüksek dereceli işlevlere kabaca eşdeğer bir şey elde etmenin tek yolu arayüzler ve çalışma zamanı ciltlemesidir. D ve (sanırım hatalıysam beni düzeltin) C ++, işlevleri esneklik kaybı olmadan derleme zamanında yapılmasına izin vererek şablonlara geçirebilirsiniz.


5
Bu yorumları kaynaklayabilir misiniz? Başka bir deyişle, Java'nın daha hızlı olduğunu gösteren her dilde kanonik kod gösteren kriterler nerede?
Billy ONeal

1

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

Bazı kişilerin 64bit bilgisayarlarda Java'nın onlar için çok yavaş olduğundan şikayet ettiğini duydum. Görünen o ki, 64bit Java çalışma zamanı başlamadan önce tüm programı derleyen JVM sunucusunu kullanır.

HERE , 64bit VM'nin neden daha yavaş başladığını açıklıyor.

Ö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)  

3
Sunucu VM başlangıç yavaş ama yok değil doğal olarak başlamadan önce tüm program derlemek. Bulamadı, sınıflar yansıtma yoluyla tembel ve potansiyel olarak yüklenir, bu nedenle hangi bayt kodunun yerel olarak derlenmesi gerektiğini önceden bilmek mümkün değildir.
Dan Dyer

@Dan Dyer Bazı araştırmalardan sonra okuduğum şeyi yanlış anladığım anlaşılıyor. İstemci hızlı başlangıç ​​ve daha küçük bellek kullanımı için en iyi duruma getirilirken Server VM'nin daha fazla optimizasyon yaptığını kastettim.
AndrejaKo

sunucu VM uzun süren işlemler için optimize edilmiştir, bu nedenle daha uzun başlangıç ​​sürelerine neden olan ve daha fazla RAM kullanma eğiliminde olan daha fazla önyükleme yapar. İstemci VM, daha az yer kaplama ve başlangıç ​​süreleri için optimize edilmiştir, ancak çalışma süresi performansı daha düşük olabilir.
jwenting

0

Java'nın performansı çok özneldir, ancak Java'nın neden yavaş olduğu algısı büyük ölçüde diğerlerinin belirttiği nedenlerden dolayıdır: çoğu insanın bir şey hakkındaki algısı, onunla olan önceki deneyimleri tarafından renklendirilir ve Java her zaman iyi bir dille değiştirilememiştir. başlık. Aynı şekilde, vanilya Eclipse, Visual Studio benzeri bir IDE'ye kıyasla çalışmak için hızlı bir IDE değildir ve yanıt verme açısından önemsizdir.

Bununla birlikte, Java'nın başlangıçta sahip olduğu UI sorunlarının dışında çoğu uygulama için yeterince hızlı olduğu söyleniyor. Arama yaparsanız, onu diğer dillerle karşılaştıran makaleler bulabilirsiniz ve sunulan sonuçların çoğu, yalnızca büyük veri kümeleriyle uğraşırken sorun yaşayacağınız aralığa girer.

Biyoinformatik alanında epeyce kullanılır, çünkü iyi desteklenir ve zaten için bir kurulum tabanı vardır, Java'nın sahip olduğu avantajlardan biri, C ile yapamayacağınız oldukça hızlı bir gelişme yapabilmenizdir. Biyoinformatik için kullanılan dillere bakarsanız (kişisel olarak R, Python ve Java'yı düzenli olarak kullanırım), bunların hiçbirinin tam olarak en hızlı olmadığını ve biyoinformatikteki veri kümelerinin 100'lere girmesinin alışılmadık olmadığını not edersiniz. bilgi gigabayt. Günün sonunda, insan zamanı hala daha değerlidir ve hız farkları fark edilirken, veri setlerinin boyutu zaten bir gecede çalışacak kadar büyük olma eğilimindedir.

Java'ya hızlıca bir UI yazmak daha kolay olsaydı, çoğu insan dilleri yeterince zorlamadığı için hız algısının radardan düşmesi gibi bir şeydi, çünkü bu hız günlük olarak gerçekten bir konudur.


0

Değersiz bir yazı tura atmak için, Java webapps'lerinin genellikle Python veya Ruby'nin daha iyisini yapabileceğini düşündüğüm başlangıç ​​ve tepki sürelerinin uzun olduğunu gördüm.

Programlamamın çoğu için Eclipse kullanıyorum ve yerel olarak daha hızlı çalışmaması ve "bağımsız" olması durumunda Java'nın her şey kadar hızlı olduğunu söylemeliyim.


1
İnternette, başlangıç ​​zamanı önemli değil. En önemli olan kaynak tüketimi ve ölçeklenebilirliktir.
Berin Loritsch

-7

Java'nın sadece yavaş bir şekilde değil, çok yavaş olduğunu söyleyebilirim, çünkü gerçek yüksek seviyeli dillerde kolay olan basit problemleri çözemez.

Bana basit bir örnek vereyim. Bir listeyi iki kez haritalandırırken ormansızlaşma denilen basit bir optimizasyon var: işte benim dilimde yazılan kural Felix.

reduce deforest[T,U,V] (f:T->U, g:U->V, x:list[T]): 
  map g (map f x) => map (compose(g,f)) x
;

Bu da şöyle diyor: x ile f listesini eşlemek yerine, sonra tekrar g ile eşlemek, iki liste geçişine ihtiyaç duymak ve çöpleri geçici bir liste yapmak yerine, listeyi işlevlerin kompozisyonuyla eşleştirin.

Bu, Java JVM'nin düşük seviye performansından çok daha önemli olan yüksek seviyeli bir optimizasyondur . Yukarıda verdiğim teknik özellikler sadece hoş sözdizimi değil , kullanıcı tarafından Felix derleyicisine nasıl optimizasyon yapılacağını söyleyen bir talimattır .

Lütfen bana Java'da nasıl bir şey yapılacağını gösterin. Hayır? O zaman Java yavaştır. Çok yavaş. [Haskell bunu otomatik olarak yapabilirim inanıyorum].

Ve "ama Java bir OO dili, bu tür bir optimizasyon geçerli değil" demeden önce ... demek istediğim bu. Java, berbat ve OO olmanın temel nedenlerinden biridir.

JIT optimizasyonu, iyi bir derleyicinin yapabileceği optimizasyon türleriyle rekabet etmeye asla yaklaşamaz.


3
Kodunun orada ne yaptığı hakkında hiçbir fikrim yok. Ve eğer bütün bir dilin yavaş olduğunu söylerseniz, küçük bir optimizasyon
yapamadığı için

7
-1 eski bir soruyu kazıp dilde tartışmalara yol açan bir dili temel almak. Sebepte neyin yanlış olduğuna dair ayrıntılı bir yazı yazmak istersen söyle. Yeni başlayanlar için, OO'yu berbat etmesinin ana nedeni olarak adlandırmak çok objektif değildir ve JVM + JIT'in fiili performansı, dışlanmış olsa bile optimizasyon olsa da çok iyidir.

8
Haskell ana platformumuz için Java'dan sonsuz yavaştır, çünkü söz konusu platforma

1
@ Thorbjørn Ravn Andersen Gerçekten bu gözlem için size +1 verebilmeyi diliyorum.
Patrick Hughes
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.