Tải bản đầy đủ (.docx) (22 trang)

Tìm hiểu máy ảo Java

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (410.97 KB, 22 trang )

TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM
TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG
KHOA CÔNG NGHỆ THÔNG TIN

BÀI TẬP LỚN MÔN CHUYÊN ĐỀ JAVA

TÌM HIỂU MÁY ẢO JAVA (JVM)

Người hướng dẫn: ThS VŨ ĐÌNH HỒNG
Người thực hiện: TRẦN NGỌC QUỐC PHONG – 51303365
Lớp

: 13050303
Khóa : 17


THÀNH PHỐ HỒ CHÍ MINH, NĂM 2016


LỜI CẢM ƠN
Em xin gửi lời cảm ơn chân thành đến ThS Vũ Đình Hồng và thầy Mai
Văn Mạnh, giảng viên môn Chuyên Đề Java – trường Đại học Tôn Đức Thắng,
những người đã tận tình hướng dẫn, chỉ bảo em trong suốt quá trình làm bài tập.
Em cũng xin chân thành cảm ơn các thầy cô giáo trong trường Đại học Tôn
Đức Thắng nói chung, các thầy cô trong Bộ môn Công Nghệ Phần Mềm nói riêng
đã dạy dỗ cho em kiến thức về các môn đại cương cũng như các môn chuyên
ngành, giúp em có được cơ sở lý thuyết vững vàng và tạo điều kiện giúp đỡ em
trong suốt quá trình học tập.
Cuối cùng, em xin chân thành cảm ơn gia đình và bạn bè, đã luôn tạo điều
kiện, quan tâm, giúp đỡ, động viên em trong suốt quá trình học tập và hoàn thành
bài tập.



Thành phố Hồ Chí Minh, ngày 01 tháng 04 năm 2016
Sinh Viên Thực Hiện

Trần Ngọc Quốc Phong


ĐỒ ÁN ĐƯỢC HOÀN THÀNH
TẠI TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG
Tôi xin cam đoan đây là sản phẩm đồ án của riêng tôi / chúng tôi và được
sự hướng dẫn của ThS Vũ Đình Hồng. Các nội dung nghiên cứu, kết quả trong
đề tài này là trung thực và chưa công bố dưới bất kỳ hình thức nào trước đây.
Những số liệu trong các bảng biểu phục vụ cho việc phân tích, nhận xét, đánh giá
được chính tác giả thu thập từ các nguồn khác nhau có ghi rõ trong phần tài liệu
tham khảo.
Ngoài ra, trong đồ án còn sử dụng một số nhận xét, đánh giá cũng như số
liệu của các tác giả khác, cơ quan tổ chức khác đều có trích dẫn và chú thích
nguồn gốc.
Nếu phát hiện có bất kỳ sự gian lận nào tôi xin hoàn toàn chịu trách
nhiệm về nội dung đồ án của mình. Trường đại học Tôn Đức Thắng không liên
quan đến những vi phạm tác quyền, bản quyền do tôi gây ra trong quá trình thực
hiện (nếu có).
TP. Hồ Chí Minh, ngày 01 tháng 04 năm 2016
Tác giả
(ký tên và ghi rõ họ tên)

Trần Ngọc Quốc Phong


PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN

Phần xác nhận của GV hướng dẫn

_____________________________________________________
_____________________________________________________
_____________________________________________________
_____________________________________________________
_____________________________________________________
_____________________________________________________
_____________________________________________________
____________________________
Tp. Hồ Chí Minh, ngày tháng năm
(kí và ghi họ tên)

Phần đánh giá của GV chấm bài

_____________________________________________________
_____________________________________________________
_____________________________________________________
_____________________________________________________
_____________________________________________________
_____________________________________________________
_____________________________________________________
____________________________
Tp. Hồ Chí Minh, ngày tháng năm
(kí và ghi họ tên)


