Daviti kakhiani
Daviti kakhiani

Reputation: 31

JavaScript clean memory

I have a problem about memory management. My simpliest code is here:

var url="/abrapo.php";
var ob={start_:100, token:null}

function post_token(){
  $.post(url,{access:ob.token})
   .done(function(data){
      console.log(data);
      ob=data;
    });
}

I call function post_token every seconds. So after 2000 call user has problem of memory, ram goes up to 2GB. I don't need to save anything just want to log data after post and clear memory. I've already googled and find delete ob. But it does not clean the memory. What increase memory and how can I clean it without reloading the page

Upvotes: 1

Views: 3507

Answers (3)

Anthony V
Anthony V

Reputation: 13

According to your code example, the problem is with console.log(data) it make your object accessible from Console. The Garbage collection will free memory only when the object is no more accessible.

Upvotes: 0

Soviut
Soviut

Reputation: 91535

Use your browser's profiling tools to determine where you're accumulating memory. In Chrome these profiling tools are located under the Performance tab in the Chrome Developer Tools F12.

  • Click the Memory checkbox near the top to enable memory profiling
  • Click Start Profiling and Reload Page (Ctrl+Shift+E)
  • Let the profiling run for a while, most pages load in 2-3 seconds but it sounds like your page needs to run longer than that
  • Click the Stop button to halt the profiling

Among all the other performance graphs, you should see one for memory usage that looks something like this.

enter image description here

You can use this to see if, and when, the browser is performing garbage collections on the Javascript heap. You may need to manually clear certain objects by setting them to null. Also, try to avoid cyclical references and other complex referencing patterns that could cause the javascript engine to hold on to objects longer than it has to.

Click here, for more about the memory management and garbage collection in the browser.

Upvotes: 2

isp-zax
isp-zax

Reputation: 3873

I had similar problems while writing UI for a data acquisition device and managed to make it fly by setting every variable containing large data arrays to null whenever not used.

Your use case isn't easy to replicate with just your code, but I suggest you try setting

data = null;

and

ob = null;

whenever not in use.

You might have to tweak suggestion a bit, say by assigning only token:

ob.token = data.token;

in such case only token would have to be set to null

ob.token = null;

What this achieves essentially is that it gives garbage collector a chance to clear unused objects since variables using those were clearly set to null. Oh, yes, and memory profiling is your friend to find out what exactly should you null

Upvotes: 0

Related Questions