Tôi đã đọc rất nhiều lần rằng đánh giá lười biếng trong Haskell đôi khi có thể dẫn đến rò rỉ không gian. Loại mã nào có thể dẫn đến rò rỉ không gian? Làm thế nào để phát hiện chúng? Và những biện pháp phòng ngừa có thể được thực hiện trên một phần của một lập trình viên để tránh chúng?Rò rỉ không gian trong Haskell
Trả lời
Bạn sẽ nhận được rất nhiều câu trả lời, đây là câu trả lời, tôi đã gặp phải khi cố gắng thực hiện một số ứng dụng 'thế giới thực'. Tôi đã sử dụng đa luồng và một số MV để truyền dữ liệu xung quanh (MVar giống như bộ nhớ được chia sẻ bị khóa). mô hình điển hình của tôi là:
a <- takeMVar mvar
putMVar mvar (a + 1)
Và sau đó, chỉ thỉnh thoảng, khi một điều kiện thích hợp xảy ra tôi đã làm một cái gì đó như:
a <- takeMVar mvar
when (a > 10) ....
Vấn đề là nội dung của MVAR là chủ yếu (0 + 1 + 1 + 1 + ....) ... khá chuyên sâu cho các con số như 100k ... Loại vấn đề này khá phổ biến trong mã của tôi; Thật không may cho các ứng dụng đa luồng nó rất dễ dàng để có được vào các vấn đề như vậy.
Phát hiện ... những gì tôi đã làm là bắt đầu Haskell ở chế độ sản xuất dữ liệu liên quan đến tiêu thụ bộ nhớ, khởi động và dừng chủ đề khác nhau và tìm kiếm nếu bộ nhớ là ổn định hay không ...
Tôi đã gặp sự cố này khi thực hiện đệ quy trên cấu trúc dữ liệu lớn. Các khối xây dựng được nhận được quá nhiều và sau đó bạn nhận được một rò rỉ không gian.
Trong Haskell, bạn cần phải liên tục nhận thức được khả năng chạy vào chỗ rò rỉ. Vì phép lặp không tồn tại, về cơ bản, bất kỳ hàm đệ quy nào đều có khả năng tạo ra một rò rỉ không gian.
Để tránh sự cố này, hãy ghi nhớ các hàm đệ quy hoặc viết lại chúng theo cách đệ quy.
- 1. Cây lười có rò rỉ không gian
- 2. Rò rỉ dữ liệu bị rò rỉ trong Safari (là: Rò rỉ bộ nhớ với canvas HTML5)
- 3. Rò rỉ - GeneralBlock-3584
- 4. Haskell: Rò rỉ bộ nhớ từ ST/GC không thu thập?
- 5. rò rỉ bộ nhớ trong Microsoft.FSharp.Control.Mailbox?
- 6. Rò rỉ (cụ) báo cáo rò rỉ trong các đối tượng tự động phát hiện
- 7. Rò rỉ bộ nhớ CheckedListBox
- 8. Rò rỉ bộ nhớ trong .NET
- 9. Rò rỉ bộ nhớ AVAudioPlayer
- 10. Rò rỉ bộ nhớ trong Swing
- 11. rò rỉ bộ nhớ Python
- 12. Python - Rò rỉ bộ nhớ
- 13. Rò rỉ bộ nhớ trong mã webcam
- 14. Memory rò rỉ với ConcurrentQueue
- 15. rò rỉ bộ nhớ CDialog trong VC10
- 16. Quartz: Rò rỉ bộ nhớ?
- 17. appengine, python: Có rò rỉ bộ nhớ trong taskqueue.add() không?
- 18. Rò rỉ bộ nhớ SharePoint
- 19. NSURLKết nối bị rò rỉ?
- 20. (iphone) UIImageView setImage: rò rỉ?
- 21. Không gian rò rỉ, và Nhà văn, và Tổng số (oh my!)
- 22. CMSampleBufferRef rò rỉ bộ nhớ
- 23. Làm việc xung quanh SpellCheckerSự rò rỉ?
- 24. Nhận biết tiện ích dòng lệnh 'rò rỉ' để tìm rò rỉ bộ nhớ
- 25. SoundPlayer gây ra rò rỉ bộ nhớ?
- 26. Ảnh chụp màn hình bị rò rỉ?
- 27. Rò rỉ bộ nhớ JavaScript đóng cửa
- 28. Ngăn chặn rò rỉ bộ nhớ AJAX
- 29. "Rò rỉ" Xử lý chủ đề
- 30. Tại sao bộ nhớ bị rò rỉ Python C của tôi bị rò rỉ?
Hãy xem Edward Z. Yang's [Vườn thú rò rỉ không gian] (http://blog.ezyang.com/2011/05/space-leak-zoo/). –