2011-11-21 87 views
9

Trong Thread.java, dòng 146, tôi đã nhận thấy rằng tác giả đã sử dụng một số char[] thay vì String cho trường tên. Có bất kỳ lý do hiệu suất nào mà tôi không biết? getName() cũng bao bọc ký tự trong chuỗi trước khi trả lại tên. Không phải là nó tốt hơn để chỉ sử dụng một String?Tại sao sử dụng char [] thay vì String?

+3

Gọi đến chuỗi. {GetChars, getBytes, toLowerCase, ...} tất cả trả về các đối tượng mới là bản sao của chuỗi gốc. Nếu bạn làm việc với chuỗi lớn hoặc gọi một trong những phương pháp này nhiều lần. Bạn có thể kết thúc với các bộ sưu tập rác bổ sung không cần thiết. Ví dụ, hãy tưởng tượng một nhịp tim HTTP cho bất kỳ lý do gì được gọi là OutputStream.write (epochTimeString.getBytes()) trên mỗi nhịp. Bạn phải lo lắng về những chi tiết này thường xuyên hơn nếu bạn làm việc với Mobile JVMs. – eSniff

Trả lời

6

Nói chung, có. Tôi nghi ngờ char[] đã được sử dụng trong Thread vì lý do hiệu suất, trở lại trong những ngày khi những thứ như vậy trong Java yêu cầu mọi nỗ lực để có được hiệu suất tốt. Với sự ra đời của các JVM hiện đại, các tối ưu hóa vi mô như vậy đã từ lâu trở nên không quan trọng, nhưng nó chỉ còn lại theo cách đó.

Có rất nhiều mã lạ trong nguồn Java 1.0 thời đại cũ, tôi sẽ không chú ý quá nhiều vào nó.

+0

Tôi cũng nghi ngờ điều này. Nhưng sau đó tôi thấy 'String name' trong ThreadGorup tôi đã nhầm lẫn. Cảm ơn câu trả lời. –

+0

Tôi sẽ chấp nhận câu trả lời này bởi vì nhiều người cho rằng không có lý do chính đáng nào. –

+0

Chuỗi là bất biến nên đó là lý do tại sao anh ta sử dụng nó. Hiệu quả phiên bản java 2end nói rằng "Luôn luôn sử dụng String thay thế bất cứ khi nào có thể" của Josha Blouch –

2

Khó nói. Có lẽ họ đã có một số tối ưu trong tâm trí, có lẽ người đã viết mã này chỉ đơn giản là sử dụng nhiều hơn cho các mảng kiểu C char* cho các chuỗi, hoặc có lẽ do thời gian mã này được viết, họ không chắc chắn nếu chuỗi sẽ không thay đổi hay không. Nhưng với mã này, bất cứ lúc nào một số Thread.getName() được gọi, một mảng char mới được tạo ra, vì vậy mã này thực sự nặng hơn trên GC hơn là chỉ sử dụng một chuỗi.

+0

+1 Điều này đúng về GC. –

1

Có thể lý do là bảo vệ an ninh? Chuỗi có thể được thay đổi với sự phản ánh, do đó tác giả muốn sao chép đọc và viết. Nếu bạn đang làm điều đó, bạn cũng có thể sử dụng mảng char để sao chép nhanh hơn.

Các vấn đề liên quan