[CODEWELL] ANH CÓ THỂ MỜI EM MỘT LY JAVA?

26/02/2019 487
CODEWELL

Với khẩu hiệu “Viết một lần, chạy mọi nơi”, không có gì khó hiểu khi Java từ lâu đã trở thành ngôn ngữ lập trình phổ biến nhất trên thế giới, có sức hấp dẫn đặc biệt với các lập trình viên giỏi như sự quyến rũ của một tách cà phê nóng lan tỏa trong căn phòng code đầy tĩnh lặng.

Nổi tiếng là vậy, nên xung quanh Java có rất nhiều câu chuyện thú vị để kể. Hãy cùng chúng tôi nhâm nhi tách cà phê Java và đọc những “mẩu tin” dưới đây để xem mình hiểu về Java đến nhường nào nhé!

1. CÁI TÊN KHỞI NGUỒN TỪ NHỮNG HẠT CAFFE

Java được khởi đầu bởi James Gosling và bạn đồng nghiệp ở Sun Microsystem năm 1991. Ban đầu, Java được đặt tên là Oak (có nghĩa là cây sồi), xuất phát từ những cây sồi bên ngoài cửa sổ văn phòng của James. Sau này, vào năm 1995, do Oak đã được đăng ký thành thương hiệu của Oak Technologies, nên cái tên Java đã chính thức ra đời sau những buổi thảo luận tại một quán Cafe địa phương. Cũng từ đó, mã số bí mật “0xCafeBabe” trong các file class được đặt tên theo quán Cafe nơi đội phát triển Java thường lui tới.

* Java là một hòn đảo ở Indonesia nơi mà lần đầu tiên cà phê được sản xuất (Java Coffee).

2. LINH VẬT CỦA JAVA

“The Duke” là linh vật của Java, được thiết kế bới Joe Palrang vào năm 2006 để đại diện cho một tác nhân phần mềm thực hiện các tác vụ cho người dùng. Linh vật Duke xuất hiện sống động với kích thước người thật là nét đặc trưng ở các buổi hội thảo Java. Mỗi năm Oracle đều cho ra mắt một hình tượng Duke với đặc điểm tính cách mới.

3. CÂU THẦN CHÚ CỦA JAVA

Java thường được biết đến bởi slogan “Viết một lần, chạy mọi nơi” (Write once run everywhere). Java là một nền tảng độc lập, có thể chạy trên mọi hệ điều hành, code sẽ được Java Complier biên dịch tạo thành các bytecode, từ đó, bytecode có thể sẽ được thực thi trực tiếp bởi CPU hoặc được phiên dịch thành các đoạn code được thực thi bởi JVM. Sau đó, chương trình được thực thi và cho ra kết quả cuối cùng.

Ngoài thần chú trên, Java còn được biết đến là ngôn ngữ lập trình WEB sáng giá kể từ khi mạng Internet và các website phát triển bùng nổ. Java là một lựa chọn dễ dàng hơn và linh hoạt hơn so với C++, việc phát minh ra WWW vào năm 1993 đã bắt đầu một sự thay đổi lớn trong phát triển ứng dụng CNTT. Sun Microsystems đã nhanh chóng chuyển sang tận dụng bằng cách bán “mạng lưới” server như hotcakes hoặc gợi ý sử dụng Java như một nền tảng cho phát triển web. Kể từ đó Java đã trở thành tiêu chuẩn phát triển Internet cho các doanh nghiệp.

4. Java is like air

“Java is like air”, ở đâu bạn cũng có thể bắt gặp Java. Theo thống kê cho tới cuối năm 2018 của Tiobe, Java là ngôn ngữ lập trình phổ biến nhất trên thế giới. Java được rất nhiều công ty lớn thuộc các lĩnh vực khác nhau sử dụng như GM/Onstar, Facebook, eBay, Ford, Salesforce,… cũng như các công ty phát triển và sử dụng ứng dụng Android (nắm hơn 80% thị phần thiết bị di động trên toàn thế giới).

Java là một ngôn ngữ có cấu trúc chặt chẽ, phù hợp với nhiều loại ứng dụng, và được sử dụng rộng rãi trong các trung tâm tài chính như ngân hàng, bảo hiểm. Kết hợp với người anh em JavaScript, Java cung cấp một giải pháp toàn diện bao gồm cả BackEnd lẫn FrontEnd cho người sử dụng.

 

5. The final

Trong Java, “final” không hẳn là kết thúc, mà có thể là:

  • Final class: Lớp không thể mở rộng
  • Final method: Phương thức không thể được ghi đè
  • Final field: Hằng số

