18

そのため、約 6 か月前まで、私の作業 (大きなグラフの処理) のほとんどは Python と C++ で構成されていました。その時点まで、そして今でも、私は Java をまったく書いたことがありませんでした.私は言語を見て、構文に精通しており (C/C++ のバックグラウンドから来ました)、JVM のアイデアが好きでしたが、決して実際、かなりの量の Java を作成しました。

私が Scala を手にしたとき、OOP と関数型プログラミングの機能がすべて 1 つにまとめられていて、JVM 上にあることがとても気に入りました。私は Scala を改善するために常に努力しており、Akka で遊んでいますが、今でも大好きです。しかし、私が考えすぎているだけかもしれませんが、Java や JVM についてもう少し学ぶべきだと感じています。

多くの人から、Scala は C++ から C への変換と同じように、Java とは別の言語と見なされるべきであると聞いています。おそらくあなたも同じように感じるかもしれませんし、Java を学ぶことは Scala を学ぶことと多かれ少なかれ切り離されているかもしれませんが、私は学んでいると感じています。 JVM (JIT コンパイル、型消去など) について詳しく教えてください。

考え?

4

6 に答える 6

10
  1. JVM はバイトコードを実行します。これがどのように機能するかを知っておくと、C/C++ メソッド呼び出しの仕組みやクラスの初期化方法を知っておくと役立つことがあります。重要であり、抽象化できない場合があるためです。

  2. Java は JVM の主要な言語であり、Java クラスを直接使用する必要がある場合は、ある程度 Java を読めると役に立ちます。そして、これは非常に頻繁に発生する可能性があります。ほんの数例:

    • サードパーティのJavaライブラリを使用する必要があります(そしてたくさんあります)
    • プロパティの操作
    • Scala-SwingラッパーでサポートされていないSwingで何か特別なことをする必要があります
    • また、1) について説明しているソースでは、Java の例を使用する可能性が最も高いでしょう。

しかし、私からのアドバイスは、事前に勉強することではなく、必要になったときに取得することです。

于 2012-07-06T08:59:55.703 に答える
9

私の頭の上から

  • プリミティブ、オートボクシング、および Java 配列の特殊性。

  • 消去とマニフェスト

  • scala ソースの再帰呼び出しが論理的にどのようにコンパイルされるか

  • プラットフォームに-client、-serverをインストールし、32ビットを試したい場合:OS XのJAVA_HOMEと「Java設定」など。openJDKは、同じバージョンのOracle JDKを使用する場所ならどこでも動作するはずですが、IntelliJは使用するように警告します公式オラクルJDK. 私は、3D グラフィック ライブラリに openJDK に関する問題があり、フォントなどの openJDK の一部にライセンスの問題があるという非常に孤立したレポートを見てきました。

  • コンパイラ オプションとしての REPL でのクラスパスの設定、および SBT でのクラスパスの設定

  • ホットスポット スイッチ、XMX、XMS (ヒープ設定)、最も一般的なガベージ コレクター、インライン メソッド呼び出し

  • java.util.concurrent

  • JDK 6 および 7 でコンパイルされた Java および scala コードでバイナリ互換性の問題が発生する可能性があります。

于 2012-07-06T15:53:37.237 に答える
9

今すぐこの本を購入してください: Java Performance . 昨年 10 月にリリースされたばかりで、JVM を理解したい人にとっては情報の宝庫です。Scala 開発者になる場合は、少なくともガベージ コレクションと JVM ランタイム パラメーターを理解する必要があります。

于 2012-07-06T12:59:21.437 に答える
8

何が必要か正確にはわかりませんが、SOについて同様の質問がいくつかあります。見てください。

また、ここにJavaメモリモデルの良い記事があります

私は、Java言語を掘り下げ、コードを記述し、Java固有の本を読んで、すべてがどのように機能するかをよりよく理解する方がよいと考えました。

于 2012-07-06T09:04:50.427 に答える
5

JVMを取り巻くツールはたくさんあります。プログラムがどのように実行されているか(パフォーマンスまたはその他の理由で)を理解したい場合は、これらに精通する価値があります。2つの便利なツールは次のとおりです。

  1. jstack
  2. visualvm

どちらも、実行時間の長いプロセスの監視と調査に特に役立ちます。

于 2012-07-06T16:32:16.027 に答える
1

Scala をプログラミングすると、JVM についての知識が深まると思います。「なぜこのソリューションは遅く、こちらは速いのか?」などの質問が増えることを意味します。- この質問に答える 1 つの方法は、バイトコードを確認することです。

于 2012-07-06T09:39:08.103 に答える