2013-05-28 35 views
15

phép nói rằng bạn có đối tượng phức tạp sau:Tham chiếu đối tượng có chiếm thêm bộ nhớ không?

var object1 = .... // (something complexed) 

này chiếm x lượng bộ nhớ trong ứng dụng JS của bạn. Bây giờ cho phép nói rằng bạn có một số đối tượng khác mà tham khảo object1:

var otherObject = { something: true, value: 'yes', object: object1 }; 

var anotherObject = { color: '#FFF', object: object1 }; 

tôi đã tăng gấp ba lần dung lượng bộ nhớ mà object1 ban đầu chiếm? Hoặc làm các tham chiếu đến object1 không thêm vào chi phí của bộ nhớ được sử dụng?

Tôi không chắc chắn cách tự mình kiểm tra để xác định câu trả lời. (Điểm thưởng nếu bạn có thể cho tôi biết cách chỉ cho tôi một công cụ giúp điểm chuẩn này).

+0

Dường như là một câu hỏi hay –

+2

Vâng, bạn cần một số bộ nhớ để cho biết rằng tham chiếu không tồn tại. Nếu không, làm thế nào bạn biết nếu nó có hay không. – Joseph

Trả lời

5

Đối tượng luôn được chuyển bằng tham chiếu trong JavaScript (xem popular answer) này. Con trỏ đến một đối tượng mất một số lượng bộ nhớ (phụ thuộc vào việc thực hiện), tất nhiên, nhưng ít hơn nhiều so với đối tượng thực tế.

5

Hãy xem this question. Các số, chuỗi, vv luôn được gọi theo giá trị, nhưng các đối tượng là called by sharing; đó là chúng được gọi theo giá trị, nhưng giá trị là một tham chiếu đến đối tượng.

Nói cách khác, nếu bạn sửa đổi thuộc tính của con trỏ, bạn đang sửa đổi cùng một nhóm bộ nhớ làm đối tượng. Nhưng nếu bạn gán lại con trỏ, nó không ảnh hưởng đến đối tượng gốc.

Điều này có nghĩa là, trong ví dụ của bạn, bạn có không tăng gấp ba lần dung lượng bộ nhớ mà object1 mất dậy, nhưng các con trỏ thêm để object1 sẽ mất một số không gian bộ nhớ. Chính xác bao nhiêu không gian? Điều đó phụ thuộc vào việc thực hiện chính xác công cụ Javascript, nhưng nó sẽ luôn nhỏ hơn nhiều so với kích thước của đối tượng.

Theo như điểm chuẩn, hãy xem tài liệu của Mozilla về công cụ JS của chúng, SpiderMonkey. Có rất nhiều tiện ích tốt ở đó ....

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