2011-10-22 36 views
5

Tôi là một ứng dụng Java, không đủ nhanh như tôi mong đợi. Tôi đã thực hiện rất nhiều tìm kiếm về cách cải thiện nó, nhưng không may mắn.Làm thế nào để biết bao nhiêu thời gian bằng cách "đồng bộ" mã, trong Java?

Bây giờ tôi đang xem xét mã và thấy rằng có rất nhiều từ khóa synchronized trong mã. Tôi đang nghĩ nếu họ mất quá nhiều thời gian chờ đợi ổ khóa.

Có công cụ nào để kiểm tra xem họ mất bao nhiêu thời gian? Vì vậy, tôi có thể tìm thấy một giải pháp tốt hơn nếu họ làm tốn quá nhiều thời gian.

+2

Nếu 'đồng bộ hóa 'được thực hiện ở các khối lớn hơn mức cần thiết, chúng có thể dẫn đến hiệu suất giảm do chờ đợi không cần thiết. – Cratylus

+1

Bạn đã thử bất kỳ công cụ định hình nào chưa? – xappymah

Trả lời

4

Tôi sẽ đề xuất tính năng Theo dõi Chủ đề của jvisualvm và, trong khi tìm kiếm ảnh chụp màn hình, hãy chạy vào blogpost này: Detecting Thread Contentions. Đó là cách tốt hơn so với chỉ là một ảnh chụp màn hình :).

Nhưng ở đây nó là anyway: thread contention in jvisualvm (tín dụng hình ảnh: nói trên bài đăng blog)

1

Trình lược tả tốt sẽ có thể xác định các phương pháp gây chậm đi, có thể không liên quan đến đồng bộ hóa. Ngoài ra nhìn vào trạng thái của các chủ đề trong hồ sơ có thể tiết lộ nếu có quá nhiều chờ đợi xảy ra vì đồng bộ hóa. Trong mọi trường hợp, trừ khi từ khóa đồng bộ đang được sử dụng mà không có lý do nó có thể phản tác dụng để loại bỏ nó vì lợi ích của hiệu suất.

+0

Nếu 'sunchronization' là không cần thiết, nó sẽ dẫn đến mất hiệu suất.Nếu 'đồng bộ hóa' là cần thiết i) nó nên được thực hiện đến mức độ chi tiết thích hợp ii) nếu nó được gỡ bỏ nó sẽ không phản tác dụng - nó sẽ là một mớ hỗn độn – Cratylus

+0

user384706 Tôi đồng ý. OP cần hiểu tại sao mã chỉ được đồng bộ hóa sau đó có thể thực hiện các biện pháp khắc phục phù hợp. –

1

Chi phí đồng bộ hóa thường là nhỏ. Vấn đề thường là những gì bạn làm trong các khối đồng bộ hóa. Hãy chắc chắn rằng bạn không làm bất kỳ IO, (ổ cắm hoặc mạng) và lý tưởng không có cuộc gọi hệ thống nào cả và thời gian khóa sẽ là phụ micro giây cho các tác vụ đơn giản.

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