Câu trả lời:
Java chạy trong một máy ảo, trong khi C ++ được chạy trực tiếp trên phần cứng. Điều này có nghĩa là bạn có nhiều quyền kiểm soát hơn về bộ nhớ của bạn và những gì được thực hiện với nó trong C ++.
Java là một ngôn ngữ được thu thập rác. Bạn không có quyền kiểm soát trực tiếp trên bộ nhớ của bạn. Bạn có thể phân bổ các khối bộ nhớ mới, nhưng bạn không có quyền kiểm soát (tốt) khi nó bị xóa. Trình thu gom rác kiểm tra từng phần bộ nhớ bạn đã phân bổ cho từng khung x và xác định xem đó có phải là rác hay không.
Đối với các trò chơi này có thể là thảm họa. Cứ sau vài khung hình, một số trình thu gom rác lại xuất hiện để kiểm tra từng phân bổ bạn đã thực hiện để xem liệu nó có còn được sử dụng không? Nói về một sự chậm lại!
Thứ hai, hầu hết các thư viện chúng tôi sử dụng đều được viết bằng C hoặc được viết bằng C ++. Tôi đang nói về Scaleform, công cụ vật lý Havok, PhysX, SpeedTree, v.v ... Tất cả các gói chuyên nghiệp, được sử dụng rộng rãi trong ngành. Nếu một ngôn ngữ khác muốn trở thành vua, tốt hơn là hỗ trợ họ.
Quan điểm cá nhân của tôi là Java thực sự tốt cho các ứng dụng và ứng dụng trên máy tính để bàn, nhưng không phải cho các trò chơi. Java có rất nhiều công cụ hay dành cho nhà phát triển và về mặt lý thuyết nó có thể chạy trên bất kỳ nền tảng nào có triển khai Máy ảo Java, nhưng tôi vẫn thích C ++ hơn vì tôi cần điều khiển bộ nhớ của mình. Đặc biệt là khi bạn bắt đầu làm việc với các cấu trúc dữ liệu kỳ lạ (cây đỏ đen, danh sách liên kết đôi, v.v.), nó sẽ giúp giữ một cái nhìn tổng quan tốt về tất cả các phân bổ bộ nhớ của bạn.
Tôi không nói: không sử dụng Java. Tôi đang nói: nghĩ về lý do tại sao bạn sử dụng Java. Minecraft được xây dựng bằng Java, vì vậy chắc chắn có thể xây dựng các trò chơi bằng Java. Nhưng nó có phải là một game hay hơn không, nếu nó được xây dựng trong C ++? Chà, chắc chắn sẽ không rẻ đến mức để nó chạy trên ba công cụ lớn (Windows, MacOS, Linux), nhưng ngay cả như vậy, nó đã gặp phải rất nhiều lỗi cụ thể về nền tảng trong quá trình phát triển của nó, những lỗi mà Java không thể thực hiện được kết thúc.
Hiện tại có rất nhiều khung C ++ dành cho các lập trình viên mới bắt đầu. Thực sự không có lý do gì để không học nó, đặc biệt nếu bạn muốn tiếp tục sự nghiệp của mình trong ngành.
Câu trả lời ngắn: C ++ biên dịch thành mã gốc, do đó hiệu năng phụ thuộc vào nhà phát triển, không phải thời gian chạy hay VM.
Câu trả lời dài:
C ++ "nhanh hơn" không liên quan gì đến C ++. Hiện tại, đây là một trong số rất ít ngôn ngữ có sẵn được hỗ trợ bởi các công cụ tạo mã độc lập, mã gốc cho nhiều nền tảng.
Trước đây, bạn có thể sử dụng C, C ++, BASIC / 2, Delphi, v.v. và có được các tệp thực thi hiệu quả, độc lập. Sự lựa chọn ngôn ngữ là một vấn đề sở thích cá nhân và lực lượng thị trường.
Ngày nay, giả định rằng "C ++ nhanh hơn" về cơ bản là một lời tiên tri tự hoàn thành, mặc dù LLVM đang ở một vị trí tốt để thay đổi điều đó vì nó làm bất cứ điều gì đi vào trình phân tích cú pháp, như đã từng.
Borland đã đúng: Nhiều ngôn ngữ được phân tích cú pháp, tối ưu hóa đầu tiên được áp dụng, sau đó được chuyển đến một trình biên dịch và trình liên kết phụ trợ chung. Đó là một trong những thành tựu chính của LLVM.
Java được cấu trúc theo cách mà sẽ rất khó thực hiện nếu không có JVM. Thật kỳ lạ, C #, thông thường và không chính xác, được cho là gần tương đương với Java, đã biên dịch thành mã gốc trên một số nền tảng, bao gồm cả iOS.
Đầu danh sách Giáng sinh của tôi? Một cỗ máy thời gian quay trở lại và thêm các thuộc tính, xử lý ngoại lệ thực tế và tính đa hình LÀM VIỆC thực tế cho C ++ và loại bỏ cú pháp cú pháp mũi tên lên mà trình phân tích cú pháp có thể tự tìm ra. Tôi đã viết một bộ tiền xử lý trong 10 năm đó. Trước đây vì nó ngu ngốc.