강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của tmdwhd3191882
tmdwhd3191882

câu hỏi đã được viết

Thực chiến Java của Kim Young-han - Nâng cao phần 3, Lambda, Stream, Lập trình hàm

Đánh giá tức thời và trì hoãn 3

지연 평가

Viết

·

59

0

 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.


1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
지연평가를 하는 이유 중 하나가 메서드 뒤의 괄호 부분에서 계산 등을 하면 먼저 즉시 평가되어 안 써도 되는 cpu의 사용량을 쓰게 한다고 하셨고,

그를 개선하기 위해 람다를 매개변수로 설정하여 if문 안에서 get(apply 등)메서드를 실행 전까지 계산을 안하기 때문에 지연 평가하여 쓸 데 없는 cpu 낭비를 하지 않는다고 하셨습니다.

여기서 궁금한게 메서드를 콜할 때 매개변수에 람다를 저장하는 것과 원시값이나 참조값을 저장하는 것 중 어떤게 더 메모리를 잡아먹나요?

람다를 저장하는게 더 많이 잡아먹는다면 cpu 낭비와 비교했을 때 어느 것이 더 손해인지 알고싶습니다.

java함수형-프로그래밍lambdaoptional

Câu trả lời 1

1

yh님의 프로필 이미지
yh
Người chia sẻ kiến thức

안녕하세요. tmdwhd319님

원시값의 경우 원시값 byte만 차지합니다.

참조 값의 경우 메모리 사용량은 '주소값' + '힙에 있는 실제 객체의 크기'가 됩니다.

람다의 경우 참조값과 마찬가지로, 람다 객체를 가리키는 '주소값'과 '힙에 생성된 람다 객체'가 메모리를 차지합니다. (람다의 경우 캡처하는 변수가 없다면 약 20바이트 정도의 아주 적은 메모리만 차지합니다.)

추가로 CPU와 메모리는 서로 다른 리소스이기 때문에 둘을 비교하기는 어렵습니다.

그래도 어떤 로직이든 호출되는 것 보다는 호출되지 않는 쪽이 전체적인 리소스 사용이 훨씬 덜하게 됩니다.

감사합니다.

tmdwhd319님의 프로필 이미지
tmdwhd319
Người đặt câu hỏi

감사합니다!

Hình ảnh hồ sơ của tmdwhd3191882
tmdwhd3191882

câu hỏi đã được viết

Đặt câu hỏi