IE 에서 실제 메모리를 어떻게 "사용한다"라고 표시해야할지 고민하다가
이런 방법을 써봤다.

*주의* 컴퓨터의 메모리를 크게 소모시킬 수 있는 내용입니다.
컴퓨터에 무리가 갈 수 있으니 실험용 컴퓨터에만 사용하시기 바랍니다.

...

<script>
var p=new Array();
function usingMemorys(count) { var i;
  for (i=0; i<count; i++) p[i]=[
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000',
'0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000','0000000000000000'
];
// 16 char , 8 column, 32 row
  }

function releaseMemorys() {  var i, c=0;  for (i in p) { delete p[i]; c++; } }
</script>

<input type=button value="using1" onclick=usingMemorys(1);>
<input type=button value="using10" onclick=usingMemorys(10);>
<input type=button value="using100" onclick=usingMemorys(100);>
<input type=button value="using1000" onclick=usingMemorys(1000);>
<input type=button value="using10000" onclick=usingMemorys(10000);>
<input type=button value="release" onclick=releaseMemorys();>

...

Array 안에 Array 와 유사한 object 를 넣어서 적용해본 것.



실제로 적용해보니... release 할 때 메모리가 정리되는 것이 아니라,
다음번에 다시 메모리를 불러줄 때 메모리가 정리되었다.
(언덕의 중간쯤에서 release 하고, using 1을 불렀다...)

사실 이 사실을 인지한 것은 10000 을 부르고 release 한 후 다시 10000 을 불렀을 때
갑자기 골자기(?)처럼 하향삼각그래프가 나타나서였다...

...

웹브라우져에서 사용 가능한 메모리의 총 양...을 생각한다기보다는,
실제 사용 가능한 메모리로 반환되는 것이 언제일까...가 궁금해서 해본 실험이었다.

...

그런데, 위의 방법을 스트링으로 바꿔보면 어떨까...?

...

<script>
var p=new Array();
function usingMemorys(count) { var i;
  for (i=0; i<count; i++) p[i]=
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+
'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'+'0000000000000000'
;
// 16 char , 8 column, 32 row
  }

function releaseMemorys() {  var i, c=0;  for (i in p) { delete p[i]; c++; } }
</script>

<input type=button value="using1" onclick=usingMemorys(1);>
<input type=button value="using10" onclick=usingMemorys(10);>
<input type=button value="using100" onclick=usingMemorys(100);>
<input type=button value="using1000" onclick=usingMemorys(1000);>
<input type=button value="using10000" onclick=usingMemorys(10000);>
<input type=button value="release" onclick=releaseMemorys();>

...

그래프 곡선은 조금 부드러(= =?)워지긴 했지만, 뭔가 감각이 달랐다. *추가이미지 생략*
빠른 속도로 테스트 해볼 땐 10000 - release - 1... 로 해도 변화가 없었다고 할까...

그래서 도출해내본 결론...
release 가 실행된 이후, IE 에서 정리중일 때가 따로 있다는 판단...

IE 내부의 메모리 정리중이라면 급한 call 이 아닐 땐 그냥 유야무야 지나가도 무방...인 걸로 판단한다고 할까...

비슷한 예시로
10000 - release - 1 -(한참후?)-> 다시 release 해보니, 메모리가 원위치(?)로 내려갔다.
사실, 10000 - release 일 때 메모리가 정리된다면 좋겠지만, ... 실제로는 그 때가 급한 때가 아니라는 것...

정리중이라 바쁘니까, 일단 어느정도 커버가능한 범위(using 1)은 급한대로 때우고, 정리를 마저 한 후...
나중에 다시 부르면 release 정식으로 완료한다고 할지...

...

그래서... 다시 시험해봤다.
10000 - release -(한참후)-> release...라면?

적용해보니, 실제로 그래프가 원위치로 돌아갔다. *추가이미지 생략*

...

사실, delete 함수가 적용된 이후라 (i in p) 에서 적용될 p 의 elements 가 없긴 했지만,
메모리를 "사용한다"...라는 부분이 (i in p) 을 실행할 당시에 적용이 되었던 것.

결국, 메모리를 삭제하는 순서가...

1) 메모리 삭제 예약을 한다.

2) 예약(?)된 메모리를 정리한다.
(아마도... 스택으로 남아있을 듯... *참고* 실제 release 가동시에 메모리꼬리(?)가 살짝 올라간 현상도 보였다.)

3) 메모리 정리가 끝난 메모리들은 다음번 메모리사용(?)시에 풀가동(?)으로 메모리 정리를 마무리한다.

... 아마도, 부드러운 움직임을 남겨두기 위해(?) 가용메모리를 잠시 남겨둔 것 같다.
... 그건 그렇고...

IE 에서는 메모리 측정이 어느정도 가능하겠지만,
메모리 정리가 끝났다는 타이밍을 따로 불러주는 함수는 없는건가...?

...

NowMark killofki@.


Posted by killofki
,