2010-04-14 35 views
6

Tôi vừa khởi động lại trình duyệt web firefox của mình một lần nữa vì nó bắt đầu nói lắp và làm chậm. Điều này xảy ra mỗi ngày do (sự hiểu biết của tôi) sử dụng bộ nhớ quá mức. Tôi nhận thấy nó mất 40M khi nó bắt đầu và sau đó, vào thời điểm tôi nhận thấy chậm lại, nó đi đến 1G và máy của tôi không có gì để cung cấp trừ khi tôi đóng các ứng dụng khác. Tôi đang cố gắng hiểu các lý do kỹ thuật đằng sau lý do tại sao một vấn đề khó khăn như vậy của nó là sol .Sử dụng bộ nhớ cao cho núm vú cao su

Mozilla có một trang về việc sử dụng bộ nhớ cao:

http://support.mozilla.com/en-US/kb/High+memory+usage

Nhưng tôi đang tìm một hơi sâu hơn và giải thích thỏa mãn. Không siêu kỹ thuật nhưng đủ để cung cấp cho các vấn đề tôn trọng hơn và xin vui lòng đám đông ở đây.

Một số câu hỏi tôi đã cân nhắc (họ có thể là ngớ ngẩn nên take it easy):

  • Khi tôi đóng tất cả các tab, tại sao không sử dụng bộ nhớ đi tất cả các con đường xuống?
  • Tại sao không có giới hạn về việc sử dụng bộ nhớ mở rộng/chủ đề/bộ nhớ?
  • Tại sao mức sử dụng bộ nhớ tăng nếu nó được mở trong thời gian dài?
  • Tại sao rò rỉ bộ nhớ khó tìm và sửa?

Câu trả lời độc lập về ứng dụng và ngôn ngữ cũng được đánh giá cao.

+0

câu hỏi này hơi rộng. Firefox bị rò rỉ bộ nhớ, tốt nhất là bạn nên đọc về chủ đề đó. Các tab đóng không nhất thiết phải giải phóng bộ nhớ đã được cấp phát cho tab đó. –

+1

và câu hỏi lập trình của bạn là? – KevinDTimm

+1

@KevinDTimm đó là viên đạn cuối cùng trong danh sách – David

Trả lời

10

Các trình duyệt cũng giống như con người - họ già đi, họ nhận được cồng kềnh, và họ nhận được đã bỏ cho các mô hình trẻ hơn và gọn gàng hơn.

Firefox không chỉ là một trình duyệt, nó là một hệ sinh thái. Trong khi tôi cảm thấy các phiên bản gần đây khá cồng kềnh, sản phẩm cốt lõi nói chung là ổn định.

Tuy nhiên, firefox là một hệ sinh thái/nền tảng cho:

1) Badly viết plug-ins

2) Badly viết mã JavaScript mà thực hiện bên trong nó.

3) Adobe flash làm nền tảng cho video hạng nặng và các tập lệnh quảng cáo kém được viết như 'nhấn Osama bin Laden với vịt để giảm lãi suất thế chấp và nhận iPod * miễn phí (tham gia bắt buộc).

4) Trình phát đa phương tiện nhanh và khác.

5) Một số mã Java được nhúng.

Mô tả rò rỉ bộ nhớ cho thấy tập lệnh chạy amok hoặc công cụ của bên thứ ba yêu cầu thêm bộ nhớ. Nếu bạn đã từng chạy Flash trên máy Mac, điều đó gần như được cho cùng với việc sử dụng CPU 90%.

Mục tiêu của hầu hết các ngôn ngữ lập trình không phải là để cứu bạn mà còn cung cấp cho bạn các công cụ để tự cứu mình. Bạn có thể viết mã xấu và cồng kềnh với rò rỉ bộ nhớ bằng bất kỳ ngôn ngữ nào, bao gồm cả những người có bộ sưu tập rác.Các công cụ của bên thứ ba thường không được kiểm tra tốt như chính nền tảng. Các trang web cố gắng làm quá nhiều cũng không phổ biến.

Nếu bạn muốn thực hiện một thử nghiệm để chứng minh điều này, hãy tìm một mac với Firefox và truy cập một trang web được viết tốt như Stack Overflow và dành một giờ. Việc sử dụng bộ nhớ của bạn không nên phát triển nhiều. Sau đó, dành 5 phút truy cập vào các trang ngẫu nhiên trên Myspace.

Bây giờ hãy để tôi cố gắng và giải đáp thắc mắc của bạn dựa trên dự đoán của tôi kể từ khi tôi không quen thuộc với mã nguồn

  • Khi tôi đóng tất cả các tab, tại sao không sử dụng bộ nhớ đi tất cả các cách xuống?

