Mengapa orang masih mengatakan Java lambat? [Tutup]

61

Untuk waktu yang lama di SO dan di tempat lain Jawa memiliki reputasi lambat. Dari lelucon hingga banyak komentar dalam pertanyaan dan jawaban, orang masih percaya bahwa Jawa lambat hanya berdasarkan pengalaman dengannya pada tahun 90-an.

Ini adalah masalah saya: kami telah membantah (sebagian besar) alasan orang percaya bahwa Jawa lambat. Di luar hal-hal kecil, Jawa cukup cepat.

Jadi mengapa orang-orang masih menolak untuk percaya bahwa Jawa cepat sekarang? Apakah itu bagian dari pola pikir mereka bahwa sesuatu yang bukan C / C ++ lambat? Apakah karena orang tidak memeriksa dari waktu ke waktu? Apakah karena orang hanya bias?

TheLQ
sumber
10
Umm, C # juga cepat;)
Evan Plaice
12
umm, tautan itu tidak membuktikan bahwa java lambat.
13
Perasaan saya adalah bahwa Java tidak responsif daripada lambat.
zneak
23
Perpustakaan UI kembung dan mengerikan ..?
dmp
4
Karena JVM bukan bagian dari kernel. Oh, mungkin beberapa orang linux akan menambahkannya di masa depan.
Xiè Jìléi

Jawaban:

131

Ini aplikasinya. Seperti yang Anda perhatikan, kami telah membuktikan, berkali-kali, bahwa dalam skenario yang dibuat, kode Java dapat memenuhi atau bahkan mengalahkan kinerja yang disebut bahasa "pemain" seperti C, C ++, Lisp, VB6, atau JavaScript. Dan ketika dihadapkan dengan bukti seperti itu, lawan yang paling waras dan berpikiran terbuka akan menggantung kepala mereka dalam rasa malu dan berjanji untuk tidak lagi menyebarkan fitnah tersebut.

... tetapi kemudian, mereka menjalankan Eclipse, atau NetBeans, atau Guiffy, atau mengaktifkan dukungan Java di browser mereka, atau mencoba menjalankan aplikasi di ponsel berfitur favorit mereka. Dan mereka menunggu itu menjadi responsif ...

... dan tunggu ...

... dan tunggu ...



... dan tunggu ...







... dan tunggu ...











... dan ...




... apa yang aku janji tidak akan lakukan lagi ? Maaf, pasti tertidur ...

Shog9
sumber
44
Bahkan Java GUI paling sederhana membutuhkan setidaknya 1,5 detik untuk memulai. Itu tidak sedikit.
Peter Boughton
32
Saya tidak pernah berpikir Javascript dianggap sebagai bahasa "pemain".
zneak
11
+1 untuk menyebutkan IDE. Ada perbedaan besar antara daya tanggap Eclipse dan IDE seperti Visual Studio.
mellowsoon
56
Saya punya masalah dengan ini. Firefox ditulis terutama dalam C ++ dan lambat. Apakah itu berarti C ++ lambat? Tidak, itu artinya Firefox lambat. Mengatakan bahwa bahasa itu lambat karena program terbesar yang ditulis di dalamnya lambat adalah bodoh.
TheLQ
13
Jonas, menggunakan contoh paling sederhana yang saya temukan tidak membuat saya seorang programmer yang buruk. Jika Anda memiliki metode ajaib yang menjalankan Java GUI dalam waktu kurang dari sekejap, silakan dan tunjukkan .
Peter Boughton
48

Pertanyaan ini beroperasi pada premis yang salah: di mana ia diperhitungkan, Jawa masih lambat. Yang diperhitungkan adalah algoritma komputasi-berat pada set data besar. Memang, ini dapat dioptimalkan, kadang-kadang setara dengan kode C / C ++, tetapi hanya dengan biaya modularitas dan genericity. Kode C ++ yang efisien dapat dirancang untuk menjadi generik dan dapat digunakan sebagai pustaka tujuan umum. Kode Java tidak bisa. Lihat saja Array.sortmetode yang sangat dioptimalkan , yang menggunakan implementasi berbeda untuk semua tipe fundamental, dan yang varian objeknya masih jauh lebih lambat daripada generik C ++ sortkarena objek-objek ini harus mengirimkan perbandingan kesetaraan secara dinamis.

Memang, hanya dalam waktu optimasi seperti yang dilakukan oleh mesin HotSpot sebenarnya dapat memprediksi target panggilan virtual ini dan upaya inlining. Tapi ini masih lebih lambat daripada panggilan inline langsung yang dikirim dalam sortmetode C ++ .

Seorang mantan kolega saya telah melakukan tolok ukur komparatif dari masalah pada kumpulan data besar ( penghitungan q- gram menggunakan bentuk dinamis) dengan implementasi C ++ templated dan implementasi Java berorientasi objek. Kode Java adalah urutan besarnya lebih lambat dari pada kode C ++.

