b

scala의 lazy 비용 본문

language/scala

scala의 lazy 비용

dev.bistro 2014. 10. 21. 17:25

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
Comments