タグ付けされた質問 「jvm」

Java仮想マシン(JVM)は、Javaバイトコードを実行できる仮想マシンです。これは、Javaプラットフォームのコード実行コンポーネントです。

2
「影付き」Java依存関係とは何ですか?
JVM開発者はこちら。最近、私はIRCチャットルームや、自分のオフィスでさえ、いわゆる「影付き」Javaライブラリについて冗談を言っています。使用のコンテキストは次のようになります。 「このように、XYZに「シェーディング」クライアントを提供します。」 完璧な例は、HBaseのこのJiraの問題です。「シェーディングされた依存関係を持つクライアントアーティファクトを公開する」 だから私は尋ねる:シェーディングされた JAR とは何ですか、「シェーディングされた」とはどういう意味ですか?
75 java  libraries  jvm 

4
Unixバイナリに近い他の言語と比較して、Javaを使用する場合、Dockerを使用する開発上の利点は無効になりますか?
私は言った友人がいました: Dockerは素晴らしいです。これを使用して、本番環境とそのすべての癖をローカルマシンに複製できます。その後、すべてのステージングワークフローを介して、そのインスタンスを超高速で直接展開できます。 これは、開発者がRuby、PHP、またはGoを記述している場合に当てはまります。オペレーティングシステムへの方向バイナリリンクがありました。 ただし、Javaを使用する場合は、オペレーティングシステムと言語の間に仮想層が既に存在するため、基盤となるオペレーティングシステムに関係なく、操作の一貫性が保たれます。 おそらく、この場合、開発者がローカルで運用環境を複製するためにDockerを実行する利点は無効になります。(Ruby、PHP、またはGoと比較)。 私はこれについて議論することを受け入れており、反対の見解を(証拠とともに)聞きたいと思っています。 Unixバイナリに近い他の言語と比較して、Javaを使用する場合、Dockerを使用する開発上の利点は無効になりますか?
53 java  deployment  jvm  docker 


4
JVMがテールコールの最適化に課す制限
Clojureは、単独で末尾呼び出しの最適化を実行しません。末尾再帰関数があり、それを最適化する場合は、特別な形式を使用する必要がありますrecur。同様に、相互に再帰的な関数が2つある場合、を使用してのみ最適化できますtrampoline。 Scalaコンパイラは、再帰関数に対してTCOを実行できますが、2つの相互再帰関数に対してはできません。 これらの制限について読んだときはいつでも、JVMモデルに固有の制限に常に起因していました。コンパイラについてはほとんど何も知りませんが、これは少し困惑します。から例を見てみましょうProgramming Scala。ここで機能 def approximate(guess: Double): Double = if (isGoodEnough(guess)) guess else approximate(improve(guess)) に翻訳されています 0: aload_0 1: astore_3 2: aload_0 3: dload_1 4: invokevirtual #24; //Method isGoodEnough:(D)Z 7: ifeq 10: dload_1 11: dreturn 12: aload_0 13: dload_1 14: invokevirtual #27; //Method improve:(D)D 17: dstore_1 18: goto 2 そのため、バイトコードレベルでは、が必要gotoです。この場合、実際には、ハードワークはコンパイラーによって行われます。 基礎となる仮想マシンのどの機能により、コンパイラはTCOをより簡単に処理できますか? …
36 scala  clojure  jvm  tail-call 