TÓM TẮT
Cùng với sự phát triển nhanh chóng của công nghệ, nhiều ứng dụng đã
được tạo ra để phục vụ nhu cầu học tập, làm việc, giải trí của con người. Trước

đây, để viết một chương trình máy tính thực sự rất khó khăn do rào cản ngôn ngữ
tự nhiên và ngôn ngữ máy tính còn cách nhau rất xa. Tuy nhiên dần dần các ngôn
ngữ lập trình mới ra đời, tạo điều kiện thuận lợi cho các lập trình viên có thể viết
mã dễ dàng hơn.
Cùng với sự phát triển của Internet, đặt ra yêu cầu một ứng dụng chỉ được
viết một lần nhưng có thể được sử dụng để chạy ở nhiều nơi, nhiều hệ điều hành
khác nhau, nhiều nền tảng khác nhau. Chính vì thế ngôn ngữ lập trình Java cùng
với máy ảo Java ( Java Virtual Machine ) được ra đời để giải quyết vấn đề này.
Trong nội dung của bài này, em sẽ trình bày những tìm hiểu của em về máy
ảo Java:
-

Cấu trúc máy ảo Java.

-

Cấu trúc bộ nhớ máy ảo Java.

-

Cách cấp phát bộ nhớ trong máy ảo Java.


Mục lục


CHƯƠNG 1: MÁY ẢO Java (Java Virtual Machine)
1.1 Tổng quan về JVM
1.1.1 Giới thiệu về JVM
Thập kỷ 90 chứng kiến một sự phát triển như vũ bão của mạng Internet,

kèm theo đó là vô vàn các ứng dụng trên các môi trường, hệ điều hành (OS) và
các vi xử lý (CPU) khác nhau. Tuy nhiên có một điểm hạn chế lớn là người lập
trình phải rất vất vả khi chuyển đổi các ứng dụng của mình để các hệ thống khác
có thể sử dụng được.
Ngày 23/5/1995, công ty máy tính Sun Microsystems đã giới thiệu một
công cụ lập trình mới - ngôn ngữ Java - nhằm khắc phục những khó khăn đó. Đặc
điểm nổi bật nhất của Java là nó không phụ thuộc vào hệ điều hành và bộ xử lý.
Điều này cho phép một ứng dụng viết bằng Java có thể được thực hiện trên bất kỳ
hệ điều hành và hệ xử lý nào có hỗ trợ Java. Do vậy, người lập trình chỉ cần viết
ứng dụng bằng Java đúng một lần, sau đó có thể sử dụng ứng dụng này trên các
hệ điều hành khác nhau như Windows95, WindowsNT, Mac OS, Unix, ... theo
phương châm: viết một lần, sử dụng ở bất kỳ đâu.
Có thể định nghĩa một cách chính xác hơn về Java: là ngôn ngữ lập trình
hướng đối tượng, được thiết kế độc lập với hệ điều hành, cho phép người lập trình
viết chương trình một lần và có thể sử dụng tại bất kỳ đâu.
Không chỉ giới thiệu ngôn ngữ lập trình, Sun Microsystems còn đưa ra
hàng loạt công cụ hỗ trợ người lập trình phát triển các ứng dụng bằng Java, như
Java Develoment Kit, JavaBeans, HotJava...
Ngôn ngữ Java có cú pháp rất giống với ngôn ngữ C/C++ (là một ngôn ngữ
rất mạnh được dùng phổ biến hiện nay), tuy nhiên nó đã được thay đổi khá nhiều
để đáp ứng khả năng độc lập với hệ điều hành. Nền tảng của ngôn ngữ Java là các
class. Các class đóng vai trò như những đối tượng, người lập trình khi xây dựng
ứng dụng sẽ sử dụng một số class chuẩn của hệ thống, đồng thời có thể tự mình
xây dựng class khác đáp ứng yêu cầu công việc.


