2016-09-19 2 views
1

単純なコンパイルと実行はHelloWorld Javaで約1秒かかります。コンパイルをバイパスするJavaインタープリタがありますか?

$ time javac HelloWorld.java 

real 0m0.659s 
user 0m1.203s <-- 1.2s 
sys  0m0.113s 

比較のため、Luaは約0.002秒で同じことができます。

いくつかの(確かに珍しい)アプリケーションでは、短時間実行される数千のJavaアプリケーションが動的に生成されるため、のコンパイル時には1秒で時間に変換されます。

*.classファイルにコンパイルをバイパスするJavaインタープリタがあるのでしょうか?

(私はGroovyのがあることを知っているが、それは、Javaの完全なスーパーセットではありません)

+0

1秒が長すぎるようです。 JVM内でAPIとしてJavaコンパイラを使用することができ、実行中のJVMにすぐに結果のクラスをロードできます。 –

+0

@MarkoTopolnik私はリアルタイムで0.7秒、ユーザーの時間で1.2秒を見ています(おそらくマルチスレッドのため)。あなたはコンパイラAPIを使ってそれを大幅に下回ることができますか? – MaxB

+0

あなたは何をテストしていますか? 'javac'コマンドラインで? JVM内で使用する場合、コンパイルしているソースファイル以外のすべてがロードされている安定した "ホット"な設定ができると思います。コンパイル時間はミリ秒単位で指定する必要があります。 –

答えて

1

ソース言語がJavaのであれば、実際にはありません。 REPLからJavaをロードして解釈できるツールがいくつかありますが、Javaのセマンティクスは実際にはクラス関係のようなものを解決できるかどうかに依存しています。

しかし、Clojure、Scala、Groovyなどのプリコンパイルなしで使用できるJVM言語があります。

+0

Clojureは起動が非常に遅いです。 –

+0

はい、ソースはJavaである必要があります。これらのREPLツールは何ですか?彼らは1sコンパイルをバイパスしますか? – MaxB

+0

Ah。 REPLは "read-eval-print loop"です。 Clojure、LISP、Groovyのような言語では、* input *を読み込んで*プログラムとして評価し、*結果*と* loop *を出力して再度読み込むプログラムがあります。しかし、Java言語の構造は、それが見えなくても何とかコンパイルする必要があることを意味します。 https://repl.it/languages/java –

関連する問題