2
JavaでStackOverflowErrorをキャッチしても大丈夫ですか?
以前はそうではないと思っていましたが、昨日はそうしなければなりませんでした。Akka(JVMのアクターシステム実装)を使用して非同期ジョブを処理するアプリケーションです。アクターの1人がPDF操作を実行しますが、ライブラリーにはバグがあるため、たまに死にStackOverflowErrorます。 2番目の側面は、JVMの致命的なエラー(StackOverflowErrorなど)がキャッチされた場合、Akkaがアクターシステム全体をシャットダウンするように構成されていることです。 3番目の側面は、このアクターシステムがWebアプリ内に埋め込まれている(WTFのような、レガシー、理由のため)ため、アクターシステムがシャットダウンされても、Webアプリはそうではありません。最終的な効果はStackOverflowError、ジョブ処理アプリケーションで空のWebアプリになることです。 迅速な修正として、StackOverflowErrorアクターシステムのスレッドプールが破棄されないように、スローされているものをキャッチする必要がありました。これは、特にこのようなコンテキストでそのようなエラーをキャッチしてもいいかもしれないと思うようになりましたか?任意のタスクを処理するスレッドプールがある場合 とは異なり、アプリケーションが一貫性のない状態のままOutOfMemoryErrorになることを想像することはできませんStackOverflowError。スタックはこのようなエラーの後にクリアされるため、計算は正常に続行できます。しかし、おそらく重要なものが欠けています。 また、最初にエラーを修正するのはすべてです(実際、数日前にこのアプリでSOEを修正済みです)ある種の状況が発生する可能性があります。 をキャッチするのStackOverflowErrorではなく、JVMプロセスを再起動して、そのジョブを失敗としてマークし、ビジネスを続行する方がよいのはなぜですか? 国営企業を捕まえない理由はありますか?「ベストプラクティス」を除きます。これは、何も言えないあいまいな用語です。

