play1.2 버전을 jvm7 위에서 사용하고 있다가 jvm 8에서 사용하려다가 실패했다. 단순히 -noverify 만 넣어서 해결되는 문제는 아닌 듯 하다. 컴파일이 되지만, 이상하게 작동되니. 쓰면 안된다.



관련해서 패치등이 있지만, 현재 play 1의 jvm 8 지원은 http://play.lighthouseapp.com/projects/57987/tickets/1800-support-java-8 에서 나와 있는데, 2014년 5월 14일 기준으로  State changed from “resolved” to “inprogress” 로 변경되었다.

즉  jvm 8(java8)에서 동작이 되지 않는다.


(추후 jvm 8이 정식으로 지원이 된다면, 올려보고 apache http 또는 nginx 로그가 정상적으로 응답하는지 꼭 체크해야 한다. 정상 요청에 500에러를 발생시킨다면 아직 jvm8을 적용햘 때가 아니다.) 




그렇다면 play 2 (scala) 는 jvm 8을 사용할 수 있을까?

이 부분은 현재 scala 의 버전과 밀접한 관계가 있다. 나는 play2 스칼라 개발 버전이 있는데. scala 2.11.2, play 2.3을 사용중인데. jvm 8로 실행했더니 이상하게 동작했다. 


확인해보니. 아래 링크를 찾을 수 있었다. scala 2.11에서는 간단한 interop만 될 뿐이고 실제 잘 동작되고 성능까지 보장하는 것은 2.12에서 가능할 것이다. 그것은 2016년 초(정식 릴리즈)에야 가능할 예정이라고 한다.  


http://www.infoq.com/articles/Scala-2-12-Only-Java8

http://scala-lang.org/news/2.12-roadmap



  • It’s important to keep up with the platform, even though Java 8’s MethodHandle-based support for closures may not immediately yield significant performance benefits (definitely reduces bytecode size, and thus likely compilation times, though). For platforms that don’t support Java 8 bytecode yet, two projects exist that rewrite Java 8 invokedynamic bytecode to Java 6 (retrolambda or Forax’s JSR292 backport). I’m not aware of the equivalent for default methods, but it’s feasible.





Posted by '김용환'

댓글을 달아 주세요