객체 지향 언어로 메모리가 작동하는 방식
3152 단어 oop자바spring-boot
기사를 쓰려고 한 이유
직장에서 스프링 부트를 사용하고 있으며, 그 간인 DI (Dependency Injection)에서는,
singleton 디자인 패턴이 채용되고 있어, 디폴트로 1개 밖에 인스턴스가 생성되지 않는다고 한다.
인터넷에서 조사해도 spring boot로 상태를 가지는 구현을 하고 있으면 버그 같은 기사가 왠지 나왔다.
여러가지 생각하면 어때? ? ? 인스턴스는 1개 밖에 만들 수 없지만, 1개의 API에 대해서 동시 리퀘스트라든지 된다면, 괜찮은가? 무슨 일이야? ? ? 라고 생각하기도 했다.
어쩌면 메모리 배치가 어디에 있습니까? 어느 기간? 라고 하는 것이 이해할 수 없기 때문이라고 생각했으므로 재차 정리했다.
메모리 메커니즘(Java 기반)
우선 메모리 영역
· 정적 영역
· 힙 영역
· 스택 영역
계속해서, 메모리에 전개하는 것(대개이므로, 그 밖에도 있을 것 같은)
1. 코드 정보(클래스 본체)
2. 전역 변수
3. 인스턴스
4. 인스턴스 변수 (생성자 등으로 지정)
5. 로컬 변수
6. 각 메소드의 인수
7. 반환값
각각을 표로 정리한 것이 이쪽
라고 하는 것으로, 재차 생각하면, 「상태를 가져서는 안 된다」라고 하는 것은 인스턴스 변수를 가지는 것 같은 구현으로 하면,
버그한다고 하는 것으로, 5, 6, 7은 리퀘스트의 thread 정보로서 스택 영역에 전개되기 때문에 버그 라든지의 걱정은 없네요.
싱글톤을 다시 생각해
다시 싱글 톤의 디자인 패턴 바라봐도, 쑥 머리에 들어갑니다.
전역 변수로서 하나만 인스턴스를 제작하고, 그것은 private 변수가 되어 있으므로 다시 작성되지도 않는다.
getInstance() 메서드를 호출하여 이전에 힙 영역으로 확장된 인스턴스의 주소를 반환합니다.
spring boot의 어노테이션에서 @Bean , @Controller , @Service , @Component
singlton.javapublic class Singlton{
private static Singlton singlton = new Singlton();
private Singlton(){}
public static Singlton getInstance(){
return singlton;
}
}
덤 NARUTO의 세계에서 생각해 보았다
●NARUTO로 비유하면・・
나루토 (본체) : 코드 정보
→ 여러가지술(메소드)을 가지고 있다.
나루토(그림자 분체): 오브젝트
→해내는 일은 각각 다르다.
정기적으로 분신체를 해제하지 않으면 나루토 본체가 차크라 끊어진다 (발생하는 것은 메모리 누수, 정기적으로 객체를 지우는 것은 가비지 컬렉션).
나루토 (그림자 분신)의 행동 : 지역 변수 등
→수리검 던진다든가, 술 사용한다든가의 행동.
결론 : NARUTO란...object ninja!!!
Reference
이 문제에 관하여(객체 지향 언어로 메모리가 작동하는 방식), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Atsushiii/items/cf5e3cff62189de4898e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
우선 메모리 영역
· 정적 영역
· 힙 영역
· 스택 영역
계속해서, 메모리에 전개하는 것(대개이므로, 그 밖에도 있을 것 같은)
1. 코드 정보(클래스 본체)
2. 전역 변수
3. 인스턴스
4. 인스턴스 변수 (생성자 등으로 지정)
5. 로컬 변수
6. 각 메소드의 인수
7. 반환값
각각을 표로 정리한 것이 이쪽
라고 하는 것으로, 재차 생각하면, 「상태를 가져서는 안 된다」라고 하는 것은 인스턴스 변수를 가지는 것 같은 구현으로 하면,
버그한다고 하는 것으로, 5, 6, 7은 리퀘스트의 thread 정보로서 스택 영역에 전개되기 때문에 버그 라든지의 걱정은 없네요.
싱글톤을 다시 생각해
다시 싱글 톤의 디자인 패턴 바라봐도, 쑥 머리에 들어갑니다.
전역 변수로서 하나만 인스턴스를 제작하고, 그것은 private 변수가 되어 있으므로 다시 작성되지도 않는다.
getInstance() 메서드를 호출하여 이전에 힙 영역으로 확장된 인스턴스의 주소를 반환합니다.
spring boot의 어노테이션에서 @Bean , @Controller , @Service , @Component
singlton.javapublic class Singlton{
private static Singlton singlton = new Singlton();
private Singlton(){}
public static Singlton getInstance(){
return singlton;
}
}
덤 NARUTO의 세계에서 생각해 보았다
●NARUTO로 비유하면・・
나루토 (본체) : 코드 정보
→ 여러가지술(메소드)을 가지고 있다.
나루토(그림자 분체): 오브젝트
→해내는 일은 각각 다르다.
정기적으로 분신체를 해제하지 않으면 나루토 본체가 차크라 끊어진다 (발생하는 것은 메모리 누수, 정기적으로 객체를 지우는 것은 가비지 컬렉션).
나루토 (그림자 분신)의 행동 : 지역 변수 등
→수리검 던진다든가, 술 사용한다든가의 행동.
결론 : NARUTO란...object ninja!!!
Reference
이 문제에 관하여(객체 지향 언어로 메모리가 작동하는 방식), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Atsushiii/items/cf5e3cff62189de4898e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
public class Singlton{
private static Singlton singlton = new Singlton();
private Singlton(){}
public static Singlton getInstance(){
return singlton;
}
}
●NARUTO로 비유하면・・
나루토 (본체) : 코드 정보
→ 여러가지술(메소드)을 가지고 있다.
나루토(그림자 분체): 오브젝트
→해내는 일은 각각 다르다.
정기적으로 분신체를 해제하지 않으면 나루토 본체가 차크라 끊어진다 (발생하는 것은 메모리 누수, 정기적으로 객체를 지우는 것은 가비지 컬렉션).
나루토 (그림자 분신)의 행동 : 지역 변수 등
→수리검 던진다든가, 술 사용한다든가의 행동.
결론 : NARUTO란...object ninja!!!
Reference
이 문제에 관하여(객체 지향 언어로 메모리가 작동하는 방식), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Atsushiii/items/cf5e3cff62189de4898e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)