5
多くのJVM言語をサポートするために、JVMが非常に多用途なのはなぜですか?
以下のようなJava以外の多くの言語ので、JVMがサポートGroovy,Clojure,ScalaするJavaとは異なり、関数型言語ですなど(私が言及していますバージョン8以前のJavaLambda'sそれほど多彩な機能capabilities.OnにJVMを作るもの高いレベルをサポートしていませんサポートされていません)オブジェクト指向言語と関数型言語の両方をサポートできますか?

2
JavaおよびJVMライセンス
Javaライセンスにより、他社は独自のバージョンのJava言語を作成したり、正確に実装したりできますか JVMについての同じ質問。 SunはMicrosoftがJava実装の.NETバージョンとGoogle AndroidのJavaを変更したとして訴えていると聞いたが、全体の概念を全体として把握することはできない。
17 java  licensing  jvm 

1
型消去を実行する必要がなくなるようにJavaを改善するにはどうすればよいですか?
ジェネリック医薬品の公式のJavaチュートリアルでは、型消去を説明し、なぜそれがコンパイラに追加されました。 ジェネリック型がインスタンス化されると、コンパイラーは型消去と呼ばれる手法でこれらの型を変換します。コンパイラーは、クラスまたはメソッド内の型パラメーターと型引数に関連するすべての情報を削除するプロセスです。型消去により、ジェネリックを使用するJavaアプリケーションは、ジェネリックの前に作成されたJavaライブラリおよびアプリケーションとのバイナリ互換性を維持できます。 これはおそらく実用的なアプローチであるか、おそらく最も痛みの少ないアプローチでした。しかし、ジェネリックは業界全体で広くサポートされているので、型消去を必要としないために何ができるでしょうか?後方互換性を壊す必要なく実行可能ですか?それが実行可能であれば、実用的ですか? 上記の引用の最後の文は自己参照になりましたか?つまり、「型消去により、ジェネリックを使用するJavaアプリケーションは、型消去を実行するJavaバージョンで作成されたJavaライブラリおよびアプリケーションとのバイナリ互換性を維持できます。」
16 java  jvm 

4
Java / JVM内部へのアプローチ[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 私は約8年間Javaでプログラミングしており、開発者としてこの言語をよく知っていますが、私の目標は内部の知識を深めることです。PL設計の学部課程を受講しましたが、非常に幅広い学問的概要(Scheme、IIRC)でした。 誰かが詳細な調査を開始するためのルートを提案できますか?具体的には、特定のトピック(ガベージコレクションなど)がありますか?JVMの内部とJavaプログラミング言語の設計に関するまともな高レベルの本はありますか?私の現在のアプローチは、JVM仕様から開始し、必要に応じて調査することです。
15 java  books  jvm 

3
オブジェクトを作成すると、インスタンスフィールドとメソッドの両方、またはインスタンスフィールドのみに新しいメモリが割り当てられます
次のクラスがあります class Student{ int rollNumber; int marks; public void setResult(int rollNumber, int marks){ this.rollNumber=rollNumber; this.marks=marks; } public void displayResult(){ System.out.println("Roll Number= "+this.rollNumber+" Marks= "+this.marks); } } 次に、次のようにStudentタイプの2つのオブジェクトを作成します Student s1=new Student(); Student s2=new Student(); これで、2つの異なるメモリセットがインスタンスフィールドに割り当てられます。今私の質問は、メモリがメソッドに割り当てられているかどうかです(setResultそしてdisplayResult)に2回または1回です。 次の図を参照してください。どの図が正しい情報を提供しているかを教えてください。

1
ClojureとScalaのパターンマッチング
これら2つの言語のパターンマッチングの主な違いは何ですか?構文ではなく、機能、実装の詳細、ユースケースの範囲、必要性について言及しています。 Scalaアプリケーション(Lift and Playなど)は、言語のパターンマッチングの能力について誇らしげに語っています。一方、Clojureにはライブラリcore.matchがあり、破壊機能が組み込まれていますが、これも強力なようです。 *注:私がこの質問をすることに触発された理由は、実験としてプログラマがScalaとClojureの両方を使用してlispインタープリターを作成したブログ投稿でした。彼は、Clojureの試合が一定の長さの後に壊れたと言ったが、その理由を説明できなかったが、私は本当に知りたいと思っている。この投稿はここで見つけることができます:http : //www.janvsmachine.net/2013/09/writing-simple-lisp-interpreter-in-clojure.html

4
Java Virtual Machineは、他の言語で記述されたコードをどのように実行しますか?
Java 1.6以降、JVMはJavaだけでなく、無数のプログラミング言語を実行できます。JavaがJava VM上で実行される方法を概念的に理解していますが、他の言語がJava VM上で実行される方法は理解していません。私には、それはすべて黒魔術のように見えます。私が指摘する記事はありますか?これにより、すべてがどのように組み合わされるかをよりよく理解できますか?
12 jvm 

5
JVMとJavaのWORAは、他の高レベル言語とどのように違いますか?
Javaの世界では、JVMについてよく話しますが、Javaが新しくなったとき、おそらく「Write Once、Run Anywhere」というキラー機能がありました。 人々が話したり書いたりする方法からすると、これは、たとえばPythonが機能する方法とは異なるようです。しかし、私が書いたPythonコードが別のマシンで異なる方法で動作することを認識していません。(私はそれほど多くのPythonを書いていませんが。) だから私は何が欠けていますか?JVMはPythonインタープリターとどう違うのですか?PythonにJavaのプラットフォームに依存しない方法はありますか?または、これは単なる文化的な違いですか?

2
JVMはmainメソッドによってスローされた例外をどのように処理しますか?
私は例外を理解し、それらをスローし、それらを処理し、それらをコールスタックの下位のメソッド(つまりthrows)に伝達します。 私が理解していないのはこれです: public static void main(String[] args) throws Exception { ... } 今、私はをmainスローする場合Exceptionに、JVMがそれを処理すると仮定します(正しい?)。その場合、私の質問は次のとおりです。 JVMはスローされた例外をどのように処理しmainますか?それは何をするためのものか?
10 java  exceptions  jvm 

3
マイナーなJVMアップグレードを行うことはどの程度安全ですか?
私は何年にもわたってJVMに取り組んできましたが、JVMのクラッシュを経験したことはほとんどありません...約6か月前までです。 それ以来、2つのJVM障害が原因で約5つのJVMクラッシュが発生しました。Oracleのソリューションは常に同じでした...アップグレード。 各アップグレードは常にポイントリリースとの間で行われます。つまり、Oracleの最新の提案(バグが修正されたことを確認した後)は、1.6u20から1.6u26にアップグレードすることでした。 JVMのマイナーバージョンをアップグレードする必要はありますか? これは膨大な量の回帰テストを必要とする大きなイベントですか、それとも受け入れるべき安全なアップグレードですか?
10 java  oracle  jvm  upgrade 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.