Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 67 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
67
Dung lượng
1,44 MB
Nội dung
Java’s Performance Java’s Performance Nội dung chính Nội dung chính Giới thiệu vấn đề Giới thiệu vấn đề Yêu cầu tốiưuhóa Yêu cầu tốiưuhóa Xử lý xâu kí tự Xử lý xâu kí tự Pure Overhead Pure Overhead Hiệu năng trong các lớp Collection Hiệu năng trong các lớp Collection Catching trong tốiưuhóa Catching trong tốiưuhóa Java I/O Stream Java I/O Stream Giới thiệu vấn đề Giới thiệu vấn đề Performance là một trong những tiêu chí đánh giá chất Performance là một trong những tiêu chí đánh giá chất lượng phần mềm lượng phần mềm Để khai thác Performance của một phần mềm, có hai Để khai thác Performance của một phần mềm, có hai khả năng : khả năng : Khi muốn nâng cao performance, có thể phải giảm đi, hay tác động đến Khi muốn nâng cao performance, có thể phải giảm đi, hay tác động đến những tiêu chí khác. những tiêu chí khác. Có thể tăng được performance mà không tác động đến những tiêu chí Có thể tăng được performance mà không tác động đến những tiêu chí khác. Và để làm được như vậy, bạn phải hiểu được, từng câu lệnh, khác. Và để làm được như vậy, bạn phải hiểu được, từng câu lệnh, từng khai báo sử dụng trong một từng khai báo sử dụng trong một chương trình. chương trình. Giới thiệu vấn đề Giới thiệu vấn đề Các yếu tố tác động đến Performance : Các yếu tố tác động đến Performance : Khả năng phần cứng Khả năng phần cứng Thực thi máy ảo Thực thi máy ảo Các tham số điều chỉnh hệ thống và JVM Các tham số điều chỉnh hệ thống và JVM Kiến trúc thiết kế ứng dụng* Kiến trúc thiết kế ứng dụng* JDK JDK Khả năng quản lý bộ nhớ Khả năng quản lý bộ nhớ Hiệu quả mã hóa * Hiệu quả mã hóa * Yêu cầu tốiưuhóa Yêu cầu tốiưuhóa Những yêu cầu trước khi tốiưuhóa Những yêu cầu trước khi tốiưuhóa Code optimize được xem là một quá trình biến đổi một source Code optimize được xem là một quá trình biến đổi một source code cũ sang một source code mới. Việc chuyển đổi này có code cũ sang một source code mới. Việc chuyển đổi này có những đặc tính: những đặc tính: • Giữ được tính chính xác Giữ được tính chính xác • Hiệu quả hơn cái code cũ Hiệu quả hơn cái code cũ • Code optimize thường mất đi tính khái quái và kém khả năng sử Code optimize thường mất đi tính khái quái và kém khả năng sử dụng lại. Đơn giản là do nó dụng lại. Đơn giản là do nó thu hẹp phạm vi và tập trung vào vấn thu hẹp phạm vi và tập trung vào vấn đề cẩn phải giải quyết đề cẩn phải giải quyết • Code mới thường phức tạp hơn code cũ. Nó có tính phức tạp, khó Code mới thường phức tạp hơn code cũ. Nó có tính phức tạp, khó hiểu, khó bảo trì,khó sửa đổi & mở rộng hiểu, khó bảo trì,khó sửa đổi & mở rộng Yêu cầu tốiưuhóa Yêu cầu tốiưuhóa Những yêu cầu trước khi tốiưuhóa Những yêu cầu trước khi tốiưuhóa Với những lý luận này, tốiưuhóa phần mềm là một công việc Với những lý luận này, tốiưuhóa phần mềm là một công việc tương đối rủi ro. Nó có thể tác động không tốt đến những tiêu tương đối rủi ro. Nó có thể tác động không tốt đến những tiêu chí khác quan trọng không kém của phần mềm. vì vậy, cần phải chí khác quan trọng không kém của phần mềm. vì vậy, cần phải có sự cân nhắc khi thực hiện: có sự cân nhắc khi thực hiện: • Cần profile hóa đoạn mã cũ Cần profile hóa đoạn mã cũ • Xem xét những yếu tố trả về khi thực hiện tốiưu Xem xét những yếu tố trả về khi thực hiện tốiưu . . Xử lý xâu kí tự Xử lý xâu kí tự Xử lý xâu chuỗi là một vấn đề thường xuyên gặp khi lậptrình Java, đặc Xử lý xâu chuỗi là một vấn đề thường xuyên gặp khi lậptrình Java, đặc biệt là trong các ứng dụng Web biệt là trong các ứng dụng Web ( String, StringBuffer hay StringTokenizer ). ( String, StringBuffer hay StringTokenizer ). Các vấn đề tốiưu trong xâu kí tự: Các vấn đề tốiưu trong xâu kí tự: 1. 1. Ghép nối xâu chuỗi Ghép nối xâu chuỗi 2. 2. Quản lý đối tượng Quản lý đối tượng 3. 3. So sánh chuỗi So sánh chuỗi 4. 4. Chuyển đỗi kí tự & byte Chuyển đỗi kí tự & byte 5. 5. charAt() & startWidth() charAt() & startWidth() 6. 6. StringBuffer’s Capacity StringBuffer’s Capacity Xử lý xâu kí tự Xử lý xâu kí tự 1. 1. Ghép nối xâu chuỗi Ghép nối xâu chuỗi ví dụ: String p = a+b; ( có bao nhiêu đối tượng được tạo ra ? ) ví dụ: String p = a+b; ( có bao nhiêu đối tượng được tạo ra ? ) String p = (new StringBuffer()).append(a).append(b).toString() String p = (new StringBuffer()).append(a).append(b).toString() String s = new String(); String s = new String(); // <+++ Start timing // <+++ Start timing long start = System.currentTimeMillis(); long start = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { for (int i = 0; i < 10000; i++) { s += "a"; s += "a"; } } // <+++ Stop timing // <+++ Stop timing long stop = System.currentTimeMillis(); long stop = System.currentTimeMillis(); // Result : 2200 mili s // Result : 2200 mili s StringBuffer s = new StringBuffer(); StringBuffer s = new StringBuffer(); // <+++ Start timing // <+++ Start timing long start = System.currentTimeMillis(); long start = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { for (int i = 0; i < 10000; i++) { s.append("a"); s.append("a"); } } // <+++ Stop timing // <+++ Stop timing long stop = System.currentTimeMillis(); long stop = System.currentTimeMillis(); // Result: 8 mili s // Result: 8 mili s Nhận xét : Sử dụng StringBuffer với các thao tác ghép nối, thay đổi giá trị xâu chuỗi. Xử lý xâu kí tự Xử lý xâu kí tự 2. 2. Quản lý đối tượng Quản lý đối tượng printWriter.print(x+y); printWriter.print(x+y); printWriter.print(x); printWriter.print(x); printWriter.print(y); printWriter.print(y); Nhận xét : Cân nhắc các tác động đến hiệu năng do hiệu tạo ra đối tượng mới Xử lý xâu kí tự Xử lý xâu kí tự 3. 3. So sánh chuỗi So sánh chuỗi Có hai phần: Case sessitive & non-senssitive Có hai phần: Case sessitive & non-senssitive 1. equals() 1. equals() 2. equalsIgnoreCase() 2. equalsIgnoreCase() // Compare two identical strings // Compare two identical strings public class Equals_1 { public class Equals_1 { public static void main(String args[]) { public static void main(String args[]) { String s = "H"+"elloWorld"; String s = "H"+"elloWorld"; String p = "HelloWorl"+"d"; String p = "HelloWorl"+"d"; // <+++ Start timing // <+++ Start timing long start = long start = System.currentTimeMillis(); System.currentTimeMillis(); for (int i = 0; i < 10000000; i++) { for (int i = 0; i < 10000000; i++) { s.equals(p); s.equals(p); } } // <+++ Stop timing // <+++ Stop timing long stop = long stop = System.currentTimeMillis(); System.currentTimeMillis(); System.out.println( " time = " + (stop - System.out.println( " time = " + (stop - start) ); start) ); }} }} // Compare two strings of same length but // Compare two strings of same length but different case different case public class Equals_2 { public class Equals_2 { public static void main(String args[]) { public static void main(String args[]) { String s = "HelloWorld"; String s = "HelloWorld"; String p = "HelloWorlD"; String p = "HelloWorlD"; // <+++ Start timing // <+++ Start timing long start = System.currentTimeMillis(); long start = System.currentTimeMillis(); for (int i = 0; i < 10000000; i++) { for (int i = 0; i < 10000000; i++) { s.equals(p); s.equals(p); } } // <+++ Stop timing // <+++ Stop timing long stop = System.currentTimeMillis(); long stop = System.currentTimeMillis(); }} }} [...]... trị khởi đầu tránh cho việc phải thay đổi kích thước StringBuffer trong quá trình sử dụng Pure Overhead Giới thiệu vấn đề: Việc tối ưuhóa đỏi hỏi phải cân bằng được các yếu tố có khả năng xung đột lẫn nhau trong một phần mềm (tính mềm dẻo, khả năng bảo trì, giá cả, khả năng tái sử dụng ).Tuy nhiên vẫn có những trường hợp tối ưu mà không làm ảnh hưởng đến những tiêu chí khác ( pure overhead ) Pure Overhead... rằng, đa số các trình duyệt mà client sử dụng đều chỉ tập trung trên môt số loại như I.E , Mozzila thì chúng ta có thể tập trung vào việc xử lý những request đến từ các loại trình duyệt này, trước khi đưa ra những xử lý chung cho tất cả các loại trình duyệt khác nhau Pure Overhead 3 Nguyên tắc 80-20 Trong HTTP request, trường HTTP Accept header xác định những định dạng nội dung mà trình duyệt có thể... - start) ); }} // Result : 2.500 mili s Xử lý xâu kí tự 4 Chuyển đổi Characters Bytes Một giải pháp phần mềm mang tính khái quát có thể ảnh hưởng đến hiệu năng của hệ thống Một điều cơ bản của tối ưuhóa là hãy thu hẹp phạm vi vấn đề giải quyết Chính điều này mâu thuẫn trưc tiếp với tính tái sử dụng trong thiết kế phần mềm theo hướng đối tượng Mỗi một kí tự Unicode có thể chuyển thành 2,3 byte... chúng ta phải viết : if (headerName.equalsIgnoreCase("Accept:")) { // This is the Accept header } Tuy nhiên, so sánh như vậy sẽ ảnh hưởng đến hiệu năng Tại sao chúng ta không nghĩ đến một giải pháp tối ưu hơn : tập trung xử lý trước tiên đối với những "Accept :" của I.E, hay Mozzila, trước khi đưa ra một xử lý chung, theo đúng đặc tả if (headerName.equals("Accept:") || headerName.equalsIgnoreCase("Accept:"))... mặc định Vector v = new Vector() bằng Vector v = new Vector(x),với x là một giá trị ước lượng Ngoài ra, còn một tham số nữa có thể sử dụng là mức độ gia tăng phần tử trong quá trình mở rộng, với mục đích ở đây là giảm thiểu hóa việc tác động hiệu năng khi Vector bắt buộc phải mở rộng Ví dụ: Vector v = new Vector(100,25); Vector & Hashtable 3 Vector Enumeration int size = v.size(); for (int i = 0; i... tốc độ thực thi nhanh hơn add(), do nó trả về giá trị void, trong khi add() trả về một giá trị boolean Vector & Hashtable 2 Vector’s Capacity Khái niệm Vector’s Capacity giống như trong StringBuffer Quá trình mở rộng của Vector, đòi hỏi bộ nhớ phải cấp phát một mảng mới, và copy dữ liệu từ mảng cũ sang mảng mới, xóa mảng cũ đi Chính vì thế, nó cũng sẽ tác động tương đối đến hiệu quả thực thi của phần... v.remove(size); long stop = System.currentTimeMillis(); // . Java s Performance Java s Performance Nội dung chính Nội dung chính Giới thiệu vấn đề Giới thiệu vấn đề Yêu. ưu hóa Catching trong tối ưu hóa Java I/O Stream Java I/O Stream Giới thiệu vấn đề Giới thiệu vấn đề Performance là một trong những tiêu chí đánh giá chất Performance là một trong những tiêu. lượng phần mềm Để khai thác Performance của một phần mềm, có hai Để khai thác Performance của một phần mềm, có hai khả năng : khả năng : Khi muốn nâng cao performance, có thể phải giảm