Topic: memory leak in javascript


I'm using lowpro 0.4.
On a page I define an element <ul id="product_list">
I apply the ProductList behavior to the element.

Now, the list-object loads a list of products from the server (using json).
It transforms them to Product objects and puts them in an internal array:

  product_element = $li({'class': 'product'});
  this.products.push(new Product(product_element, product, this));

after this, it redraws the list-element and adds all product-elements as children.

By using other elements on the page, I get the ProductList to retrieve other products.
But first the old objects need to be unloaded.

    unload: function() {

after unloading, the products are removed from the screen and product_list.products == []
Seems right.
But when I use Product.instances I still see all products!
Somehow they still exist in memory.

Is this a memory leak? or do I have to wait for the Garbage Collector to kick in?
Or is this expected behavior?
I use a few closures in my code and I apply .bind(this) on some functions so it might have something to do with this.

What are the do's and dont's regarding this?