Rumah >Java >javaTutorial >Bolehkah Bahasa Mesin Maya Mengungguli Bahasa Asli: Memeriksa Perbezaan Prestasi Antara C dan Java/C#?
Kod Asli C lwn. Mesin Maya Java/C#: Memahami Perbezaan Prestasi
Walaupun andaian logik bahawa bahasa seperti Java dan C#, yang dijalankan pada mesin maya dan bukannya kod asli, tidak dapat menandingi kelajuan C, kemajuan terkini telah mencabar tanggapan ini. Bagaimanakah bahasa mesin maya boleh mengatasi bahasa ibunda?
JIT lwn. Kompilasi Statik
Pengkompil Just-in-time (JIT) menukar kod bait kepada kod asli semasa masa jalan. Walau bagaimanapun, proses ini memerlukan kos: Penyusun JIT tidak dapat melengkapkan semua kompilasi sekaligus, tidak seperti penyusun statik yang menghasilkan binari asli penuh. Untuk aplikasi tertentu, kompilasi statik akan mengatasi kompilasi JIT.
C Metaprogramming
C 's template metaprograming membenarkan pemprosesan kod semasa penyusunan, menghasilkan hampir sifar kod masa jalan. Walaupun kesan ciri ini pada aplikasi dunia sebenar masih belum dapat direalisasikan sepenuhnya, ia adalah satu pertimbangan yang ketara.
Penggunaan Memori C Asli
Penggunaan memori C berbeza daripada Java/C#: akses penuding terus ke memori boleh memberikan kelebihan prestasi yang ketara berbanding objek Java/C# yang memerlukan pengumpulan sampah dan pemprosesan masa jalan tambahan. Selain itu, kawalan C ke atas peruntukan memori dan RAII menjadikannya lebih cekap untuk mengendalikan operasi intensif memori.
C /CLI lwn. C#/VB.NET
C /CLI, pelaksanaan C yang dihoskan oleh .NET, mendapat manfaat daripada teknik pengoptimuman lanjutan pengkompil asli C. Akibatnya, kod C /CLI kadangkala boleh berprestasi lebih baik daripada kod C# yang setara disebabkan oleh pengoptimuman JIT yang lebih agresif yang didayakan oleh peletakan kod strategik C.
Kesimpulan
Walaupun C# dan Java menawarkan kemudahan pembangunan dan perpustakaan yang luas, C cemerlang dalam situasi yang menuntut kuasa mentah, pengoptimuman prestasi muktamad, ciri bahasa lanjutan dan kebolehpercayaan yang tidak berbelah bahagi, terutamanya untuk aplikasi kependaman rendah dan sensitif kependaman.
EDIT (2011-06-06): Pengalaman Saya dengan C#/.NET
Berdasarkan lima bulan pengalaman pengekodan C# profesional, saya mendapati bahawa walaupun C#/Java sesuai untuk menghasilkan kod yang boleh dilaksanakan, ia gagal apabila menyasarkan kualiti kod yang luar biasa. Pengehadan generik, RAII dan kebolehubahan menjadikannya mencabar untuk mencapai tahap kebolehpercayaan yang sama seperti C .
Selain itu, peralihan kembali ke C untuk aplikasi bahagian pelayan kritikal yang memerlukan kependaman ultra-rendah menunjukkan penguasaan berterusan C di kawasan yang memerlukan kuasa mentah dan ketepatan.
EDIT (2011-06-22): Cerapan Pihak Ketiga
Kajian bebas telah mengesahkan keunggulan prestasi C untuk aplikasi yang menuntut. Walau bagaimanapun, mereka juga menyerlahkan pertukaran antara kesukaran C dalam menulis kod kualiti purata berbanding kemudahannya dalam mencapai kod berkualiti tinggi.
EDIT (2011-09-20): Andrei Alexandrescu's Perspektif
Petikan Herb Sutter, yang dikaitkan dengan Andrei Alexandrescu, menggariskan sifat paradoks C . Walaupun lebih sukar untuk menulis kod C berbanding bahasa lain, menulis kod yang cekap adalah kurang mencabar kerana keupayaan pengoptimuman C.
Atas ialah kandungan terperinci Bolehkah Bahasa Mesin Maya Mengungguli Bahasa Asli: Memeriksa Perbezaan Prestasi Antara C dan Java/C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!