Final variable: Giá trị của biến khi đã được set thì không thể bị thay đổi

6. Deadly Diamond of Death

Java không hỗ trợ đa kế thừa (multiple inheritance). Lý do là gì vậy?

Diamond Problem là một sự mơ hồ xảy ra khi 2 class B và C cùng kế thừa class A, và class D kế thừa từ cả 2 class B và C. Nếu trong class B và C tôi cùng ghi đè một method của class A, thì class D sẽ kế thừa method nào? Method của B hay của C?

Trên thực tế, đa kế thừa nảy sinh nhiều vấn đề hơn cả những vấn đề nó giải quyết được. Do đó mà Java cũng như các ngôn ngữ hiện đại ngày nay đều không có đa kế thừa như C++ hay Object Pascal.

Ví dụ:

7. Immutable class

Một đối tượng hay một lớp immutable là các thực thể mà trạng thái của chúng (bao gồm dữ liệu) không thể thay đổi được một khi đã tạo ra. Các bước để tạo ra một đối tượng immutable như sau:

  • Đặt tất cả các trường, các phương thức và biến thành final
  • Sử dụng access modifier là private để chặn quyền truy cập
  • Đặt class là final đảm bảo các class khác không thể kế thừa

Việc sử dụng một immutable class có các ưu điểm nổi bật như:

  • Thread safe: Đối tượng có thể được sử dụng từ nhiều luồng cùng một thời điểm mà không gặp vấn đề gì
  • Không gặp vấn đề về đồng bộ
  • Không sao chép hàm khởi tạo (không tham chiếu tới hàm khởi tạo của một đối tượng khác trong cùng class)
  • Có thể sử dụng lại bằng cách cache

String là immutable.

8. Class loader subsystem

Đây là nơi tải và xử lý .class file, kiểm tra tính hợp lệ của các mã byte code, sau đó cấp phát các bộ nhớ cần thiết để thực thi chương trình. Bộ nhớ này được chia làm 5 phần, là nơi truy cập dữ liệu tại thời điểm chạy chương trình.

  • Method Area: Lưu code của class bao gồm các biến và phương thức
  • Heap: Nơi tạo ra đối tượng
  • Java Stack: Bộ nhớ để lưu dữ liệu và kết quả khi thực thi một phương thức
  • PC (Program Counter) Register: Các thanh ghi chứa địa chỉ bộ nhớ của các chỉ dẫn của phương thức
  • Native Method Stack: Nơi thực thi các phương thức Java

9. Lưu trữ static method & variable

Biến và phương thức static được lưu trữ trong bộ nhớ heap đặc biệt, được gọi là PermGen (Permanent Generation). Chỉ có các biến với giá trị nguyên thể hoặc tham chiếu của chúng mới được lưu trong PermGen. Nếu một biến static tham chiếu tới một đối tượng, thì tham chiếu sẽ được lưu trong PermGen, còn bản thân đối tượng được lưu trong bộ nhớ heap thông thường.

Ví dụ:

     static int a= 10;

     static MyObject obj = new MyObject();

10. StackOverflowError & OutOfMemoryError

Khi bật JVM bạn định nghĩa bao nhiêu RAM mà nó có thể dùng để xử lý. JVM chia số lượng RAM này thành những bộ nhớ cho các mục đích xử lý riêng, 2 trong số đó là Stack và Heap.

Out Of Memory Error Stack Overflow Error
  • Liên quan đến Heap
  • Phát sinh khi có các đối tượng hoặc các đối tượng tham chiếu lớn trong bộ nhớ, khi bạn cố gắng tạo một object và không có đủ không gian trên heap để phân bổ đối tượng đó.
  • Có 2 loại chủ yếu: Lỗi Java heap và PermGen.
  • Tránh bằng cách đảm bảo những đối tượng không cần thiết phải được dọn dẹp bởi GC (Garbage Collection). Tăng kích thước không gian heap.

export JAVA_OPTS=”$JAVA_OPTS -Xms5000m -Xmx6000m -XX:PermSize=1024m -XX:MaxPermSize=2048m”

• Liên quan đến Stack
• Tất cả các biến và phương thức cục bộ gọi các dữ liệu liên quan sẽ nằm trên stack. Lỗi phát sinh khi stack không được giải phóng khi thực thi phương thức.
• Tránh bằng cách đảm bảo các phương thức thực thi phải được kết thúc (không phải trong vòng lặp vô hạn). 

 

Để đọc thêm nhiều bài viết công nghệ hữu ích khác, vui lòng ấn like và follow fanpage của CO-WELL Asia tại đây nhé!