javascript memory

Hyor·2022년 12월 15일
0

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
개발 노트

0개의 댓글