javascript memory

Hyor·2022년 12월 15일
0
post-custom-banner

Javascript Memory Life Cycle

  1. allocate
    값을 선언하면 자동으로 메모리를 할당합니다.
  2. used
    값을 읽거나 쓰면 사용됩니다.
  3. release
    사용되지않는 변수는 가비지 컬렉터가 자동으로 제거합니다.

C언어같은 저수준 언어에서는 명시적으로 제거할 수 있지만 Javasript같은 고수준 언어에서는 가비지컬렉터의 의해 자동으로 제거됩니다.

Javscript Memory Allocation

  1. 값 초기화
    자바스크립트는 값을 선언할 때 자동으로 메모리를 할당합니다.
const num = 1994; // number
const str = 'hyoseong'; // string

const o = {
  num: 2022,
  nothting: null
}; // object


const a = [1994, null, 'hyoseong']; // array(object)

function func(param) { // function
  return param + 2;
} 

someElement.addEventListener('click', function(){ // EventListener
  someElement.style.backgroundColor = 'black';
}, false); 
  1. 함수 호출을 통한 할당
    함수의 return을 통한 메모리 할당합니다.
const date = new Date(); // Date Object

const element = document.createElement('div'); // DOM Element
  1. 새로운 값이나 오브젝트를 할당하기도 합니다.
const hyoseong = 'hyoseong';
const hyo = s.substr(0, 3); 
// 자바스크립트에서 문자열은 immutable 값이기 때문에,
// 메모리를 새로 할당하지 않고 [0, 3] 이라는 범위만 저장합니다.
// hyoseong 변수를 수정한다고 hyo 변수가 변하지는 않습니다.

Javscript Memory Used

값을 읽거나 쓸때 사용됩니다.

const introduce = (name, age) => {
	console.log(`my name is ${name} and age ${age}`);
};

const name = 'hyoseong';
const age = 29;

introduce(name, age); // parameter로 사용

const job = 'developer';
console.log(`my job is ${job}`); // 읽기

Javscript Memory Release

jaavscript는 사용하지 않는 값들을 가비지컬렉터가 자동으로 삭제해줍니다.

let m1 = 'none1'; // allocation
let m2 = 'none2'; // allocation
let m3 = 'none3'; // allocation

console.log(m1, m2, m3); // uesd

m1 = m2; 
m2 = m3; 
m3 = null; 
// none2, none3을 할당되었지만 none1은 할당되지 않습니다. 이렇게 사용되어지지 않는 값을 가비지컬렉션이 Mark and Sweep 알고리즘의 의해 삭제됩니다.
console.log(m1, m2, m3);

Mark and Sweep 알고리즘
https://velog.io/@skgyaos3/JavaScript-Memory#mark-and-sweep

참고자료

https://developer.mozilla.org/ko/docs/Web/JavaScript/Memory_Management

profile
개발 노트
post-custom-banner

0개의 댓글