Java là ngôn ngữ dễ học, nó lược bớt những lệnh thừa và rườm rà của
C/C++ để người lập trình chú trọng vào việc viết chương trình. Đồng thời, nó còn
hạn chế người lập trình không can thiệp quá sâu vào hệ thống.
Hiện nay Java được ứng dụng rất rộng rãi, chủ yếu là các ứng dụng được

viết trên Internet nhằm khai thác tối đa khả năng của nó trong lĩnh vực viễn thông,
truyền hình, mạng, và các máy tính đơn lẻ. Hiện tại các ứng dụng viết bằng Java
khi thực hiện còn chậm hơn so với các ứng dụng được xây dựng thông thường,
tuy nhiên hầu hết các nhà phát triển phần mềm đều cho rằng tốc độ sẽ được cải
thiện và Java sẽ là ngôn ngữ lập trình của tương lai.
Máy ảo Java là trái tim của ngôn ngữ Java. Môi trường Java bao gồm năm
phần tử sau:
− Ngôn ngữ
− Định nghĩa Bytecode
− Các thư viện lớp Java/Sun
− Máy ảo Java (JVM)
− Cấu trúc của file .class
Giá trị cốt lõi của của JRE là:
− Định nghĩa Bytecode
− Cấu trúc của file .class
− Máy ảo Java
Java Virtual Machine (JVM) đóng vai trò rất quan trọng để các ứng dụng
Java có thể thực hiện được. Nó hoạt động như một máy tính ảo, cũng có bộ lệnh,
cấu trúc dữ liệu, bộ nhớ,... Khi các ứng dụng Java (sau khi dịch, các ứng dụng viết
bằng Java sẽ có phần mở rộng là class) thực hiện, JVM tiến hành phân tích mã
trong class đó thành bộ lệnh của JVM rồi thực hiện giống như máy tính PC thao
tác với các ứng dụng thông thường.
Khả năng cơ động của file .class cho phép các chương trình Java viết một lần


nhưng chạy ở bất kỳ đâu. Bởi vậy, các class sau khi dịch có thể được thực hiện
trên bất kỳ hệ điều hành nào thông qua máy tính ảo JVM.
Khả năng này có được nhờ sự giúp đỡ của JVM. Hiện tại, JVM được xây
dựng cho hầu hết các hệ điều hành và hệ xử lý hiện có, điều này có nghĩa là các
ứng dụng viết bằng Java có đầy đủ điều kiện để phát triển.


1.1.2 Máy ảo Java là gì?
Như đã biết, JVM bản chất là một chương trình có thể thực thi các đoạn
mã lập trình của Java, và đặc điểm của những chương trình viết bằng Java là đều
có thể chạy trên bất kỳ môi trường nào, miễn là có cài máy ảo JVM trên đó. Việc
này sẽ tạo một động lực rất lớn thúc đẩy việc dùng lại các phần mềm Java đã
được viết trước đây và việc phát triển phần mềm trên iPhone và iTouch.
Máy ảo là một phần mềm dựa trên cơ sở máy tính ảo. Nó có tập hợp các
lệnh logic để xác định các hoạt động của máy tính. Người ta có thể xem nó như
một hệ điều hành thu nhỏ. Nó thiết lập các lớp trừu tượng cho: Phần cứng bên
dưới,hệ điều hành, mã đã biên dịch.
Trình biên dịch chuyển mã nguồn thành tập các lệnh của máy ảo mà không
phụ thuộc vào phần cứng cụ thể. Trình thông dịch trên mỗi máy sẽ chuyển tập
lệnh này thành chương trình thực thi. Máy ảo tạo ra một môi trường bên trong để
thực thi các lệnh bằng cách:
− Nạp các file .class
− Quản lý bộ nhớ
− Dọn rác
Việc không nhất quán của phần cứng làm cho máy ảo phải sử dụng ngăn
xếp để lưu trữ các thông tin sau:
− Các “Frame” chứa các trạng thái của các phương pháp.
− Các toán hạng của mã bytecode
− Các tham số truyền cho phương pháp
− Các biến cục bộ