Tentu ini membandingkan apel dengan jeruk. Tetapi intinya adalah bahwa implementasi Java adalah implementasi terbaik yang mungkin (dalam hal kinerja, mengingat tingkat modularitas yang diperlukan untuk perpustakaan), dan begitu pula implementasi C ++.

Sayangnya, data benchmark tidak tersedia secara bebas tetapi yang lain menemukan angka yang sama ketika membandingkan overhead dari abstraksi runtime. Sebagai contoh, Scott Meyers menulis dalam Effective STL tentang overhead qsortfungsi generik C :

Semacam C ++ hampir selalu memalukan qsort C ketika datang ke kecepatan. [...] Saat runtime, sort membuat panggilan inline ke fungsi perbandingannya ... sementara qsort memanggil fungsi perbandingannya melalui sebuah pointer. [...] Dalam pengujian saya pada vektor sejuta ganda, [sort] berlari hingga 670% lebih cepat ...

Konrad Rudolph
sumber
6
Agar adil, std::sortadalah salah satu kasus di mana sulit untuk melakukan hal serupa dalam bahasa lain. Tetapi sebagian besar proyek yang saya lihat tidak menulis std::sortkode seperti. Mereka menulis kode Java (buruk) dalam C ++, dan mengeluh bahwa mereka memiliki masalah.
Billy ONeal
2
Apakah Anda memiliki laporan untuk membuat cadangan cerita Anda bahwa kumpulan data besar lambat? Saya pernah mendengar orang berbicara tentang melakukan operasi 1-2 juta Daftar entri dan masih cepat. Dan bukankah mengacaukan kumpulan data besar dalam memori (biasanya hal-hal seperti itu dalam DB) sedikit bidang khusus?
TheLQ
8
@TheLQ: sumbernya adalah buku SeqAn karya Gogol-Döring & Reinert. Dan tentang contoh tandingan Anda: operasi apa ? Dan apa yang mereka anggap “cepat”? Juga, entri 1E6 tidak terlalu besar. ;-) Dan apakah ini adalah bidang khusus - tentu saja. Tapi di sinilah Anda membutuhkan perhitungan cepat. Intinya adalah apakah Java cepat , bukan apakah itu “cukup cepat” untuk operasi yang tidak mahal. Pada kumpulan data yang cukup kecil, semuanya cukup cepat.
Konrad Rudolph
2
tidak ada yang namanya implementasi terbaik
jeremy-george
3
@fonzo Mungkin ada perkiraan yang masuk akal. Scratch itu, untuk algoritma yang cukup sederhana dan terdefinisi dengan baik metrik ada bisa menjadi kemungkinan pelaksanaan terbaik. Inilah yang terjadi di sini. Algoritma ini sederhana, dan ada kasus yang terdefinisi dengan baik yang dioptimalkan: waktu yang berjalan pada input yang diberikan.
Konrad Rudolph
28

Karena lambat ... di beberapa aplikasi. Aplikasi desktop harus responsif dari awal dan overhead startup dianggap lambat.

Di sisi lain, jika Anda menjalankan server, tidak masalah jika ada pemanasan (analisis dan kompilasi JIT) - Anda melakukannya sekali di bulan biru sehingga sebagian besar waktu itu tidak dapat dianggap sepenuhnya lambat.

Maciej Piechotka
sumber
Biaya
permulaan
22
Berapa banyak pengguna yang benar-benar tahu tentang sakelar baris perintah?
Walter
17
TheLQ, jika Anda dapat memberikan saklar baris perintah untuk menghapus penundaan startup 1,5s untuk Swing / AWT, silakan lanjutkan dan jawab ini: stackoverflow.com/questions/508723/…
Peter Boughton
6
Dan bagaimana cara men-tweak switch baris perintah untuk menghindarinya dengan mengunci seluruh browser selama 5 detik jika saya mengklik tautan yang berisi hal Java? Itu adalah hal yang membuat orang memanggil Java lambat, dan tidak masalah bahwa sekali dimuat itu benar-benar berjalan agak cepat.
Roman Starkov
21

Saya katakan itu karena ketika orang pertama kali menemukannya, itu lambat. Berdasarkan itu, mereka membentuk kesan itu. Kesan itu tidak mungkin berubah jika mereka tidak menggunakannya, dan mereka tidak menggunakannya karena kesan itu - itu adalah lingkaran setan.

Harus saya akui, saya mendapat kesan bahwa Java lambat, dan ya, itu dari paparan saya sebelumnya. Saya sekarang telah pindah ke berbagai bahasa dan memiliki eksposur yang sangat terbatas ke Jawa sejak itu. Akibatnya, pendapat saya tidak banyak berubah.

