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?
java
performance
TheLQ
sumber
sumber
Jawaban:
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 ...
sumber
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.sort
metode yang sangat dioptimalkan , yang menggunakan implementasi berbeda untuk semua tipe fundamental, dan yang varian objeknya 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 daripada panggilan inline langsung yang dikirim dalam
sort
metode 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
qsort
fungsi generik C :sumber
std::sort
adalah salah satu kasus di mana sulit untuk melakukan hal serupa dalam bahasa lain. Tetapi sebagian besar proyek yang saya lihat tidak menulisstd::sort
kode seperti. Mereka menulis kode Java (buruk) dalam C ++, dan mengeluh bahwa mereka memiliki masalah.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.
sumber
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.
sumber
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.
sumber
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.
sumber
@ 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?
sumber
-O2
) untuk membuat C ++ berjalan dengan cepat, maka Java lambat.it is slower than something else.
jaguar lebih lambat dari cheetah. Apakah itu membuat yang pertamaslow
? Coba beberapa obyektivitas rekayasa dan tanyakan pada diri sendiri ini: dapatkah seseorang secara logis menyatakanarbitrarily
,, bahwa sesuatu ituslow
hanya karenait is slower
daripada sesuatu yang lainwithout mentioning a context of operations
yang menentukan apafast enough
dan untuk apa? Bisakah Anda secara logis?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.
sumber
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.
sumber
Lambat dibandingkan dengan apa? Saya sedang berpikir untuk berubah dari Ruby biasa ke JRuby (ruby berbasis Java) karena saya dengar lebih cepat.
sumber
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/
sumber
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.
sumber
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:
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.
sumber
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.
sumber
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:
sumber
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.
sumber
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".
sumber
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:
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.
sumber