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@.
'baseJavascript' 카테고리의 다른 글
select & option] 입력/선택된 값을 꼭대기로 올릴 때...2 (0) | 2010.04.20 |
---|---|
select & option] 옵션을 추가/삭제할 때... (버그 포함) (0) | 2010.04.16 |
IE] 한 폴더 내에서 수정한 파일(이미지/스크립트)을 연동해서 보고싶을 때 "다른 이름으로 저장" (0) | 2010.03.06 |
Array 안쪽의 내용 delete 하기... (0) | 2010.02.18 |
delete 에 대해... (0) | 2010.02.13 |