Damovisa
sumber
3
+1 - Saya sepenuhnya setuju. Saya membenci Jawa di masa-masa awalnya. NET Framework. Sangat membantu penyebab kode terkelola: Saya menyukai C # dan akhirnya saya menghargai Java juga.
Wizard79
7
Masih membutuhkan waktu satu detik untuk menjalankan hello world. Ini lambat dalam hal waktu startup.
intuited
@intuited Cobalah membangun server di atas C ++ / C # atau bahasa apa pun yang bisa Anda temukan HECK coba buat dengan C dan MAKA dibandingkan dengan JAVA. Masalahnya dengan C adalah bahwa itu cepat jika Anda seorang "Ma, saya menulis kode 10 baris C yang lebih cepat dari Jawa tetapi Anda tidak dapat membacanya" tipe pria. Saat ketika kode C Anda tumbuh, kecepatan Anda melambat;)
AceofSpades
16

Karena dibutuhkan generasi untuk mengubah persepsi orang tentang suatu produk

Ini tidak ada hubungannya dengan seberapa cepat Java menjadi. Dalam benak masyarakat, Jawa adalah pengidentifikasi konstanta yang terkait dengan kata 'lambat'. Ada sedikit, tidak ada yang Anda atau Oracle dapat lakukan tentang itu.

Hanya senang bahwa Oracle belum menghancurkan budaya pemrograman Java (belum) dengan melakukan sesuatu yang gegabah atau bodoh . Seperti membebankan biaya lisensi yang berlebihan untuk menggunakannya. Atau menuntut orang berdasarkan paten perangkat lunak yang sebelumnya dimiliki oleh Sun. ::mendesah::

Saya benci menjadi penentang di sini tetapi, kecuali Oracle dan Google menyelesaikan perjuangan Java dengan persyaratan yang baik, atau Google dipaksa untuk membeli Java dan menjadikannya platform open source yang 'pantas', Java berada di jalur yang tepat untuk menjadi anak di taman bermain yang memiliki kutu. Yaitu, tidak ada yang mau menyentuhnya dengan tiang 20ft.

Catatan: Agar lebih jelas, ketika saya mengatakan generasi saya berbicara dalam istilah orang bukan istilah komputer. Yaitu, sampai orang-orang yang memegang persepsi itu mati karena usia tua atau digantikan oleh generasi yang lebih muda persepsi itu akan berlaku. Pikirkan dalam hal 5 dekade, bukan 5 tahun.

Evan Plaice
sumber
2
Saya pikir Google menggunakan begitu banyak Jawa sehingga mereka membelinya bukan teori yang sepenuhnya tidak layak. Saya mungkin akan senang dengan itu.
Bart van Heukelom
1
@donroby: Dan siapa yang peduli dengan bahasa-bahasa ini? Dalam dua dekade, Jawa akan menjadi bahasa khusus.
aasc
1
@ aasc - Java mungkin sudah usang dalam dua dekade, tetapi LISP tidak sekarang dan tidak akan seperti itu.
Don Roby
2
@ aasc "Bahasa pemrograman biasanya tidak hidup lebih dari satu generasi" Ya Tuhan, 1 juta Delphi Developers itu Pascal, 5 Juta Visual Basic Developers err ... belum lagi Perl, Lisp, Fortran, Cobol, C ++ apakah Anda punya ada justifikasi untuk komentar itu ???
Reallyethical
2
@ Sangat Etis Tidak dalam arus utama. Berapa banyak bisnis yang bergantung pada Lisp, Fortran, Cobol. Dengan lisp, sebagian besar terperangkap dalam dunia akademis dan digunakan sebagai model untuk fitur bahasa lain, hanya sedikit yang menggunakannya untuk proyek-proyek produksi aktual. Fortran telah menjadi bahasa khusus untuk pemodelan matematika berkinerja tinggi dan Cobol hanya tersisa karena industri perbankan sangat takut untuk mengubah kode lama / dapat diandalkan mereka ke platform baru. C ++ adalah pengecualian mencolok karena masih sangat banyak digunakan dan diadopsi saat ini.
Evan Plaice
11

Salah satu alasannya adalah bahwa orang mempercayai apa yang orang lain katakan daripada apa yang mereka lihat .

Menurut apa yang saya diberitahu ketika saya pertama kali memulai pemrograman, Java "lebih lambat" daripada C ++, dan alasan mengapa Java dapat digunakan adalah karena itu "nyaman dan mudah". Sangat umum dipercaya bahwa Java membawa Keselamatan dan kenyamanan, dengan mengorbankan kinerja. Bahkan ketika kemudian C # ditemukan orang percaya itu lebih cepat dari Jawa karena itu "asli".