Khi JVM thực thi mã, một thanh ghi cục bộ có tên "Program Counter"
được sủ dụng. Thanh ghi này trỏ tới lệnh đang thực hiện. Khi cần thiết, có thể
thay đổi nội dung thanh ghi để đổi hướng thực thi của chương trình. Trong trường
hợp thông thường thì từng lệnh một nối tiếp nhau sẽ được thực thi.

Một khái niệm thông dụng khác trong Java là trình biên dịch "Just In TimeJIT". Các trình duyệt thông dụng như Netscape hay IE đều có JIT bên trong để
tăng tốc độ thực thi chương trình Java. Mục đích chính của JIT là chuyển tập lệnh
bytecode thành mã máy cụ thể cho từng loại CPU. Các lệnh này sẽ được lưu trữ
và sử dụng mỗi khi gọi đến.

1.2 Cấu trúc Máy ảo Java

Cấu trúc một máy ảo Java bao gồm các thành phần:
Classloader: Là một hệ thống con của JVM được sử dụng để tải class file.
Runtime Data Area Java bao gồm:
Class (method) Area: Lưu trữ cấu trúc mỗi lớp, chẳng hạn như hằng,
trường, dữ liệu phương thức, code của phương thức, …


Heap: Nó là khu vực dữ liệu runtime mà trong đó đối tượng được cấp
phát.
Stack: Stack trong Java lưu giữ các Frame. Nó giữ các biến cục bộ và các
kết quả cục bộ, và thực hiện một phần nhiệm vụ trong phần triệu hồi và trả về
phương thức. Mỗi Thread có một Stack riêng, được tạo tại cùng thời điểm với
Thread.
Một Frame mới được tạo mỗi khi một phương thức được triệu hồi và bị
hủy khi lời triệu hồi phương thức là kết thúc.
Program Counter Register: Nó chứa địa chỉ của chỉ lệnh JVM hiện tại
đang được thực thi.
Native Method Stack: Bao gồm tất cả các phương thức tự nhiện được sử
dụng trong ứng dụng.
Execution Engine: Phần này bao gồm:
Một bộ xử lý ảo Virtual Processor
Một trình thông dịch Interpreter. Đọc Bytecode Stream sau đó thực thi
các chỉ thị.

Just-In-Time (JIT) Compiler: được sử dụng để cải thiện hiệu suất. JIT
biên dịch các phần của Bytecode mà có cùng tính năng tại cùng một thời điểm, và
vì thế giảm lượng thời gian cần thiết để biên dịch. Ở đây khái niệm Compiler là
một bộ biên dịch tập chỉ thị của JVM thành tập chỉ thị của một CPU cụ thể.

1.3 Bộ nhớ của JVM
1.3.1. Cấu trúc bộ nhớ JVM
Khi thực hiện cấp phát bộ nhớ, một đối tượng mới được tạo và đặt vào
vùng nhớ Heap. Khi ứng dụng của bạn không còn tham chiếu tới đối tượng này
nữa thì Java garbage collector cho phép xóa đối tượng này đi để sử dụng lại vùng
nhớ đó.
Heap: JVM lưu tất cả đối tượng được tạo bởi toán tử “new” trong ứng
dụng Java, vào vùng nhớ Heap tại thời điểm chạy.
Stack: Các phương thức và tham chiếu tới đối tượng địa phương được lưu
trữ trong Stack. Mỗi Thread quản lý một stack. Khi phương thức được gọi, nó


được đưa vào đỉnh của Stack. Stack lưu trữ trạng thái của phương thức bao gồm:
dòng code thực thi, tham chiếu tới đối tượng địa phương. Khi phương thức chạy
xong, vùng nhớ (dòng code thực thi, tham chiếu tới đối tượng địa phương) được
đẩy ra khỏi stack và tự động giải phóng.
Perm: Lưu trữ thông tin của Class được nạp vào và một vài tính năng khác
như StringPool (vùng nhớ của biến String) thường được tạo bởi phương thức
String.interm(). Khi ứng dụng của bạn chạy, Perm space được lấp đầy nhanh
chóng.
Ví dụ:
Dog dog = new Dog();
Heap: lưu đối tượng Dog khi ta “new Dog ();”
Stack: lưu tham chiếu “dog”.
Perm: lưu thông tin về Class “Dog”.


