<html>
<head>
<script>

 // How many arrays to allocate.
var __n_arrays = 10;
// How many elements in each array
var __n_elements = 10 * 1000 * 1000;
// Touch one element every __touch_step elements.
var __touch_step = 5 * 1000;
var __total_allocation;
var __text_area = null;

function __initialize_bloat() {
  __total_allocation = 0;
  document.bloat = new Array(__n_arrays);
  for (i = 0; i < __n_arrays; i++) {
    document.bloat[i] = new Array(1);
  }
  __display_message("allocation was cleared");
}

function __display_message(text) {
  if (__text_area == null) {
    __text_area = document.getElementById("text area");
  }
  if (__text_area != null) {
    __text_area.innerText = text;
  }
}

function __bloat_array(i) {
  var message = "allocated "
      + __total_allocation / (1000000) + "M elements ...";
  if (i >= __n_arrays) {
    message += " done"
  }
  __display_message(message);
  if (i < __n_arrays) {
    __total_allocation += __n_elements;
    document.bloat[i] += new Array(__n_elements);
    for (j = 0; j < __n_elements; j += __touch_step) {
            document.bloat[i][j] = j;
    }
    setTimeout(function() {__bloat_array(i + 1);}, 10);
  }
}

function __bloat() {
  __bloat_array(0);
}

__initialize_bloat();
__bloat();

</script>
</head>
<body>
<center>

    <div id="text area">
    No memory allocated yet.
    </div>

</center>
</body>
</html>