Tetapi kebenaran yang orang lihat tanpa merasakannya, adalah bahwa, gerhana, IDE yang dibangun dengan Java, benar-benar IDE TERCEPAT di kelas. Saya telah menggunakan hampir semua aliran IDE utama, yang dari MS dan GNU, Borland ..., gerhana adalah raja mutlak, dari IDE, sebagian besar karena cepat.

Alasan lain adalah waktu start up yang lama .

Java tidak cocok untuk mengembangkan aplikasi kecil yang tetap berada di system tray, menghabiskan sedikit memori, memunculkan dialog yang mengingatkan Anda untuk istirahat; atau notepad yang Anda gunakan untuk membuka file teks, membacanya dan menutupnya. Itu harus digunakan pada sesuatu yang BESAR, seperti server web yang selalu ada, memanfaatkan sumber daya komputasi Anda secara optimal, menanggapi jutaan permintaan setiap jam. Atau IDE seperti gerhana yang mengelola ribuan file ruang kerja. Anda tidak tahu aplikasi Java Anda cepat sampai berjalan setidaknya beberapa jam, saya percaya.

tactoth
sumber
1
Isee kelambatan sepanjang waktu.
aasc
28
Gerhana cepat? LMAO
finnw
2
@finnw - itu adalah jika Anda menyetelnya. Keluar dari kotak dan dengan semua plug in, jelas itu tidak akan cepat. Jelas itu tidak pernah bisa dibandingkan dengan vim atau jedit atau Notepad ++, tetapi argumen dan pernyataan "cepat" atau "lambat" ini tidak ada artinya tanpa konteks.
luis.espinal
2
@luis Anda dapat membandingkannya dengan Delphi 7, yang saya tidak percaya jauh lebih sederhana daripada Eclipse. Dan Delphi 7 hampir secepat notepad. Ini gila.
Roman Starkov
4
@finnw, untuk IDE dengan zillions plugin itu cukup cepat :)
8

@ Bigown "Mengapa orang masih mengatakan Java lambat?"

Karena mereka bodoh. Karena mereka tidak memiliki pengalaman kerja, tetapi berpikir mereka adalah penjelmaan hidup dari Dikjstra atau kedatangan kedua Linus Torvald, oh saya tidak tahu. Alasan untuk mengatakan hal terbelakang seperti itu sangat banyak, tetapi biasanya kebodohan, fanboyisme subyektif yang tidak berpikiran, dan pelacur perhatian emosional tampaknya ada di belakang mereka.

Mari kita bahas ini sehingga Anda dapat melihat kebenaran dari apa yang baru saja saya katakan di atas:

Pertama, apa yang lambat, dalam konteks apa, untuk apa, dalam kondisi apa, dengan tujuan rekayasa / ilmiah / bisnis apa (untuk mengatakan bahwa itu menyebalkan bukan salah satunya.) Setiap orang yang mengatakan "X lambat" untuk teknologi apa pun X, atau hanya "X adalah Y" di mana Y adalah beberapa jenis pernyataan negatif, tanpa menjawab pertanyaan di atas harus dianggap sebagai orang bodoh. Pernyataan seperti itu tidak memiliki tempat dalam rekayasa. Mungkin dalam politik dan chat room remaja, tetapi tidak pada rekayasa.

Kedua, sebagian besar dari orang-orang bodoh yang sesat ini berteriak bahwa Jawa lambat karena ZOMG, gerhana mereka membutuhkan waktu lama untuk menyala (wah, muat barang dengan semua plug plug, dan tebak apa yang terjadi.) Sebagian besar dari orang-orang bodoh ini bahkan tidak tahu bagaimana untuk menyetel jvm agar gerhana beroperasi cepat (atau untuk aplikasi Java apa pun dalam hal ini). Artinya, mereka tidak memiliki petunjuk tentang penyetelan kinerja, yang merupakan kenyataan tidak hanya untuk Java, tetapi untuk sistem non-sepele, baik itu perangkat keras atau perangkat lunak. Jadi di sana, mereka melucuti diri mereka sendiri untuk validitas teknis apa pun dalam membuat pernyataan tanpa berpikir seperti itu.

Ketiga, mari kita pertimbangkan untuk apa sebagian besar pembangunan Java: back end OLTP pertama dan terutama; sistem pemantauan datang kedua. Kedua jenis sistem dimaksudkan untuk berjalan dalam kelompok, dan untuk menjalankan tanpa gangguan selama berminggu-minggu jika tidak berbulan-bulan. Apakah benar-benar penting bahwa gerhana kecil atau aplikasi mainan Anda membutuhkan satu atau dua menit untuk memuat ketika tujuan aplikasi Java NYATA adalah untuk menjalankan untuk jangka waktu yang lama? Konteks, orang, konteks.

