thắc mắc [Java] Thắc mắc về Java

Java có bất đồng bộ như Javascript không mọi người? Nếu có thì nó có được sử dụng nhiều không hay là chỉ dùng thread thôi?
bất đồng bộ java khác js.
bất đồng bộ js chỉ có single threaded.
bất đồng bộ java có thể là single-theaded hoặc multiple threads.
 
Sao ông thầy tôi nói java xử lý nhanh hơn nhỉ
Java nó optimize nhẹ lúc compile ra bytecode, sau đó mới optimize thêm lần nữa lúc chạy bytecode, còn C++ optimize kỹ càng hết lúc tạo executable rồi thôi, nên đúng là sẽ có một số trường hợp Java nhanh hơn ở hot path (đoạn code được chạy nhiều) do nó có thêm thông tin ở runtime để quyết định và nhờ vậy compile từ bytecode ra đoạn native code hiệu quả hơn. Bù lại là thím sẽ phải tốn thời gian để compile ở thời điểm chạy, còn C++ thì thím đã compile sẵn ra native code từ đầu rồi, chỉ lôi ra chạy thôi nên không tốn thời gian cho phần đó nữa.

Đấy là lý thuyết thôi, chứ thực tế code Java hầu như cái gì cũng đá lên heap thì nhanh hơn C++ thế éo nào được:shame:
 
Ví dụ đơn giản về optimization của C++ đây, GCC nó thấy loop này tính được lúc compile nên nó optimize thành int f() { return 499500; } luôn
1708244343342.png

Ngoài ra nó còn nhiều optimization khác, một trong số đó là inlining, ở đây g() gọi f() nhưng compile xong không còn function call nữa do GCC thấy f() chỉ tồn tại trong compilation unit này nên có thể bị loại bỏ hoàn toàn mà không ảnh hưởng gì xung quanh. Giờ thím bỏ qua hết mấy instruction khác chỉ đếm mov thôi thì nó cũng đã từ 6 xuống còn 1.
1708245041613.png

So với Java bytecode thì nó thế này
1708244588047.png

Chỉ khi nào hàm f() này của thím được gọi đủ nhiều thì mới có hy vọng nó được optimize như hàm f() của C++, còn không thì nó chạy đủ 1000 lần lặp để tính tổng.
 
Last edited:
Ví dụ đơn giản về optimization của C++ đây, GCC nó thấy loop này tính được lúc compile nên nó optimize thành int f() { return 499500; } luôn
View attachment 2338955
Ngoài ra nó còn nhiều optimization khác, một trong số đó là inlining, ở đây g() gọi f() nhưng compile xong không còn function call nữa do GCC thấy f() chỉ tồn tại trong compilation unit này nên có thể bị loại bỏ hoàn toàn mà không ảnh hưởng gì xung quanh. Giờ thím bỏ qua hết mấy instruction khác chỉ đếm mov thôi thì nó cũng đã từ 6 xuống còn 1.
View attachment 2338975
So với Java bytecode thì nó thế này
View attachment 2338964
Chỉ khi nào hàm f() này của thím được gọi đủ nhiều thì mới có hy vọng nó được optimize như hàm f() của C++, còn không thì nó chạy đủ 1000 lần lặp để tính tổng.
Cám ơn thím đã thông não
 
Đúng, nhưng mà khó tìm một người viết C++ giỏi. Tìm java dễ hơn :v. Có một bài báo có phân tích tại như dưới:
Why Java is better than C++ for high speed trading systems?
Em không làm việc với Java và C++ (xưa học C++ chỉ để giải trí), hoàn toàn mù tịt tình hình thực tế nên xin phép không bình luận về cái này. Có thể thím đúng, có thể dev Java đủ giỏi để optimize Java cho nhanh như C++ thì cũng đủ năng lực để chơi với C++, em không chắc.

Về bài thím gửi link ở trên có viết
The way that we code is more like C++ than Java
Như vậy thì lựa chọn thực sự ở đây của mấy tay to này là "không phải C++" do nó quá nguy hiểm chứ không hẳn là "Java", chi phí debug C++ quá đắt đỏ nên mấy thím tay to này mới chọn cái an toàn hơn thôi.
 
Trước mình cũng không tìm được một định hướng ngôn ngữ nào cụ thể cả, mình bắt đầu tìm hiều về lịch sử của các ngôn ngữ LT, bỗng dưng một ngày đẹp trời, một cái Podcast hiện ra với nội dung là cuộc nói chuyện giữa Lex Fridman và người tạo ra Java - James Gosling, tò mò vào xem, và nó đã khiến mình lựa chọn Java. Khuyên bạn nào còn phân vân có nên theo Java hay không thì thử xem cái Podcast đấy, xem có hợp hay không :LOL:
 
lâu rồi em không làm Java các thím cho hỏi giờ theo Java thì nên tập trung vào đâu nhỉ
  • Tìm hiểu JDK mới nhất - trước đây em chỉ làm JDK 8 với 11 là chủ yếu
  • Tiếp tục đào sâu vào Spring và SpringBoot
  • Các hướng đi khác ...
 
lâu rồi em không làm Java các thím cho hỏi giờ theo Java thì nên tập trung vào đâu nhỉ
  • Tìm hiểu JDK mới nhất - trước đây em chỉ làm JDK 8 với 11 là chủ yếu
  • Tiếp tục đào sâu vào Spring và SpringBoot
  • Các hướng đi khác ...
tập chung vào làm việc :v
 
Dạ vâng em cảm ưn a. Kiểu em sợ quên, chưa áp dụng được mấy cái í nhiều lắm nên đang chưa hiểu sâu í ạ.
fen cứ học qua một lượt đi, sau này gặp lại thì sẽ nhận ra thôi. Lambda hay dùng trong stream api như map, filter, reduce,... Inner class thì sau này làm sẽ để ý có builder pattern.

Quy trình tự nhiên là gặp problem, sau đó tìm kiếm solution để giải quyết problem đó. Cái fen đang cố làm là lấy solution rồi đi kiếm problem, nó ngược nên nó sẽ khó tiếp thu hơn.
 
Back
Top