일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- coursera
- spring-cloud-stream
- springboot
- 플레이 프레임워크
- kafkastreams
- Logstash
- scala 2.10
- 한빛미디어
- Elk
- Elasticsearch
- reactive
- Spring
- avo
- kafka interactive query
- statestore
- spring-batch
- kafkastream
- spring-kafka
- Slick
- RabbitMQ
- enablekafkastreams
- play framework
- gradle
- 카프카
- Kafka
- schema registry
- confluent
- kafka streams
- aws
- scala
- Today
- Total
b
scala의 lazy 비용 본문
lazy val x = 솰라솰라...
단순히 늦은/지연 연산일 줄만 알았다...
test
class lazyval {
lazy val x = 5
}
를 scalac로 컴파일하고 다시 디컴파일 해서 내용을 보면
public class lazyval
{
private int x$lzycompute()
{
synchronized(this)
{
if(!bitmap$0)
{
x = 5;
bitmap$0 = true;
}
BoxedUnit _tmp = BoxedUnit.UNIT;
}
return x;
}
public int x()
{
return bitmap$0 ? x : x$lzycompute();
}
public lazyval()
{
}
private int x;
private volatile boolean bitmap$0;
}
- voliatile boolean의 flag가 하나 생성된다
- 초기화 되지 않았다면 synchronized 으로 묶어 초기화를 한다 (오쉿1)
- 이후 voliatile bitmap$0을 계속 참고한다.(오쉿2)
읽기 비용이 있다는걸 잊지 말자.
자세한 내용은 SIP-20 http://docs.scala-lang.org/sips/pending/improved-lazy-val-initialization.html#version_v4__the_cas_improvement
'language > scala' 카테고리의 다른 글
FP 비엄격성 (1) | 2015.05.18 |
---|---|
scala package object (0) | 2014.11.05 |
spray는 멋지군.. (0) | 2014.10.20 |
Enum Type을 Slick 에서 사용하기 (0) | 2014.10.07 |
Slick (0) | 2014.10.05 |