Terakhir, tulang punggung OLTP di Google dan Ebay dijalankan di Jawa. Saya akan menganggap itu sebagai bukti dengan kontradiksi bahwa Jawa tidak lambat (setidaknya untuk kondisi yang penting, tidak untuk eksperimen mainan kecil, tolok ukur dan bukti anekdotal yang tidak dapat diverifikasi yang dilakukan secara khusus dengan tujuan untuk mengatakan "kalau X lambat, itu menyebalkan."

Ada teknik, dan ada fanboyisme. Coba tebak pernyataan kategori seperti apa yang dimiliki?

luis.espinal
sumber
19
Jika saya harus menyetel JVM saya agar Java dapat berjalan dengan cepat, sementara saya tidak harus menyetel apa pun (kecuali -O2) untuk membuat C ++ berjalan dengan cepat, maka Java lambat.
David Thornley
@ David - Pernyataan yang jelas. Siapa pun tahu bahwa Java lebih lambat daripada C ++. Itu tidak secara logis berarti lambat. Penyebutan flag gcc tidak memberikan validitas komentar. Ini hanya menyatakan bahwa it is slower than something else.jaguar lebih lambat dari cheetah. Apakah itu membuat yang pertama slow? Coba beberapa obyektivitas rekayasa dan tanyakan pada diri sendiri ini: dapatkah seseorang secara logis menyatakan arbitrarily,, bahwa sesuatu itu slowhanya karena it is slowerdaripada sesuatu yang lain without mentioning a context of operationsyang menentukan apa fast enoughdan untuk apa? Bisakah Anda secara logis?
luis.espinal
5
@ luis.espinal: Saya merespons alasan Anda # 2: bahwa orang mengatakan Jawa lambat karena, menurut Anda, mereka gagal menyesuaikan Java. Harap perhatikan juga penggunaan "fast acceptable" saya. Tampaknya bagi saya bahwa sesuatu yang tidak "cepat dapat diterima" lambat, dan bagi saya tampaknya sesuatu yang secara rutin diklaim orang lambat mungkin tidak cepat.
David Thornley
4
@luis espinal Anda terdengar seperti Kant :) Orang-orang di sini telah membuat asumsi implisit bahwa lambat berarti lebih lambat dibandingkan dengan bahasa praktis lainnya yang siap-produksi seperti C ++. (Ingat fisika ??) ketika Anda mengukur energi potensial, Anda selalu mengukurnya relatif terhadap beberapa tanah. Sekarang dengan tata bahasa Anda, "X bodoh" tidak berdasar. dan "X lebih bodoh daripada Knuth" tidak membuat X benar-benar bodoh, karena hampir semua orang bisa menjadi X di sini. Saya setuju memanggil lang lambat bukan elit, tetapi orang-orang di sini yang mengatakan bahwa itu bukan "bodoh", tetapi kebetulan telah membuat asumsi yang disepakati secara implisit.
yati sagade
1
@luis hahaa .. pengamatan yang bagus. (Keyakinan saya bahwa Anda adalah reinkarnasi dari Kant telah menjadi lebih solid;)) Dan diskusi seperti itu berakhir dengan perang api dan penekanan tombol yang tidak produktif ... Menurut saya, orang harus selalu tetap berpegang pada apa yang tampaknya seperti alat terbaik untuk mengatasi pekerjaan di tangan. Setuju, Kant2? : P
yati sagade
8

Karena itu, bisakah kita menutup topik ini sekali dan selamanya?

https://days2011.scala-lang.org/sites/days2011/files/ws3-1-Hundt.pdf [gulir ke bawah ke tabel, Java 3,7-12,6 kali lebih lambat daripada C ++, penelitian oleh karyawan Google]

PS: Jika tidak, beri nama saya setidaknya satu aplikasi Java awal, belum pernah melihatnya sebelumnya.

Coder
sumber
6
Silakan meringkas isi PDF dalam jawaban Anda.
Adam Lear
1
Makalah ini sangat jauh dari standar penelitian ilmiah. Ia bahkan tidak membandingkan algoritma dan optimisasi yang persis sama di semua bahasa. "E. Java Tunings Jeremy Manson membawa kinerja Java setara dengan versi C ++ asli. Versi ini disimpan di direktori java_pro. Perhatikan bahwa Jeremy sengaja menolak untuk mengoptimalkan kode lebih lanjut, banyak optimasi C ++ akan berlaku untuk Java versi juga. " jeremymanson.blogspot.com/2011/06/scala-java-shootout.html
Piotr Kolaczkowski
6

