- Khi mu n t i u v t c đ , tr c tiên, c n t p trung vào t i u vi c thi t k
và l a ch n gi i thu t cho h p lý, sau đó m i th c hi n vi c c i thi n t c đ m c c p th p trên t ng dòng l nh b i vì ph n l n th i gian ch ng trình ho t đ ng đ c dùng cho vi c th c hi n các hàm x lý trong th vi n do chúng ta g i đ n, đ c bi t là đ i v i các ch c n ng x lý đ h a c p th p.
- Quy t c 90/10 : “trong các ch ng trình có nhu c u x lý đ h a l n, đ c bi t là các ph n m m trò ch i hành đ ng, 90% t ng th i gian x lý c a ch ng trình dùng đ x lý 10% mã ngu n”. Nh v y, 90% mã ngu n còn l i ch c n 10% th i gian đ x lý. Do
đó, chúng ta c n ph i t p trung xác đnh nh ng thao tác x lý nào tiêu t n nhi u th i gian x lý nh t đ tìm cách t i u hóa chúng. - Hi u su t thi hành các l nh không gi ng nhau trên thi t b c a các nhà s n xu t khác nhau do m i hãng s n xu t có công ngh và cách cài đ t x lý theo đ c t MIDP khác nhau.
4.2.2. Tìm các v trí c n t i u v t c đ v i Profiler :
Trong b công c l p trình J2ME c a Sun (Sun Wireless Toolkit) có cung c p cho chúng ta m t ti n ích dùng đ th ng kê t n su t
ho t đ ng và tài nguyên CPU dành cho t ng ch c n ng x lý (công c này đ c g i là profiler). D a vào b ng th ng kê này, chúng ta có th xác đnh đ c hàm nào đ c g i th c hi n nhi u nh t, chi phí dành cho m i l n th c hi n là bao nhiêu và cho con s t ng c ng v t ng s tài nguyên đ c cung c p cho m i hàm trong toàn b th i gian mà ch ng trình ho t đ ng. T b ng th ng kê này, chúng ta có th xác đ nh đ c hàm nào s d ng nhi u tài nguyên nh t đ t p trung vào vi c t i u nó.
hi n th profiler, trong màn hình chính c a Sun Wireless Toolkit, ch n menu Edit -> Preferences. Ch n tab Monitor, đánh d u check vào ô Enable Profiling trong khung Profiler. Sau khi trình gi l p k t thúc vi c th c thi ng d ng, c a s Methods’ Profiler hi n ra nh sau :
Hình 4.3 : Màn hình giao di n công c Profiler
4.2.3. Xác đnh th i gian th c thi :
Profiler giúp chúng ta xác đ nh đ c s l ng chu k x lý c n cho m i hàm, tuy nhiên l i không giúp chúng ta xác đ nh đ c th i gian c th cho m i hàm x lý và profiler c ng không đ c cung c p trên thi t b th t. Vì v y, chúng ta có th xây d ng riêng m t đo n mã nh m xác đ nh kho ng th i gian dùng cho hàm b ng cách s d ng gi h th ng :
long startTime = System.currentTimeMillis(); //Tr c khi g i hàm
g i_hàm();
long timeTaken = System.currentTimeMillis() – startTime; //Kho ng th i gian th c thi
4.2.4. Th c hi n t ng t c cho ch ng trình :
- Ch nên t p trung t i u các thao tác có s l ng chu k x lý l n.
- H u h t các hàm trong th vi n đ h a c p th p ví d nh các hàm v đ i t ng đ h a c s (đ ng th ng, hình ch nh t, cung, ellipse…), các hàm tô màu đ u s d ng r t nhi u chu k máy, vì v y, c n h n ch s l n g i các hàm này.
- S d ng hàm setClip(…) đ h n ch vùng c n v . - em các tính toán ra bên ngoài vòng l p n u có th .
- N u không làm nh h ng đ n thi t k ch ng trình, cài đ t các ph ng
th c d ng static final s giúp ph ng th c đ c th c hi n nhanh h n. Tránh s d ng ph ng th c synchronized, ph ng th c này ch m do ph i lock nh ng đ i t ng c n thi t.
synchronized ch m nh t interface ch m
final nhanh
static nhanh nh t
- Vi c kh i t o m t đ i t ng inner class m t g p đôi th i gian so v i vi c kh i t o m t đ i t ng c a l p th ng.
- i v i các hàm th ng xuyên đ c s d ng, cài đ t sao cho vi c truy n tham s cho hàm càng ít càng t t.
- H n ch vi c tách m t hàm l n thành nhi u hàm nh vì khi chia thành nhi u hàm nh s khi n cho l p t ng kích th c, đ ng th i s ph i m t th i gian cho vi c truy n tham s gi a các hàm m c dù cách làm này giúp chúng ta d dàng h n trong công tác b o trì. - CPU c a máy tính c ng nh c a các thi t b di đ ng th c hi n vi c so sánh m t s v i s 0 nhanh h n so v i các s khác 0. Trong các vòng l p nên t n d ng đi u này b ng các đ m ng c các bi n đ m. Thông th ng, chúng ta cài đ t vòng l p nh sau :
for (int i=0; i<n; i++) {
}
Nh ng, s nhanh h n n u chúng ta cài đ t ng c l i :
for (int i=n; --i>=0; ) {
……. }
- Các phép toán trên bit có t c đ r t cao, vì v y, nên s d ng các phép toán d ch bit (shift left, shift right) thay cho phép toán nhân, chia v i các s là l y th a c a 2.
- Trong ngôn ng Java, vi c truy xu t m t ph n t c a m ng ch m h n r t nhi u so v i ngôn ng C. M i khi chúng ta truy xu t m t ph n t , Java đ u ki m tra ch s đ a vào có h p l hay không. N u ch s này nh h n 0 ho c l n h n ch s c a ph n t cu i thì Java s thông báo ngo i l
ArrayIndexOutOfBoundsException.
Nh v y, m t ph n t trong m ng n u đ c truy xu t nhi u l n
- Khi c n sao chép m ng, nên s d ng hàm sao chép do J2ME cung c p s n s nhanh h n r t nhi u so v i vi c s d ng vòng l p. Cú pháp nh sau : System.arraycopy(Object, int, Object, int, int) - Bi n c c b khai báo trong thân hàm đ c truy xu t nhanh h n bi n đ c khai báo m c instance. N u chúng ta c n th c hi n nhi u phép toán v i các bi n đ c khai báo m c instance nh ví d sau :
public class Foo {
private int[] array;
...
public void foo()
{
for (int i=array.length; --i ; )
{
array[i] = i*2;
}
} }
o n ch ng trình nh trên khi th c hi n s không nhanh b ng
đo n ch ng trình sau :
public class Foo {
private int[] array;
...
public void foo()
{
int[] myArray = array;
for (int i = myArray .length; --i ; )
{
myArray [i] = i*2;
}
} }
- Vi c kh i t o m t đ i t ng c ng m t nhi u th i gian. Do v y, n u có th đ c, chúng ta nên t n d ng m t đ i t ng s n có r i c p nh t l i các giá tr , các thu c tính c a chúng thay vì t o m t
đ i t ng m i. - Phép toán chia th c hi n ch m h n so v i phép toán nhân, vì th , n u c n ph i chia nhi u l n cho cùng m t s , chúng ta có th tính ngh ch đ o c a s chia r i dùng k t qu tìm
đ c nhân v i s b chia.
- Nh ng đo n ch ng trình có khai báo try/catch đ x lý các Exception c ng có t c đ r t ch m. Do đó, n u không b b t bu c ph i khai báo nh v y, chúng ta không nên s d ng chúng trong ch ng trình.
4.3. T i u hóa vi c s d ng b nh :
4.3.1. Công c theo dõi vi c s d ng b nh :
B công c l p trình J2ME c a Sun (J2ME Wireless Toolkit) cung c p cho chúng ta m t ti n ích nh m theo dõi vi c s d ng b nh c a ch ng trình, bao g m các tính n ng c b n sau :
• Theo dõi quá trình c p phát b nh khi ch ng trình g i th c hi n m t ph ng th c.
• Cho bi t t ng s đ i t ng đ c c p b nh , l ng b nh
đang đ c s d ng và dung l ng b nh còn tr ng. • Cho bi t l ng b nh đ c c p cho t ng ki u d li u. • H tr theo dõi vi c thu h i b nh t các đ i t ng không
còn đ c s d ng (garbage collector). • ...
4.3.2. S d ng Memory Monitor theo dõi vi c s d ng b nh : nh :
T menu Edit -> Preferences, ch n b ng Monitor, sau đó, đánh d u ch n vào ô “Enable Memory Monitor” trong khung “Memory Monitor”.
Khi ng d ng đ c g i th c thi, màn hình “Memory Monitor Extension” xu t hi n cùng v i trình gi l p. Màn hình giao di n c a công c nh sau :
Hình 4.4 : Màn hình giao di n công c theo dõi vi c s d ng b nh D a vào các thông tin là công c Memory Monitor Extension cung c p, ta có th bi t đ c b nh c a thi t b dùng ch y u vi c gì, trong th i đi m đó. Nh đó mà ta có th có k ho ch t i
4.3.3. Các nguyên t c t i u hóa vi c s d ng b nh :
- S d ng càng ít đ i t ng càng t t và ch c p phát b nh khi c n thi t.
- i v i các đ i t ng không còn c n đ c s d ng n a, nên gán cho chúng giá tr null đ giúp garbage collector nh n di n đ c vùng nh không còn đ c s d ng n a đ thu h i.
- B nh c a các thi t b di đ ng r t h n ch , do v y, trong thi t k ch ng trình, chúng ta nên tránh vi c xây d ng các hàm có nhu c u đ c c p phát kh i l ng b nh l n.
- Trong J2ME, vi c thu h i b nh không còn đ c s d ng đ c th c hi n thông qua garbage collector. Tuy nhiên, khi nào vi c thu d n này đ c th c hi n là do ng i l p trình t quy t đnh. M t khác, vi c th c thi hàm thu h i b nh System.gc() c ng m t nhi u th i gian. Vì v y, chúng ta c n qu n lý b nh ch t ch , gi i phóng b nh n u không c n s d ng n a và ch nên g i ch c n ng thu h i b nh khi c n thi t.
- Trong ngôn ng Java, chúng ta có th n i nhi u chu i ký t ch
đ n gi n b ng cách th c hi n toán t “+” nh ví d sau :
public String indent (String line, int spaces)
for (int i=0;i<spaces;i++) { strOut += “ ”; } return strOut; }
Tuy nhiên, xét v hi u su t ho t đ ng, cách làm nh v y s không t t b i vì m i khi th c hi n vi c n i 2 chu i ký t (ki u String), Java s t o m t đ i t ng ki u StringBuffer, sau đó g i th c hi n ph ng th c append c a đ i t ng này 2 l n đ n i 2 chu i ký t l i và cu i cùng, th c hi n ph ng th c toString() đ t o đ i t ng ki u String r i tr v k t qu . N u vi c n i chu i đ c th c hi n nhi u l n, đ c bi t là trong m t vòng l p s d n đ n vi c t o r t nhi u đ i t ng ki u String và StringBuffer. K t qu là khi n cho ch ng trình s d ng và t o nhi u rác trong b nh , m t khác s làm t ng th i gian x lý c a ch ng trình do ph i m t nhi u th i gian kh i t o các đ i t ng. C i ti n đo n ch ng trình trên nh sau :
public String indent (String line, int spaces)
{
StringBuffer out = new StringBuffer(); for (int i=0;i<spaces;i++)
{
out.append(‘ ’); }
return out.toString(); }
Ch ng 5: H ng d n s d ng
5.1. Di chuy n b n đ :
di chuy n b n đ , chúng ta s d ng các phím theo s đ sau :
Phím 1 : di chuy n b n đ lên góc trên bên trái Phím 2 : di chuy n b n đ lên trên
Phím 3 : di chuy n b n đ lên góc trên bên ph i Phím 4 : di chuy n b n đ sang trái
Phím 6 : di chuy n b n đ sang ph i
Phím 7 : di chuy n b n đ xu ng góc d i bên trái Phím 8 : di chuy n b n đ xu ng d i Phím 9 : di chuy n b n đ xu ng góc d i bên ph i 5.2. Phóng to, thu nh b n đ : Hình 5.2 : Các phím phóng to, thu nh b n đ Phím * : phóng to b n đ Phím # : thu nh b n đ 5.3. Di chuy n con tr
Hình 5.3 : Các phím di chuy n con tr
Con tr đ c hi n th trên màn hình d i d ng m t ch th p (+) màuđ , dùng đ xác đnh m t v trí trên màn hình.
di chuy n con tr , chúng ta s d ng c m phím m i tên trên
đi ntho i. H ng c a m i tên c ng là h ng di chuy n con tr .
5.4. Tìm đ ng
Hình 5.4 : B t đ u vi c tìm đ ng tìm đ ng:
• B m vào soft key v trí Find Street trong màn hình b n đ
• Ch n Search trong menu chính
Ch ng trình s m màn hình tìm đ ng , ta ch c n gõ tên đ ng g i ý và ch n đ ng v i tên chính xác bên d i.
sau khi ch n Ok, ng i dùng s đ c chuy n đ n v trí trên b n đ c a đ ng đã đ c ch n. 5.5. Tìm đ ng đi: b t đ u tìm đ ng đi, ng i dùng c n xác đnh đi m b t đ u và đi m k t thúc ch n đi m b t đ u và di m k t thúc:
Di chuy n con tr đ v trí cân xác đnh, nh n phím 5, m t menu pop up s yêu c n xác đ nh đi m v a ch n là đi n b t đ u hay đi m k t thúc
Hình 5.5 : Xác đ nh v trí b t đ u c a đ ng đi
M t kí hi u nh xu t hi n đ xác nh n đi m mà ng i dùng v a ch n
Hình 5.6 : Các kí t nh c v trí tìm đ ng đi
b t đ u tìm đ ng đi, nh n soft key t i v trí nút Find Path ho c ch n Shortest Path trong menu
K t thúc quá trình tìm đ ng, đ ng đi ng n nh t gi a hai đi m đã ch n đ c tô đ . Ngoài ra ng i dùng có th ch n Expain Route đ
Hình 5.7 : Hoàn t t vi c tìm đ ng đi
5.6. Xem tr giúp và gi i thi u:
xem các thông tin tr giúp và thông tin gi i thi u, ch c n ch n Help hay About trên menu c a ch ng trình
Ch ng 6: T ng k t – đánh giá
Có th nói, đây là ng d ng b n đ ch y trên thi t b di đ ng h tr J2ME có dung l ng d li u r t l n, n u so v i m t s s n ph m khác. L ng d li u ph i tính toán cho m i m t l n v b n đ là r t l n, nh ng nh ph ng pháp chia nh d li u thành nhi u cell mà t c đ m i l n v có th coi là t m ch p nh n đ c.
Nhìn chung, s n ph m ch hoàn thi n m t m c t ng đ i, còn khá nhi u khuy t đi m mà ch a có h ng gi i quy t:
Vi c v tên đ ng là ch a th t t t, các kí t tên đ ng đ c s p x p ch a
đ c đ p m t.
Vi c s d ng b nh khá nhi u nh ng d ng này là đi u r t khó kh n đ
áp d ng th c t . Các đi n tho i ngày nay đa s ch có kho ng t 1Mb đ n 1.5Mb b nh Heap. tuy nhiên, trong khi trong quá trình ki m tra, dung l ng b nh s d ng đ c nh n th y là cao h n nhi u so v i m t s thi t b ngày nay.
Ph l c:
Danh sách hình nh s d ng
Hình 1.1 Các phiên b n java trên các thi t b Hình 1.2: Ki n trúc J2ME
Hình 1.3: Các thi t b có th s d ng Java