it-swarm-id.com

Mengapa orang masih mengatakan Java lambat?

Untuk waktu yang lama di SO dan di tempat lain Java memiliki reputasi lambat. Dari lelucon ke banyak komentar dalam pertanyaan dan jawaban, orang masih percaya Java lambat berdasarkan pengalaman dengan itu di tahun 90an.

Ini adalah masalah saya: kami memiliki menolak (sebagian besar) alasan yang orang percaya Java lambat. Di luar hal-hal kecil, Java cukup cepat.

Jadi mengapa orang masih menolak untuk percaya Java 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?

61
TheLQ

Ini aplikasinya. Seperti yang Anda perhatikan, kami memiliki terbukti, berulang kali, bahwa dalam skenario yang dibuat-buat Java kode dapat memenuhi atau bahkan mengalahkan kinerja dari apa yang disebut "performant" bahasa seperti C, C++, LISP, VB6, atau JavaScript. Dan ketika disajikan dengan bukti seperti itu, lawan yang paling waras dan berpikiran terbuka akan menggantung kepala mereka dalam rasa malu dan berjanji tidak akan pernah 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 fitur favorit mereka. Dan mereka menunggu untuk itu menjadi responsif ...

...dan tunggu...

...dan tunggu...



...dan tunggu...







...dan tunggu...











...dan...




... apa yang saya berjanji tidak akan lakukan lagi? Maaf, pasti tertidur ...

131
Shog9

Pertanyaan ini beroperasi pada premis yang salah: di mana ia diperhitungkan, Java masih lambat. Di mana ia dihitung 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 kemurahan hati. Kode C++ yang efisien dapat dirancang untuk menjadi generik dan dapat digunakan sebagai pustaka tujuan umum. Java kode tidak bisa. Lihat saja metode Array.sort Yang sangat dioptimalkan, yang menggunakan implementasi berbeda untuk semua tipe fundamental, dan varian objek yang masih jauh lebih lambat daripada generik C++ 'sort karena 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 dari panggilan yang digarisbawahi secara langsung yang dikirim dalam metode C++ sort.

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

Tentu saja 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 juga implementasi C++.

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

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 ...

48
Konrad Rudolph

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

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

28

Saya akan mengatakan 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.

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

21
Damovisa

Karena dibutuhkan satu generasi untuk mengubah persepsi orang tentang suatu produk

Ini tidak ada hubungannya dengan seberapa cepat Java menjadi. Dalam pikiran orang Java adalah pengidentifikasi konstanta yang terkait dengan kata 'lambat'. Ada sedikit, tidak ada yang Anda atau Oracle dapat melakukannya.

Hanya senang bahwa Oracle belum menghancurkan Java budaya pemrograman (belum) dengan melakukan apapun terburu-buru atau bodoh . Seperti membebankan biaya lisensi yang berlebihan untuk menggunakannya. Atau menggugat orang berdasarkan paten perangkat lunak yang sebelumnya dimiliki oleh Sun. :: sigh ::

Saya benci menjadi penentang di sini tetapi, kecuali Oracle dan Google menyelesaikan perjuangan Java dengan ketentuan yang bagus, atau Google terpaksa membeli Java dan menjadikannya sebagai platform open source 'yang tepat', Java sudah cukup baik untuk menjadi anak di taman bermain yang memiliki kutu. Yaitu, tidak ada yang mau menyentuhnya dengan tiang 20 kaki.

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.

16
Evan Plaice

Salah satu alasannya adalah 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 karena "nyaman dan lebih mudah ". Sangat umum dipercaya bahwa Java membawa Keamanan dan kenyamanan, dengan mengorbankan kinerja. Bahkan ketika nanti C # ditemukan, orang-orang percaya itu lebih cepat daripada Java karena itu "asli".

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

Alasan lainnya adalah waktu mulai yang lama.

Java tidak cocok untuk mengembangkan aplikasi kecil yang tetap 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. Ini 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 Eclipse yang mengelola ribuan file ruang kerja. Anda tidak tahu Anda Java cepat hingga aplikasi berjalan setidaknya beberapa jam, Aku percaya.

11
tactoth

@bigown "Mengapa orang masih mengatakan Java lambat?"

Karena mereka bodoh. Karena mereka tidak memiliki pengalaman kerja, tetapi berpikir mereka adalah inkarnasi 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 dia menyebalkan bukan salah satu dari mereka.) Setiap orang yang mengatakan " X lambat "untuk teknologi X apa pun, atau sekadar" X adalah Y "di mana Y adalah sejenis pernyataan negatif, tanpa menjawab pertanyaan apa pun 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 salah arah ini berteriak tentang Java lambat karena ZOMG, Eclipse mereka membutuhkan waktu lama untuk menyala (wah, muat barang dengan semua plug plug, dan tebak apa yang terjadi.) Kebanyakan dari orang-orang bodoh ini bahkan tidak tahu cara menyetel jvm agar Eclipse beroperasi cepat (atau untuk aplikasi Java aplikasi untuk hal ini). Yaitu, mereka tidak memiliki petunjuk tentang penyetelan kinerja, yang adalah 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 setiap validitas teknis dalam membuat pernyataan tanpa berpikir seperti itu.