TMHO, ini karena waktu yang diperlukan untuk memulai VM di browser. Jika suatu aplikasi mulai berjalan lambat, orang hanya akan mengingatnya. Karena, waktu mulai yang lama benar-benar menjengkelkan. Benarkah. Salah satu rekan kerja saya mengatakan kepada saya bahwa dia tidak menggunakan Firefox karena terlalu lambat. (?!?). Tapi, Ya, Oke, di windows, Firefox membutuhkan banyak waktu untuk muncul. Menurutnya, aplikasi ini lambat, ia membuat pikiran tentang kecepatan umum itu.

Pierre Watelet
sumber
Itu sebabnya Mozilla telah menghabiskan banyak upaya untuk membuat Firefox memulai dengan cepat ...
Spudd86
2
Mungkin berubah seperti Windows. Ya, setelah Anda masuk, Anda melihat desktop dengan sangat cepat, tetapi kemudian Anda masih harus menunggu beberapa saat untuk mendapatkan responsif.
Bart van Heukelom
6

Lambat dibandingkan dengan apa? Saya sedang berpikir untuk berubah dari Ruby biasa ke JRuby (ruby berbasis Java) karena saya dengar lebih cepat.

Andrew Grimm
sumber
1
JRuby adalah lebih cepat dari Ruby, bahkan dalam 1,9. Namun, celah itu semakin dekat.
Dan Rosenstark
2
+1 untuk menunjukkan masalah besar. Meskipun saya akan mengatakan OP mungkin membandingkan ke C # atau C ++.
Billy ONeal
@Yar, Anda menunjukkan bahwa CRuby mengejar ketinggalan dengan JRUby?
6

Pendapat adalah opini, dan fakta adalah fakta.

Berikut ini fakta dari Google Code Jam, yang bisa dibilang menantang programmer untuk menyelesaikan masalah komputasi yang sulit dalam waktu singkat, yang berarti bahwa kinerja bahasa yang mereka gunakan memainkan peran penting:

Selama edisi terakhir (2009, 2010, 2011), sekitar 75% dari programer yang tiba di babak final menggunakan C ++, dibandingkan dengan sekitar 15% menggunakan Java.

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

Daniel Scocco
sumber
3
Itu hanya benar-benar membuktikan bahwa Java dapat mencapai puncak kompetisi yang berfokus pada kecepatan, tetapi kebanyakan orang memilih C ++.
Adam Lear
3
"memecahkan masalah komputasi yang sulit dalam waktu singkat" - apa, waktu yang diperlukan untuk menulis kode, atau waktu yang diperlukan untuk menjalankan kode? Apapun, fakta Anda adalah - fakta - apa hubungannya dengan pertanyaan itu? Apakah Anda menarik kesimpulan dari fakta Anda?
occulus
yang mungkin hanya karena 75% orang menulis program yang membuat putaran final berpikir Java lambat tanpa pernah mengujinya dan karena itu menggunakan C ++ karena mereka percaya itu cepat tanpa pernah mengujinya.
jwenting
4

Sekitar tahun 1997 saya menggunakan HP Vectra VE (200 MHz) dan Windows 95. Sebagian besar aplikasi berjalan sangat cepat dalam hal ini, tetapi kemudian saya mencoba beberapa aplikasi yang ditulis dalam Java (IDE, jika saya ingat dengan benar). Mereka sangat lambat, setidaknya bagian-bagian GUI dari mereka. Mereka membutuhkan waktu lama untuk memulai, dan elemen GUI (misalnya menu) tidak terlalu responsif - ada penundaan dalam umpan balik visual. Juga, karena aplikasi Java GUI memiliki (memiliki) tampilan yang agak berbeda, saya belajar mengaitkan tampilan ini (dan Java) dengan kinerja yang buruk.

Andreas Rejbrand
sumber
2
Saya ingat tahun 1997! Tahun yang hebat, meskipun banyak anggur - dan pengamatan - dari tahun 1997 tidak lagi dapat digunakan.
Dan Rosenstark
1
Saya ingat tahun 1997 juga. Windows macet setiap saat dan perlu me-reboot ketika menginstal driver. Sampah.
Dan Anda tidak mengubah pendapat Anda tentang 1997? Apakah Anda memperhatikan bahwa 2011 sama sekali berbeda dari 1997?
Jesper
5
Analisis saya dari data ini adalah bahwa 1997 mengisap.
JasonTrue
4

Itu tergantung apa yang Anda maksud sebagai lambat.

Pertama-tama, java telah membuat banyak kemajuan baru-baru ini dan sangat cepat dalam banyak kasus. Tapi:

  • Java lambat pada saat startup, karena Anda harus memuat JVM sebelum melakukan apa pun.
  • Beberapa fitur keamanan dapat mematikan kinerja dalam beberapa kasus. Cek batas dengan akses acak adalah contoh.
  • Membuat sesuatu yang sangat cepat di java harus bekerja melawan JVM (untuk memanfaatkan garis cache sebagai contoh).
  • Kurangnya metaprogramming menyiratkan hukuman pada waktu berjalan dengan masing-masing abstraksi, sehingga kinerja datang ke biaya desain dalam banyak kasus.
  • Java hampir tidak dapat memastikan kendala waktu nyata - dengan desain - dan ini dapat dianggap sebagai «lambat» oleh beberapa orang.

