So sánh C++ và Java
Posted by webmaster on March 21st, 2010Tác giả: Cameron là phó chủ tịch phát triển của Oracle Fusion Middleware, chịu trách nhiệm về sản phẩm Coherence Data Grid có các phiên bản Java, C # và C + +. Data grid là RAID cho máy chủ. Nó cung cấp một tier dữ liệu đáng tin cậy, nhất quán, bao gồm cả khả năng chịu lỗi và cân bằng tải. Các máy chủ hợp tác với nhau và hành động như một bộ máy quản lý thông tin.
Theo Cameron có 10 lý giải của về tại sao Java có thể thay thế được C + +. Điều này bắt đầu xảy ra khoảng 1996-1997.
10. Tự động dọn rác: Một phần đáng kể của C + + code là dành riêng để quản lý bộ nhớ. Điều này có nghĩa là thời gian nhanh hơn vào thị trường và tính lỗi thấp hơn.
9. Xây dựng các Quy trình: C + +, xây dựng chậm và phức tạp. Cá nhân ví dụ: 20 giờ đầy đủ xây dựng trong C + + so với 7 phút trong Java.
8. Đơn giản của Mã Nguồn và Artifacts: C + +, chia tách mã nguồn vào tiêu đề và các file thực hiện. Hiện vật được trình biên dịch cụ thể, nhưng cũng có rất nhiều người trong số họ. Với Java, có chỉ một java và chỉ một.. Lớp.
7. Nhị phân chuẩn: Ngoài việc loadable như là một lớp bởi một JVM, một classfile Java có thể được sử dụng để biên dịch chống lại. Java defers nền tảng công cụ cụ thể cho thời gian này.
6. Năng động kết: Không có cách tiêu chuẩn để liên kết các lớp học năng động trong C + +.
5. Portability: Java là cầm tay với nỗ lực rất ít; C + + được di lý thuyết, nhưng trong thực tế bạn có để xây dựng một ngôn ngữ khác (# ifdef’d các loại, vv) trên đầu trang của nó. C + +, có sự khác biệt đáng kể từ nhà bán để bán. Một số nhà cung cấp lớn chưa được đặt tên có hung dư hỗ trợ cho các chuẩn C + +, đặc biệt là các mẫu.
4. Loại tiêu chuẩn hệ thống: Java có chỉ định, di động các loại nguyên thủy C +. + Vẫn có một thời gian khó xác định những gì là String. Đa luồng? Bạn phải nói đùa. STL? Có lẽ một vài ngày. Về cơ bản không có gì là tiêu chuẩn!
3. Phản ánh: Toàn thời gian chạy khả năng nhìn vào thời gian này. C + +, có tùy chọn RTTI, nhưng không có sự phản ánh. Cực kỳ mạnh mẽ cho phép các khuôn khổ chung. Nó cho bạn khả năng để tìm hiểu về, truy cập và thao tác bất kỳ đối tượng.
2. Hiệu suất: GC có thể thực hiện quản lý bộ nhớ nhiều hơn nữa hiệu quả (allocators sàn, thoát khỏi phân tích). Điều này là do các kiến trúc hiện đại và thực tế là Java có thể tận dụng nhiều luồng. Thread con trỏ an toàn thông minh trong C + + được 3x chậm hơn so với tài liệu tham khảo Java. Điểm nóng có thể làm nội tuyến lớn, rất quan trọng để đối phó với lớp invocation ảo.
1. An toàn: Xoá bỏ con trỏ (tùy bộ nhớ truy cập, khả năng dễ dàng sụp đổ quá trình). Với Java, không có overruns đệm; mã và dữ liệu không thể bị vô tình bỏ qua.
Honorable Mention: C + + Templates. Tiếp theo thời gian có người phàn nàn về Java Generics, làm cho họ đọc C + + Templates. Chúng fugly và cực kỳ bloated.
Ngược lại, C++ có 10 lợi thế sau so với Java:
10. Thời gian khởi động: Các đồ thị của lớp ban đầu được tải trong Java là khá lớn. Kết luận: Không tốt cho “tức thì” và ngắn quá trình chạy.
9. Memory Footprint: Java sử dụng bộ nhớ đặc biệt nhiều hơn C + +, đặc biệt là cho “nhỏ” ứng dụng.
8. Full GC tạm dừng: Sớm hay muộn, có một phần của GC mà không thể được chạy trong nền và không thể tránh. Điều này havoc nguyên nhân cho quá trình phân phối và những thứ như thời gian thực các hệ thống tài chính.
7. Không xác định Destruction: Không hỗ trợ RAII. Không thể đếm trên finalizers. Thậm chí không có một “sử dụng” xây dựng tại Java.
6. Hàng rào Native hội nhập: Hệ điều hành được xây dựng bằng C / C + + API. Thường trong C.
Và đó là tất cả Cameron có thể ra. Biến ra nó chỉ là một danh sách top 5.
Vậy tại sao việc chuyển đổi từ C + +, Java, C # xảy ra? Bởi vì Shift Happens. Trước hết, Al Gore được xây dựng internet và điều này World Wide Web. Chúng tôi đã xây dựng một trình duyệt cặp vợ chồng với C + +, nhưng sau đó chúng tôi đã thực hiện xong. Oh chờ đợi, chúng tôi cần một máy chủ web quá, vì vậy chúng tôi được xây dựng Apache. Còn những thứ khác? Những thứ mà chạy trong trình duyệt? Không có cách nào chúng tôi đã đi để chạy C + +, trong trình duyệt b / c nó đã quá không an toàn. Tất cả những lợi thế mà C + +, Java đã có hơn không vấn đề trên web. Thời gian khởi động không phải là một mối quan tâm khi chúng tôi còn đang chạy máy chủ ứng dụng của chúng tôi cho tháng. Bộ nhớ không phải là một vấn đề bởi vì chúng tôi đã có GB RAM trên máy của chúng tôi.
Điều gì về ngôn ngữ kịch bản? Tất cả các lĩnh vực mà C + +, có thể có một lợi thế, ngôn ngữ kịch bản in Họ đã nhảy được cung cấp đơn giản và approachability (móc lên đến cơ sở dữ liệu, quản lý nhà nước thay mặt cho người sử dụng, sản xuất HTML), nhanh chóng phát triển ứng dụng (không có yêu cầu về kiến trúc OO, lưu và làm mới ).
Vì vậy, những gì về điện toán đám mây? Chúng tôi có thể mất những gì chúng tôi học được từ Java và C + + và áp dụng chúng vào những gì chúng ta thấy những đường ống xuống đến bây giờ với điện toán đám mây? Chúng ta đang thiếu gì? Những lợi thế mà Java sẽ mất tích trong một môi trường đám mây là gì?
Những thứ mất tích từ VM: mô đun, vòng đời và sự cô lập và bộ nhớ thấp hơn. GC tạm dừng dự đoán được. Những điều mất tích từ nền tảng: Hệ thống phân phối như là một hệ thống, cung cấp và đo, mây điều hành hệ thống API, persistence (bao gồm cả khóa / giá trị) và đồ / Giảm-phong cách chế biến. Cuối cùng, định nghĩa là thiếu ứng dụng bao bì, tài nguyên khai báo và an ninh trong môi trường chia sẻ.
Có gì thay đổi trên thế giới từ Java đã được giới thiệu? Phần cứng ảo hóa, cơ sở hạ tầng lưới điện stateful và công suất trên các ISP yêu cầu (EC2). Điều gì đang đến trong Java? Mô-đun hóa, nio hệ thống tập tin Pluggable, JVM trần kim loại và ảo Editions. Kết luận: Java hoặc là bước lên hoặc cái gì khác sẽ.
Đây là một chuyện thú vị để lắng nghe rất nhiều và tôi rất thích hài hước và hình ảnh của Cameron trượt mà hỗ trợ nó. Như Dusty cho biết, Cameron có một hình ảnh khá rõ ràng về những gì các Lộ trình Java đó như thế nào. Hãy hy vọng của Oracle là lắng nghe.














Recent Comments