Ketiga, mari kita pertimbangkan untuk apa sebagian besar Java pengembangan untuk: 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 penting jika Eclipse atau aplikasi mainan kecil Anda membutuhkan satu atau dua menit untuk memuat saat tujuan NYATA Java adalah untuk menjalankan untuk jangka waktu yang lama? Konteks, orang, konteks.

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

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

8
luis.espinal

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 adalah 3.7 -12,6 kali lebih lambat dari C++, penelitian oleh karyawan Google]

P.S .: Jika tidak, beri nama saya setidaknya satu tajam Java aplikasi untuk awal, belum melihat satu sebelumnya.

8
Coder

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

6
Andrew Grimm

Pendapat adalah opini, dan fakta adalah fakta.

Berikut ini adalah fakta dari Google Code Jam, yang bisa dibilang menantang programmer untuk memecahkan 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/

6
Daniel Scocco

TMHO, ini karena waktu yang diperlukan untuk memulai VM di peramban. Jika sebuah aplikasi mulai lambat, orang hanya akan mengingatnya. Karena, waktu mulai yang lama benar-benar menjengkelkan. Sungguh. Satu dari rekan kerja saya mengatakan kepada saya bahwa dia tidak menggunakan Firefox karena terlalu lambat. (?!?). Tapi, Ya, ok, di windows, Firefox membutuhkan banyak waktu untuk muncul. Menurutnya, aplikasi ini lambat, dia memutuskan tentang kecepatan umum itu.

6
Pierre Watelet

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 GUI dari mereka. Mereka butuh waktu lama untuk memulai, dan elemen GUI (misalnya menu) tidak terlalu responsif - ada keterlambatan dalam umpan balik visual. Juga, karena Java Aplikasi GUI memiliki (memiliki) tampilan yang agak berbeda, saya belajar mengaitkan tampilan ini (dan Java) dengan kinerja yang buruk.

4
Andreas Rejbrand

Itu tergantung apa yang Anda maksud sebagai lambat.

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

  • 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.
  • Buat 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.

Ngomong-ngomong, Java dalam beberapa kasus, lebih cepat dari Vanilla C/C++. Tetapi bahasa mereka memberi Anda alat untuk men-tweak 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.

4
deadalnix

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

Di sisi lain, jika Anda benar-benar membutuhkan kinerja dan bersedia untuk menyetel 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 sebanyak pada tumpukan di Java seperti di C/C++/D. Dalam Java satu-satunya cara untuk mendapatkan sesuatu yang kira-kira setara dengan fungsi urutan yang lebih tinggi adalah dengan antarmuka dan pengikatan runtime. Dalam D dan (saya pikir, koreksi saya jika saya salah) C++, Anda dapat melewatkan fungsi ke template, memungkinkan pengikatan terjadi pada waktu kompilasi tanpa kehilangan fleksibilitas.

2
dsimcha

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

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

DI SINI adalah penjelasan mengapa 64bit VM dimulai 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)  
1
AndrejaKo

Untuk melempar koin yang tidak berharga, saya menemukan bahwa Java webapps umumnya memiliki waktu startup dan respons yang lama, di mana bagi saya tampaknya Python atau Ruby akan 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 "standalone".

0
thomas

Performa Java sangat subjektif namun, persepsi mengapa Java lambat sebagian besar karena alasan yang dicatat oleh orang lain: sebagian besar orang persepsi tentang sesuatu diwarnai oleh pengalaman mereka sebelumnya dengan Java tidak selalu merupakan bahasa yang dioptimalkan dengan baik di bawah tenda. Demikian juga, Vanilla Eclipse tidak bisa IDE cepat untuk digunakan dan artinya jika dalam hal responsif dibandingkan dengan IDE seperti Visual Studio.

Meskipun demikian, di luar masalah UI yang Java miliki 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, salah satu kelebihan yang dimiliki Java adalah Anda dapat melakukan pengembangan yang cukup cepat dengan itu Anda dapat ' t 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 untuk data menetapkan bioinformatika untuk mencapai 100-an gigabyte informasi. Pada akhirnya, waktu manusia masih lebih berharga dan walaupun perbedaan kecepatannya terlihat, ukuran set data cenderung cukup besar sehingga tetap berjalan dalam semalam.

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

0
rjzii