Trong khi mỗi trường hợp trình duyệt là một quá trình độc lập với bộ nhớ riêng, các tab trong một cửa sổ đơn đều nằm trong cùng một quy trình. Firefox được sử dụng để có một số loại bộ nhớ đệm trong bộ nhớ và chỉ đóng một tab không xóa thông tin liên quan ngay lập tức từ bộ nhớ cache trong bộ nhớ. Nếu bạn mở lại một tab vào cùng một trang web, bạn có thể có hiệu suất tốt hơn. Có một số tùy chọn nâng cao để cho phép bạn tắt nó, giống như browser.cache.memory.enable. Hoặc chỉ cần tìm kiếm để tắt bộ nhớ cache.

* Why is there no limits on extensions/themes/plugins memory usage? 

Vì lý do tương tự Windows hoặc Linux không có quy trình kiểm duyệt trên các ứng dụng bạn có thể chạy trên chúng. Đó là một môi trường mở và bạn giả định rủi ro. Nếu bạn muốn một môi trường nơi mà các ứng dụng và phần mở rộng được 'xác nhận', Apple có thể là cách để đi :)

* Why does the memory usage increase if it's left open for long periods of time? 

Không phải tất cả các tính toán và hành động trong một kịch bản có biểu hiện thị giác. Một tập lệnh có thể thực hiện một số nội dung trong nền (như yêu cầu thêm tài liệu, tìm nạp trước nội dung, chỉ là lỗi) ngay cả khi bạn không thấy.

* Why are memory leaks so difficult to find and fix? 

Đó là về kế toán. Hãy suy nghĩ về mọi món đồ bạn từng vay (thậm chí là một cây bút) hoặc một người nào đó mượn từ bạn trong suốt cuộc đời của bạn. Tất cả chúng có được tính không? Rò rỉ bộ nhớ cũng giống như vậy (bạn mượn bộ nhớ từ hệ thống), ngoại trừ việc bạn chuyển các mục xung quanh. Sau đó nhìn vào những thứ trên bàn làm việc của bạn, bạn có để lại bất cứ thứ gì xung quanh bởi vì 'bạn có thể cần nó ngay' mặc dù bạn có thể sẽ không? cùng một câu chuyện.

+4

Tương tự sổ sách kế toán tuyệt vời. –

+0

@Warren: Cảm ơn bạn! – Uri

+0

Và tôi đang sử dụng một máy ... – zaf

2
  • Tại sao rò rỉ bộ nhớ khó tìm và sửa?

Vì một số nhà phát triển từ chối sử dụng các công cụ như Hàng rào điện.

+0

Trình phát triển Firefox sử dụng Valgrind - có khả năng hơn nhiều so với Hàng rào điện. – slacker

+0

Tốt cho họ. Tôi đã có những kỷ niệm tốt khi sử dụng Valgrind để tìm kiếm các vấn đề về bộ nhớ. (Than ôi, mã của tôi có những rắc rối đáng kể vào thời điểm đó nên trải nghiệm tổng thể rất đau đớn, nhưng đó không phải lỗi của Valgrind ...) –

1

Rò rỉ bộ nhớ có mặt ở vị trí đầu tiên vì bạn muốn giữ mọi thứ trong bộ nhớ chứ không phải trên đĩa. Ví dụ: giả sử bạn có trang web có hình ảnh, CSS, JavaSript, văn bản. Nếu để hiển thị trang, bạn sẽ đi đến đĩa cứng mỗi lần bạn muốn sử dụng trình thông dịch JavaScript hoặc trình phân tích cú pháp CSS hoặc công cụ hiển thị phông chữ để hiển thị văn bản, trình duyệt sẽ rất chậm và đôi khi không hoạt động ở tất cả (bởi vì một đoạn JavaScript có thể cần các biến hiện diện còn lại bởi một đoạn JavaScript khác, chẳng hạn). Do đó, một trình duyệt cố gắng giữ tất cả mọi thứ cần thiết cho công việc của nó trong bộ nhớ, và những thứ đó dễ dàng được tham chiếu chéo (JavaScript gọi vào Adobe Flash, Adobe Flash gọi JavaScript và vân vân).Và bạn phải rất cẩn thận với tài liệu tham khảo tài nguyên như vậy, bởi vì làm sạch chúng sớm và ra khỏi trật tự sẽ phá vỡ mã (tốt hơn để giữ một nguồn tài nguyên xung quanh sau đó chết đột ngột vì nó không có).

P.S. Xem thêm this article để biết một số chi tiết đẫm máu.

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