Omong-omong, java dalam beberapa kasus, lebih cepat dari vanilla C / C ++. Tapi bahasa mereka memberi Anda alat untuk mengubah mereka.

Java adalah bahasa pemrograman yang ditujukan untuk produktivitas. Sekarang cukup cepat untuk sebagian besar aplikasi, tetapi tidak cukup untuk beberapa aplikasi lainnya.

Secara umum, lambatnya Java adalah argumen yang terlalu sering digunakan karena tidak umum dalam kebanyakan kasus.

deadalnix
sumber
2

Sederhana, kode Java kanonik cenderung setara dengan atau lebih cepat daripada kode C / C ++ / D sederhana. Sederhana, kode kanonik cenderung melakukan banyak alokasi memori yang tidak perlu, tidak secara khusus disetel ke arsitektur CPU apa pun, tidak memiliki banyak optimasi tingkat rendah yang dilakukan untuk itu, dll. Java HotSpot GC tidak kekurangan yang menakjubkan, dan optimasi VM cenderung menjadi lebih baik daripada apa yang bisa dilakukan oleh kompiler statis.

Di sisi lain, jika Anda benar - benar membutuhkan kinerja dan bersedia untuk mengatur barang untuk mendapatkannya, C / C ++ / D memberikan lebih banyak peluang untuk ini. Anda tidak dapat menggunakan assembler inline di Jawa. Anda tidak dapat menggunakan trik hukuman jenis kotor untuk memperlakukan angka floating point sebagai array bit. Anda tidak dapat menggunakan skema manajemen memori khusus yang mungkin lebih cepat daripada GC untuk kasus penggunaan khusus Anda. Anda tidak dapat mengalokasikan hampir sama banyaknya pada stack di Java seperti pada C / C ++ / D. Di Jawa, satu-satunya cara untuk mendapatkan apa pun yang kira-kira setara dengan fungsi tingkat tinggi adalah dengan antarmuka dan penjilidan runtime. Dalam D dan (saya pikir, koreksi saya jika saya salah) C ++, Anda dapat melewatkan fungsi ke templat, memungkinkan pengikatan terjadi pada waktu kompilasi tanpa kehilangan fleksibilitas.

dsimcha
sumber
5
Bisakah Anda sumber komentar itu? Yaitu, di mana ada tolok ukur yang menunjukkan kode kanonik dalam setiap bahasa yang menunjukkan Java lebih cepat?
Billy ONeal
1

Poin lain untuk "lambatnya" Java adalah runtime 64bit.

Saya pernah mendengar beberapa orang mengeluh bahwa Java sangat lambat untuk mereka di komputer 64bit. Ternyata, 64bit Java runtime menggunakan server JVM yang mengkompilasi seluruh program sebelum memulai.

HERE adalah penjelasan mengapa VM 64bit mulai lebih lambat.

Misalnya pada Windows:

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)  
AndrejaKo
sumber
3
Server VM lebih lambat untuk memulai tetapi tidak mengkompilasi seluruh program sebelum memulai. Tidak bisa, kelas dimuat dengan malas dan berpotensi melalui refleksi, jadi tidak ada cara untuk mengetahui terlebih dahulu kode bytec apa yang perlu dikompilasi secara native.
Dan Dyer
@Dan Dyer Setelah beberapa penelitian, sepertinya saya salah mengerti apa yang saya baca. Maksud saya, Server VM melakukan lebih banyak pengoptimalan sementara klien dioptimalkan untuk mulai cepat dan penggunaan memori yang lebih kecil.
AndrejaKo
VM server dioptimalkan untuk proses yang berjalan lama, karena itu memuat lebih banyak yang mengarah pada waktu startup yang lebih lama dan cenderung menggunakan lebih banyak RAM. Klien VM dioptimalkan untuk jejak kaki yang lebih rendah dan waktu startup, tetapi mungkin memiliki kinerja runtime yang lebih rendah.
jwenting
0

Namun, kinerja Jawa sangat subyektif, persepsi mengapa Jawa lambat sebagian besar karena alasan yang dicatat oleh orang lain: sebagian besar persepsi masyarakat tentang sesuatu diwarnai oleh pengalaman mereka sebelumnya dan Jawa tidak selalu merupakan bahasa yang dioptimalkan dengan baik di bawah tudung. Demikian pula, vanila Eclipse bukan IDE yang cepat untuk bekerja dan artinya jika tidak ada tanggapan jika dibandingkan dengan IDE seperti Visual Studio.

