2013-02-14 3 views
1

나는 invokedynamic 테스트 http://www.javaworld.com/javaworld/jw-07-2006/jw-0717-ruby.html에서 약간의 JRuby를 스크립트를 사용 :JRuby를 java.lang.ClassCastException가

class ADuck 
    def quack() 
     puts "quack A"; 
    end 
end 

class BDuck 
    def quack() 
     puts "quack B"; 
    end 
end 

def quack_it(duck) 
    duck.quack 
end 

a = ADuck.new 
b = BDuck.new 
quack_it(a) 
quack_it(b) 

을하지만 자바 클래스 파일에 JRuby를에 컴파일 할 때 나는 다음과 같은 예외가 그것을 실행하려고 :

Java HotSpot(TM) 64-Bit Server VM warning: Use -XX:+UnlockDiagnosticVMOptions be 
fore EnableInvokeDynamic flag 
Exception in thread "main" java.lang.ClassCastException: java.lang.Object cannot 
be cast to java.lang.invoke.SwitchPoint 
     at  org.jruby.runtime.invokedynamic.InvokeDynamicSupport.constantFallback 
(InvokeDynamicSupport.java:659) 
     at duck_typing.__file__(duck_typing.rb:22) 
     at duck_typing.load(duck_typing.rb) 
     at duck_typing.main(duck_typing.rb) 

내 체제 : Windows 7 64 비트에 JDK 1.7.0_09 64 비트, JRuby를 1.7.2

사용 commandlines :

jruby -Xcompile.invokedynamic=true -S jrubyc duck_typing.rb 
java -XX:+UnlockExperimentalVMOptions -XX:+EnableInvokeDynamic -cp .;jruby-complete-1.7.2.jar duck_typing 

얼마전 리눅스 컴퓨터에서 동일한 결과와 Windows jdk8을 사용하여 테스트했습니다. JDK8에서는 다른 프로젝트에서 클래스 파일을 사용하는 데 문제가있었습니다.

해결 방법은 누구입니까? JRuby를 Java 7에서 indy와 함께 사용하려면 어떻게해야합니까? JRuby를 편리 매개 변수 --server 제외

답변

0

모든 JVM 런타임 매개 변수는 특정 JVM 설정 다음에 -J 옵션을 사용합니다. 예 :

힙 공간 설정 : JRuby를 -J-X

JRuby를 런타임 설정 : JRuby를 -J-D는 다음 절에서 설명

모든 설정 JVM 설정된다.

https://github.com/jruby/jruby/wiki/PerformanceTuning

나를 위해 작동하지 않았다, 대신

jruby -J-Xcompile.invokedynamic=true -S jrubyc duck_typing.rb 
+0

죄송합니다 이것을 시도. Java는 나에게 위에서 게시 한 것과 동일한 예외를 제공합니다. – Thorben

+0

컴퓨터에서 테스트 해 보셨습니까? – Thorben

+0

음수. 나는 컴파일 된 클래스없이 루비만을 테스트했다. –

관련 문제