1.3.2. Quá trình cấp phát bộ nhớ JVM trong thực tế
Trong bài viết này, sử dụng phần mềm VMVisual kết nối tới máy ảo Java
để mô hình hóa quá trình chạy của JVM.
Sử dụng một đoạn code debug để lấy Heap dump ở 2 trường hợp:
− Không hiện thực bất cứ kiểu dữ liệu hay đối tượng nào trong Java để chạy
chương trình, thực hiện lệnh dừng (sleep) trong 100s để có thời gian Heap
dump (1)
− Hiện thựcpublic
đối tượng
ArrayList
class
Mainvới{ 1000 đối tượng chứa trong mảng, thực
hiện lệnh dừngpublic
100 giây static
để có thờivoid
gian Heap
dump (2)
main(String[]
args){
sleep(100000);
Sau khi tiến hành Heap
Dump, ta nhận được kết quả như sau:
} tổng thể:
Cấp phát bộ nhớ

public class Main {
public static void main(String[] args) throws
InterruptedException {
ArrayList arrayList = new ArrayList(1000);

sleep(100000);
}


Bộ nhớ được cấp phát cho chương trình (1)

Bộ nhớ được cấp phát cho chương trình (2)
Dung lượng bộ nhớ cấp phát cho chương trình (2) cao hơn chương trình
(1) cho dù số lớp là như nhau (465 class).
JVM cấp phát bộ nhớ theo class, dù không thực hiện nhiều phương thức,
không cấp phát cho đối tượng nào đi nữa, thì những bước tiền xử lý, tiền thực thi
cũng đã có cấp phát bộ nhớ trong JVM. Tất cả các class trong Java đều được kế
thừa từ class java.lang.Object nên dù không thực thi nhiều lệnh nhưng bên trong
lớp Object đã có nhiều lệnh tiền xử lý, chính vì thế đã có nhiều vùng bộ nhớ được
cấp phát sẵn.
Cấp phát bộ nhớ theo Class:


Cấp phát bộ nhớ theo lớp trong chương trình (1)

Cấp phát bộ nhớ theo lớp trong chương trình (2)
Ở đây ta chỉ thấy với một đoạn chương trình đơn giản nhưng máy ảo Java
đã tiến hành cấp phát rất nhiều bộ nhớ cho các lớp mà không có trong đoạn mã


của người lập trình. Tuy nhiên, việc này làm tăng hiệu suất của JIT Compiler
như đã đề cập ở phần trên.
Cấp phát bộ nhớ của lớp ArrayList:

(1)


(2)

Ngoài 6 đối tượng đã được Instance trước thì (2) có thêm 1 đối tượng nữa
với kích thước lớn hơn hẳn, ở đây chính là đối đượng đã được tạo ra 1000 phần tử
(nhưng chưa sử dụng).

Chi tiết bộ nhớ được cấp phát cho đối tượng arrayList ở chương trình (2)


CHƯƠNG 2: PHƯƠNG PHÁP THỰC THI
2.1 Quản lý bộ nhớ và dọn rác (Garbage Collection)
Trong C, C++ hay Pascal người lập trình sử dụng phương pháp nguyên
thủy để cấp phát và thu hồi bộ nhớ ở vùng “Heap”. Heap là vùng bộ nhớ lớn được
phân chia cho tất cả các Thread.
Để quản lý Heap, bộ nhớ được theo dõi qua các danh sách sau:
− Danh sách các vùng nhớ rảnh chưa cấp phát.
− Danh sách các vùng đã cấp.
Khi có một yêu cầu về cấp phát bộ nhớ, hệ thống kiểm tra xem xét trong
danh sách chưa cấp phát để lấy ra khối bộ nhớ đầu tiên có kích cỡ sát nhất. Chiến
thuật cấp phát này giảm tối thiểu việc phân mảnh của Heap.
“Coalescing” là kỹ thuật khác cũng giảm thiểu việc phân mảnh của Heap
bằng cách gom lại các vùng nhớ chưa dùng liền nhau. Còn kỹ thuật sắp xếp lại
các phần đã dùng để tạo vùng nhớ lớn hơn gọi là “Compaction”
Java sử dụng hai Heap riêng biệt cho cấp phát vùng nhớ tĩnh và vùng nhớ
động. Một Heap (Heap tĩnh) chứa các định nghĩa về lớp, các hằng và danh sách
các phương pháp. Heap còn lại (Heap động) được chia làm hai phần được cấp
phát theo hai chiều ngược nhau. Một bên chứa đối tượng còn bên kia chứa con trỏ
trỏ đến đối tượng đó.
“Handle” là cấu trúc bao gồm hai con trỏ. Một trỏ đến bảng phương pháp

của đối tượng, con trỏ thứ hai trỏ đến chính đối tượng đó. Chú ý rằng khi
“compaction” cần cập nhập lại giá trị con trỏ của cấu trúc “Handle”. Thuật toán
dọn rác có thể áp dụng cho các đối tượng đặt trong Heap động. Khi có yêu cầu về
bộ nhớ, trình quản lý Heap trước tiên kiểm tra danh sách bộ nhớ chưa cấp phát.
Nếu không tìm thấy khối bộ nhớ nào phù hợp (về kích cỡ) thì trình dọn rác sẽ
được kịch hoạt khi hệ thống rảnh. Nhưng khi đòi hỏi bộ nhớ cấp bách thì trình
dọn rác sẽ được kích hoạt ngay.


Trình dọn rác gọi hàm Finalize trước khi dọn dẹp đối tượng. Hàm này sẽ
dọn dẹp các tài nguyên bên ngoài như các file đang mở. Công việc này không
được trình dọn rác thực thi.

2.2 Quá Trình kiểm tra file .class
Việc kiểm tra được áp dụng cho tất cả các file .class sắp được nạp lên bộ
nhớ để đảm bảo tính an toàn.
Trình “Class Loader” sẽ kiểm tra tất cả các file .class không phụ thuộc hệ
điều hành với mục đích giám sát sự tuân thủ các nghi thức để phát hiện các file
.class có nguy cơ gây hư hỏng đến bộ nhớ, hệ thống file cục bộ, mạng hoặc hệ
điều hành. Quá trình kiểm tra sẽ xem xét đến tính toàn vẹn toàn cục của lớp.
File .class bao gồm ba phần logic là:
− Byecode
− Thông tin về Class như method, interface và các giá trị được tập
hợp trong quá trình biên dịch.
− Các thuộc tính về lớp.
Các thông tin của file . class được xem xét riêng rẽ trong các bảng như sau:
− Bảng file chứa các thuộc tính
− Bảng Method chứa các hàm của class
− Bảng Interface chứa các giao diện và các hằng số
Quá trình kiểm tra file .class được thực hiện ở bốn mức:

• Mức đầu tiên thực hiện việc kiểm tra cú pháp để đảm bảo tính cấu
trúc và tính toàn vẹn cú pháp của file .class được nạp
• Mức thứ hai sẽ xem xét file.class để đảm bảo các file này không vi
phạm các nguyên tắc về sự nhất quán ngữ nghĩa.
• Mức thứ ba sẽ kiểm tra bytecode. Trong bước này các thông tin so
sánh sẽ là số thông số truyền của hàm, khả năng truy xuất sai chỉ số
của mảng, chuỗi, biểu thức.
• Mức thứ tư sẽ kiểm tra trong thời gian thực thi để giám sát các việc
còn lại mà ba bước trên chưa làm. Ví dụ như liên kết tới các lớp


khác trong khi thực thi, hay kiểm tra quyền truy xuất. Nếu mọi điều
thỏa mãn, lớp sẽ được khởi tạo.


CHƯƠNG 3: CÁC KIỂU DỮ LIỆU HỖ TRỢ TRONG JVM
Trong JVM hỗ trợ 2 loại kiểu dữ liệu, đó là:
• Kiểu dữ liệu nguyên thủy (primitive)
• Kiểu dữ liệu tham chiếu (references)

3.1 Kiểu dữ liệu nguyên thủy
Các kiểu dữ liệu nguyên thủy mà JVM hỗ trợ bao gồm: Các kiểu số
(numeric types), kiểu logic (boolean type), và các kiểu địa chỉ trả về
(returnAddress type). Kiểu số bao gồm các kiểu số nguyên và các kiểu số
phẩy động.
Kiểu số nguyên gồm
1. byte (gồm 8 bit)
2. short (gồm 16 bit)
3. int (gồm 32 bit)
4. long (gồm 64 bit)

5. char (gồm 16 bit)
Kiểu số phẩy động bao gồm
• Float
• Double
Kiểu logic (boolean type) thì chỉ bao gồm 2 giá trị Đúng (True) hoặc Sai
(False)
Kiểu địa chỉ trả về chính là một loại con trỏ lệnh trong JVM, được sử dụng
để trỏ tới một lệnh trong chương trình Java và không thể thay đổi trong khi chạy
chương trình
Bảng mô tả các kiểu dữ liệu nguyên thủy như sau
Kiểu dữ
liệu

Byte

Độ
dài
theo
số
bít
8

Phạm vi giá trị

Mô tả

-128 đến +127

Số liệu kiểu byte là một loại
điển hình dùng để lưu trữ một



Short

16

Int

32

Long

64

Char

16

giá trị bằng một byte. Chúng
được sử dụng rộng rãi khi xử
lý một file văn bản
-32768 đến +32767
Kiểu Short thường được dùng
để lưu các số có giá trị nhỏ
dưới 32767
-2147483648 đến
Kiểu Int thường được dùng để
+2147483648
lưu một số có giá trị lớn đến
2147483648

-9223372036854775808 đến
Kiểu Long thường được sử
+9223372036854775808
dụng để lưu một số có giá trị
rất lớn
0 đến 65355
Kiểu char sử dụng để lưu tên
hoặc các dữ liệu ký tự
"True" hoặc "False"
Kiểu Boolean thường dùng để
lưu các giá trị đúng hoặc sai
-340292347E+38 đến
Kiểu Float thường dùng để
+340292347E+38
lưu các số thập phân đến
340292347E+38
-179769313486231570E+308 Kiểu Double thường dùng để
đến
lưu các số thập phân có giá trị
+179769313486231570E+308 lớn đến
+179769313486231570E+308

Boolean 1
Float

32

Double

64


3.2 Kiểu dữ liệu tham chiếu
JVM hỗ trợ 3 kiểu dữ liệu tham chiếu : Mảng (array types), Lớp(class
types) và Giao diện(interface types)
Bảng mô tả các kiểu dữ liệu tham chiếu như sau
Kiểu dữ liệu
Mảng (array types)
Lớp(class types)

Giao diện(interface types)

Mô tả
Tập hợp các dữ liệu cùng một loại: Ví
dụ Tên sinh viên
Tập hợp các biến và các phương thức.
Ví dụ: Lớp"Sinh Viên" chứa toàn bộ
các chi tiết của một sinh viên và các
phương thức thực thi trên các chi tiết
đó
Là một lớp trừu tượng được tạo ra để
bổ sung cho các kế thừa đa lớp trong
Java


TÀI LIỆU THAM KHẢO
1.

Java core complete – ICIDREC

2.


Giới thiệu máy ảo Java - JavaDevChannel



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×