Meskipun demikian, di luar masalah UI yang dimiliki Java saat start-up, itu cukup cepat untuk sebagian besar aplikasi. Jika Anda mencari, Anda dapat menemukan artikel yang membandingkannya dengan bahasa lain dan sebagian besar hasil yang disajikan memasukkannya ke dalam rentang di mana ia hanya akan menjadi masalah ketika Anda berurusan dengan set data utama.

Di bidang bioinformatika digunakan sedikit karena didukung dengan baik dan sudah ada basis instalasi untuk, salah satu kelebihan yang dimiliki Java adalah Anda dapat melakukan pengembangan yang cukup cepat dengan itu yang tidak dapat Anda lakukan dengan C Jika Anda melihat bahasa yang digunakan untuk bioinformatika (saya pribadi menggunakan R, Python, dan Java secara teratur), Anda akan mencatat bahwa tidak ada satu pun di antara mereka yang tercepat dan tidak biasa bagi set data dalam bioinformatika untuk mencapai 100-an. dari gigabyte informasi. Pada akhirnya, waktu manusia masih lebih berharga dan meskipun perbedaan kecepatannya terlihat, ukuran set data cenderung cukup besar sehingga tetap berjalan dalam semalam.

Jika lebih mudah untuk menulis UI cepat di Jawa itu cukup seperti persepsi kecepatan akan jatuh dari radar karena kebanyakan orang tidak mendorong bahasa cukup bahwa kecepatan benar-benar masalah setiap hari.

rjzii
sumber
0

Untuk melempar koin yang tidak berharga, saya menemukan bahwa webapp Java umumnya memiliki waktu startup dan respons yang lama, di mana menurut saya Python atau Ruby akan melakukan yang lebih baik.

Saya menggunakan Eclipse untuk sebagian besar pemrograman saya, dan saya harus mengatakan bahwa Java sama cepatnya dengan yang lain, jika tidak lebih cepat berjalan secara lokal dan "mandiri".

thomas
sumber
1
Di web, waktu memulai tidak terlalu penting. Konsumsi sumber daya dan skalabilitas yang paling penting.
Berin Loritsch
-7

Saya akan mengatakan bahwa Java sangat lambat, bukan hanya lamban, karena gagal menyelesaikan masalah sederhana yang mudah dalam bahasa tingkat tinggi yang sebenarnya.

Biarkan saya memberi contoh sederhana. Ada optimasi sederhana yang berlaku ketika memetakan daftar dua kali, yang disebut deforestasi: di sini adalah aturan untuk itu ditulis dalam bahasa saya 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
;

yang mengatakan: alih-alih memetakan daftar x dengan f, lalu memetakannya kembali dengan g, membutuhkan dua traversal daftar dan membuat daftar sementara sampah, hanya memetakan daftar dengan komposisi fungsi.

Ini adalah optimasi tingkat tinggi yang jauh lebih signifikan daripada kinerja tingkat rendah Java JVM. Spesifikasi yang saya berikan di atas bukan hanya sintaks yang cantik, ini adalah instruksi yang ditulis oleh pengguna yang memberitahu kompiler Felix bagaimana melakukan optimasi.

Tolong tunjukkan saya bagaimana melakukan hal semacam ini di Jawa. Tidak? Kemudian Java lambat. Sangat lambat. [Haskell dapat melakukan ini secara otomatis, saya percaya].

Dan sebelum Anda mengatakan "tetapi Java adalah bahasa OO, optimasi semacam ini tidak berlaku" .. baik itulah maksud saya. Java menyebalkan, dan menjadi OO adalah salah satu alasan utama.

Optimalisasi JIT tidak akan pernah bisa bersaing dengan jenis optimisasi yang dapat dilakukan oleh kompiler yang baik.

Yttrill
sumber
3
Saya sama sekali tidak tahu kode apa yang Anda lakukan di sana. Dan jika Anda mengatakan bahwa seluruh bahasa lambat hanya karena tidak dapat melakukan satu optimasi kecil maka ada masalah lain di sini
TheLQ
7
-1 menggali pertanyaan lama dan memukul bahasa dengan argumen yang sangat lemah. Beri tahu saya jika Anda ingin menulis rincian tentang apa yang salah dengan alasan Anda. Sebagai permulaan, penamaan OO sebagai alasan utama itu menyebalkan tidak sangat objektif dan kinerja de facto dari JVM + JIT sangat baik, bahkan jika ada optimasi yang ditinggalkan.
8
Haskell jauh lebih lambat daripada Java untuk platform utama kami, karena tidak porting ke platform tersebut, jadi Haskell menyebalkan ...
1
@ Thorbjørn Ravn Andersen Saya benar-benar berharap saya bisa memberi Anda +1 untuk pengamatan itu.
Patrick Hughes