C#では、プロジェクトをビルドする2つのモードがあります:Debug
とRelease
、Javaにも同じことがあるのだろうかと思います。私はIntelliJ IDEAをJava IDEとして使用していますが、これまでのところ、VS IDEのようなビルド・モードを設定する場所は見ていませんでした。JavaにはC#のような 'Debug'と 'Release'ビルドモードがありますか?
答えて
javac
-g Generate all debugging info
-g:none Generate no debugging info
-g:{lines,vars,source} Generate only some debugging info
あなたがコンパイルされたクラスでのデバッグシンボルを含めるように選択することができます(これがデフォルトです)、またはそうではないし。それをしないとあまり効果はありません。 jarファイルはa little smallerになりますが、パフォーマンス上のメリットは最小限に抑えられます(存在する場合)。これらのシンボルがなければ、スタックトレースに行番号が表示されなくなります。 additional symbols with local variable namesを含めることもできます(デフォルトでは、ソースファイル名と行番号のみがあります)。
java
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
enable assertions
また、開発およびテスト時に便利な場合があり、実行時にアサーションを(デフォルトはオフ)、有効にすることができます。これはパフォーマンス上の影響があります(問題のコードが実際にアサーションを使用していた場合、私はuncommonだと思います)。
これらの設定に関係なく、JVMでは常にデバッガを接続できます。
Javaには、いくつかの外部設定に基づいて完全に異なるコードをコンパイルする条件付きコンパイルがありません。あなたが得ることができる最も近いものは、あなたのコードのどこかにpublic static final boolean DEBUG_BUILD = true;
のようなものであり、ifステートメントでそれを使用します。これは、実際には到達不能になるコードをコンパイラに除外させますが、ソースコードでこの定数を設定する必要があります。
あなたは、さまざまな種類のビルドを私が推測する別のものでコンパイルするように求めています。たとえば、Debug.WriteLineとConsole.WriteLineがあるとします。
"いいえ、Javaはその機能に完全に一致しません。アスペクトを使用することも、IOCコンテナを使用してさまざまな実装クラスを注入することもできます。次の質問からこれを盗んだ:Conditional Java compilation
(あなたのために他の素敵な答えがそこにそこにいる)
それはすべてを解放するためにJavaで通常の練習でデバッグすることができた方法です。難読化を必要とするいくつかのプロジェクトでは、リリースビルドを持つことができましたが、私はJavaを開発して12年目にこれを見たことがありません。
アサーションやデバッグメッセージなどは、通常は本番インスタンスでは実行時にオフになりますが、必要に応じていつでも(動的にでも)オンにすることができます。
IMHO同一のソースではなく、同じJARで、すべての環境で同じビルドを使用することをお勧めします。これは、テストで動作する場合、プロダクションで動作し、プロダクションで問題がある場合は、テストで再生成できるという最高のチャンスを与えます。
このように多くのJavaコードが記述されているので、JITは決して呼び出されないデッドコードの最適化に非常に優れています。 IMHOは、Java OutがC++を実行するマイクロベンチマークのほとんどを、ベンチマークが何もせず、これを検出するのにJITが優れている場合です。 IMHO、C++は、開発者が何もしないコードを書かないほどスマートであると想定しています。
"Javaを開発して12年目にこれを見たことがない"。私にとっては、これはあなたの答えの中で最も関連性の高い部分です.HFT用Java(!)を書いているようです。これは、すべてのデバッグ情報を含むようにJavaコードをコンパイルすることは、JVM JITを行うかどうかを妨げるかどうかを意味しますか?はいと思っていますが、確認を求めます。 – kevinarpe
- 1. .NetにはDebug&Releaseビルドがありますが、Javaにはないのはなぜですか?
- 2. JavaにはC#のような属性がありますか?
- 3. Objective-Cの難読化はDEBUGで動作しますが、RELEASE
- 4. DebugとReleaseフォルダの違い
- 5. .NETコンパイラ - DEBUG vs. RELEASE
- 6. CMakeビルドディレクトリのビルドタイプがDebugかReleaseかを確認するには?
- 7. アプリケーション検証プログラムDEBUGまたはRELEASEモード?
- 8. 実行ファイルがVisual BasicのVS2005のobj \ Debugフォルダまたはobj \ Releaseフォルダにあるのはなぜですか?
- 9. JavaにはCHESSのようなものがありますか?
- 10. 劇的なパフォーマンスの違い:debug vs release
- 11. ScriptManagersのScriptModeのDebugとReleaseの違いは何ですか?
- 12. C++にJava初期化ブロックのような構造体がありますか?
- 13. .gitignoreとVisual Studioプロジェクト:bin/Debugディレクトリではなくbin/Releaseディレクトリ
- 14. JavaのようなCOLOR.whateverに相当するC++はありますか?
- 15. Objective-CにJava enumのようなものはありますか?
- 16. .NETの 'Debug'ビルドと 'Release'ビルドの主な違いは何ですか?
- 17. javaにLINQのような実装がありますか?
- 18. Spring 3.0.3.RELEASEからアップグレードすると、次のようになります。java.lang.NoSuchFieldError:USER_DECLARED_METHODS
- 19. セカンダリスレッドのスタックサイズ、DEBUGとRELEASEバージョンの重要な違い
- 20. JavaScriptにC#String.Format(...)のようなものがありますか?
- 21. には、HaskellのThreadscopeのようなC/C++用のスレッドトレーサがありますか?
- 22. JavaにRhinoMocksのようなものはありますか?
- 23. NodeJSに(JavaのJasperReportのような)レポートエンジンはありますか?
- 24. はそのようなリストコントロールがC++にあります
- 25. java用のApacheコモンズのような、標準のC#libはありますか?
- 26. asp.netのjavaサーブレットのようなものがありますか?
- 27. PublishがXNAのReleaseより速いのはなぜですか?
- 28. Codecademy for Javaのようなものがありますか
- 29. Jenkins + Windows + CMake +複数のビルドタイプ(Debug、Release)
- 30. DebugからReleaseに切り替えると、Visual Studioで私のメインプロジェクトをConsoleからWindowに変更します
あなたは** java using assert **のようなものをウェブで検索しましたか? IDEAに関しては、 /bin/idea.exe.vmoptionsを調べると、 '-ea'設定が存在する場合、' Debug'モードで動作する可能性が最も高いでしょう。 –
gnat
@gnat、はい、あります'-ea'は' idea.exe.vmoptions'で設定します。しかし、アーチファクト(jarファイル)をビルドするとき、アーチファクトを持つ 'Debug'モードではどうでしょうか? vmoptionsファイル内の – JatSing
、 '-ea'はIDEAの実行方法に影響を与えます(あなたが知っているJavaアプリケーションですか? jarファイルでは、 '-ea'を指定するか省略することで、実行時にモードを管理します。私が書いたように、Webでjavaを検索すると、 – gnat