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

Javaは人気のある高水準プログラミング言語です。言語自体の使用または理解に問題がある場合は、このタグを使用してください。このタグが単独で使用されることはめったになく、[spring]、[spring-boot]、[jakarta-ee]、[android]、[javafx]、[gradle]、および[maven]と組み合わせて使用​​されることがほとんどです。

10
mavenを使用したJavaはビルドできません:プログラム「cmd」を実行できません「不正な引数に引用符が埋め込まれています」
netbean 11.1の新規インストールがあります。現在、プロジェクトをビルドしようとしていますが、次のエラー出力が表示されます。 プログラム「cmd」を実行できません(ディレクトリ「C:\ projects \ open」内):不正な形式の引数に引用符が埋め込まれています:「C:\ Program Files \ NetBeans-11.1 \ netbeans \ java \ maven \ bin \ mvn.cmd」 cd C:\projects\open; "JAVA_HOME=C:\\Program Files\\Java\\jdk-11.0.5" cmd /c "\"\"C:\\Program Files\\NetBeans-11.1\\netbeans\\java\\maven\\bin\\mvn.cmd\" -DskipTests=true -Dmaven.ext.class.path=\"C:\\Program Files\\NetBeans-11.1\\netbeans\\java\\maven-nblib\\netbeans-eventspy.jar\" -Dfile.encoding=UTF-8 clean install\"" Cannot run program "cmd" (in directory "C:\projects\open"): Malformed argument has embedded quote: "C:\Program Files\NetBeans-11.1\netbeans\java\maven\bin\mvn.cmd" -DskipTests=true -Dmaven.ext.class.path="C:\Program …

3
パラメータでのJavaタイプの昇格
私はこのスニペットを偶然見つけました: public class ParamTest { public static void printSum(int a, double b) { System.out.println("In intDBL " + (a + b)); } public static void printSum(long a, long b) { System.out.println("In long " + (a + b)); } public static void printSum(double a, long b) { System.out.println("In doubleLONG " + (a …

2
数値が0のときに、ストリームでlimit(number)呼び出しをスキップするにはどうすればよいですか?
のオブジェクトを提供するJavaコードがいくつかありますitems。それはに基づいてそれらを制限しますmaxNumber: items.stream() .map(this::myMapper) .filter(item -> item != null) .limit(maxNumber) .collect(Collectors.toList()); それは正しく動作しますが、問題はこれです:制限をスキップする方法はありmaxNumber == 0ますか? 私はこれを行うことができることを知っています: if (maxNumber == 0) { items.stream() .map(this::myMapper) .filter(item -> item != null) .collect(Collectors.toList()); } else { items.stream() .map(this::myMapper) .filter(item -> item != null) .limit(maxNumber) .collect(Collectors.toList()); } しかし、おそらくもっと良い方法があると思いますか?


6
Javaがスーパータイプを推測できないのはなぜですか?
Longが拡張することは誰もが知っていNumberます。では、なぜこれがコンパイルされないのでしょうか? またwith、プログラムを手動キャストなしでコンパイルできるようにメソッドを定義する方法は? import java.util.function.Function; public class Builder<T> { static public interface MyInterface { Number getNumber(); Long getLong(); } public <F extends Function<T, R>, R> Builder<T> with(F getter, R returnValue) { return null;//TODO } public static void main(String[] args) { // works: new Builder<MyInterface>().with(MyInterface::getLong, 4L); // works: new Builder<MyInterface>().with(MyInterface::getNumber, (Number) 4L); …

1
Javaで使用されるメモリフェンスとは何ですか?
バージョン9でJava SEに追加された新しいクラスSubmissionPublisher(Java SE 10のソースコード、OpenJDK | docs)がどのように実装されているかを理解しようとしているVarHandleときに、以前は知らなかったいくつかのAPI呼び出しに遭遇しました。 fullFence、acquireFence、releaseFence、loadLoadFenceとstoreStoreFence。 特にメモリバリア/フェンスの概念に関していくつかの調査を行った後(以前に聞いたことがありますが、使用していなかったため、セマンティクスにはまったく不慣れでした)、それらの目的について基本的な理解ができたと思います。それにもかかわらず、私の質問は誤解から生じる可能性があるため、私はそもそもそれが正しく行われたことを確認したいと思います。 メモリバリアは、読み取りおよび書き込み操作に関する制約を並べ替えています。 メモリバリアは、読み取りまたは書き込み、あるいはその両方に制約を設定するかどうかに応じて、単方向および双方向のメモリバリアという2つの主要なカテゴリに分類できます。 C ++はさまざまなメモリバリアをサポートしていますが、これらはが提供するバリアとは一致しませんVarHandle。ただし、で利用可能なメモリバリアの一部は、対応するC ++メモリバリアと互換性のある順序付け効果をVarHandle提供します。 #fullFence と互換性があります atomic_thread_fence(memory_order_seq_cst) #acquireFence と互換性があります atomic_thread_fence(memory_order_acquire) #releaseFence と互換性があります atomic_thread_fence(memory_order_release) #loadLoadFenceそして、#storeStoreFence互換性のあるC ++カウンターパートを持っていません 詳細に関してはセマンティクスが明らかに異なるため、ここでは互換性という言葉は本当に重要なようです。たとえば、すべてのC ++バリアは双方向ですが、Javaのバリアはそうではありません(必須)。 ほとんどのメモリバリアにも同期効果があります。これらは特に、使用されているバリアタイプと、他のスレッドで以前に実行されたバリア命令に依存します。バリア命令が持つ完全な影響はハードウェア固有なので、高レベル(C ++)のバリアを使用します。たとえば、C ++では、バリア解放命令の前に行われた変更は、バリア取得命令を実行するスレッドに表示されます。 私の仮定は正しいですか?もしそうなら、私の結果の質問は: で使用可能なメモリバリアはVarHandle、何らかの種類のメモリ同期を引き起こしますか? それらがメモリ同期を引き起こすかどうかに関係なく、Javaで何を並べ替える制約が役立つのでしょうか?Javaメモリモデルは、揮発性フィールド、ロック、またはVarHandle操作など#compareAndSetが関係する場合の順序付けに関して、すでにいくつかの非常に強力な保証を提供しています。 例を探している場合:前述BufferedSubscriptionのSubmissionPublisher(上記のリンクされたソース)の内部クラスは、1079行に完全なフェンスを設定しました(関数growAndAdd;リンクされたWebサイトはフラグメント識別子をサポートしていないため、CTRL + Fを使用するだけです) )。しかし、それが何のためにあるのか私には分かりません。

2
矢印(->)演算子の優先順位/優先順位が最も低いか、割り当て/組み合わせ割り当ての優先順位が最も低いですか?
JLS: 最も優先順位の低い演算子は、ラムダ式の矢印(->)で、その後に代入演算子が続きます。 どちらの方向に進んだか(優先度の増加、優先度の減少)?-「フォロー済み」とは、割り当てが(矢印演算子に対して)優先度が高いか低いかを意味します。「最低」(矢印)は絶対最低を意味するので、増加すると思います。 私が理解しているように、矢印(->)はこのプリンストン演算子の優先順位表の一番下(つまり、すべての代入演算子の下にあります)にある必要があります。 私の理解は正しいですか? ExamTrayは、矢印の優先順位は少なくとも割り当てと同じであると言っているようです...さらに、矢印の結合性は(割り当てとは異なり)左→右→右であることを明確にしました。矢印の結合性に関するJLSの引用は見つかりませんでした。 私はいつも、割り当ての優先順位は主に理由により最低だと思っていました。

4
WindowsでのマルチスレッドJavaアプリケーションのCPU使用率が低すぎる
私は、数値最適化問題のクラスを解決するためのJavaアプリケーションに取り組んでいます-より正確に言うと、大規模線形計画問題です。単一の問題は、並列に解決できる小さなサブ問題に分割できます。CPUコアよりも多くのサブ問題があるため、ExecutorServiceを使用して、各サブ問題を、ExecutorServiceに送信されるCallableとして定義します。サブ問題を解決するには、ネイティブライブラリ(この場合は線形計画法ソルバー)を呼び出す必要があります。 問題 最大44の物理コアと最大256gのメモリを備えたUnixおよびWindowsシステムでアプリケーションを実行できますが、大きな問題の場合、Windowsでの計算時間はLinuxでの計算時間よりも桁違いに長くなります。Windowsはかなり多くのメモリを必要とするだけでなく、時間の経過に伴うCPU使用率は最初の25%から数時間後には5%に低下します。Windowsのタスクマネージャのスクリーンショットは次のとおりです。 観察 問題全体の大規模なインスタンスの解決時間は数時間から数日の範囲で、最大32gのメモリを消費します(UNIXの場合)。副問題の解決時間はmsの範囲です。 この問題は、数分で解決できる小さな問題では発生しません。 Linuxはそのままの状態で両方のソケットを使用しますが、Windowsは、アプリケーションが両方のコアを利用するように、BIOSでメモリインターリービングを明示的にアクティブにする必要があります。ただし、これを行うかどうかは、時間の経過に伴う全体的なCPU使用率の低下には影響しません。 VisualVMのスレッドを見ると、すべてのプールスレッドが実行されていますが、待機中のものはありません。 VisualVMによると、90%のCPU時間はネイティブ関数呼び出しに費やされています(小さな線形プログラムを解く) アプリケーションは多くのオブジェクトを作成および逆参照しないため、ガベージコレクションは問題になりません。また、ほとんどのメモリはオフヒープに割り当てられているようです。最大のインスタンスでは、Linuxでは4g、Windowsでは8gのヒープで十分です。 私が試したこと あらゆる種類のJVM引数、高XMS、高メタスペース、UseNUMAフラグ、その他のGC。 異なるJVM(ホットスポット8、9、10、11)。 さまざまな線形計画ソルバーのさまざまなネイティブライブラリ(CLP、Xpress、Cplex、Gurobi)。 ご質問 ネイティブコールを多用する大規模なマルチスレッドJavaアプリケーションのLinuxとWindowsのパフォーマンスの違いは何が原因ですか? たとえば、Windowsに役立つ実装で変更できるものはありますか。たとえば、何千ものCallableを受け取るExecutorServiceの使用を避け、代わりに何をすべきでしょうか?


1
証明書ファイル(.android \ emulator-grpc.cer)を取得する方法
Javaを更新した後、エミュレータを実行するたびにこのメッセージが表示されます 21:13 Emulator: emulator: WARNING: EmulatorService.cpp:448: Cannot find certfile: C:\Users\Aml\.android\emulator-grpc.cer security will be disabled. 21:13 Emulator: Started GRPC server at 127.0.0.1:8554 誰かがこの問題に直面しましたか?この問題を解決できますか?

3
URIの作成時にホスト名が無効と宣言されるのはなぜですか
このコードをJDK 1.8で実行する: try { System.out.println( new URI(null, null, "5-12-145-35_s-81", 443, null, null, null)); } catch (URISyntaxException e) { e.printStackTrace(); } このエラーが発生します: java.net.URISyntaxException: Illegal character in hostname at index 13: //5-12-145-35_s-81:443 タイプのURI文字によると、すべてのホスト名文字が合法であると考えると、このエラーはどこから発生しますか? 私はこれらのURLを使用する場合://5-12-145-35_s-81:443または/5-12-145-35_s-81:443エラーがなくなっています。 コメントから、RFC-2396によれば、ホスト名にアンダースコア文字を含めることはできないことを理解しています。 依然として疑問が残るのは、スラッシュまたはダブルスラッシュで始まるホスト名にアンダースコアを含めることが許可されるのはなぜですか?
17 java 


9
Chromedriver 78で発生する可能性のある問題、SeleniumがChromeで開かれたPDFのWeb要素を見つけられない
私のGoogle Chromeがバージョン78に更新されない限り、私のコードは問題なく動作しました。また、chromedriverをバージョン78.0.3904.70に更新しました。したがって、Selenium WebDriverとJavaを使用してid = 'plugin'のWebElementを見つけることができなくなりました。 <html> <div id="content"> <embed id="plugin" type="application/x-google-chrome-pdf" src="http://??????????/offer_printed.php?printable=yes&reanudar=&> </div> </html> その部分以外は、私のテストは問題なく機能しています。以前に同様の問題が発生したことはありません。WebElement id = 'content'も見つけようとしましたが、同じエラーが発生します。 WebDriverWait wait = new WebDriverWait (driver, 90); WebElement scrollvalid = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("plugin"))); scrollvalid.sendKeys(Keys.PAGE_DOWN); scrollvalid.sendKeys(Keys.PAGE_DOWN); 私の自動化スクリプトはPDF要素を見つけ、ページを下にスクロールする必要があります。代わりに、次のエラーが表示されます:org.openqa.selenium.TimeoutException:By.id:プラグインによって検出された要素の可視性を待機して90秒後にタイムアウトしました 誰かが同様の問題に直面していますか?前もって感謝します。

3
並列無限Javaストリームがメモリ不足になる
次のJavaプログラムがを提供する理由を理解しようとしていますがOutOfMemoryError、対応するプログラムなしで.parallel()は対応していません。 System.out.println(Stream .iterate(1, i -> i+1) .parallel() .flatMap(n -> Stream.iterate(n, i -> i+n)) .mapToInt(Integer::intValue) .limit(100_000_000) .sum() ); 2つの質問があります。 このプログラムの意図する出力は何ですか? これがない.parallel()場合、これは単純に出力するように見えますsum(1+2+3+...)。つまり、flatMapの最初のストリームで単に「行き詰まる」ということです。これは理にかなっています。 並列では、予想される動作があるかどうかはわかりませんが、それは何らかの形で最初のnストリームをインターリーブしたと思われます。ここnで、並列ワーカーの数です。また、チャンク/バッファリングの動作に基づいて少し異なる場合もあります。 メモリが不足する原因は何ですか?具体的には、これらのストリームが内部でどのように実装されるかを理解しようとしています。 何かがストリームをブロックしていると思うので、ストリームが終了せず、生成された値を取り除くことができますが、評価の順序とバッファリングが発生する場所がわかりません。 編集:必要に応じて、Java 11を使用しています。 Editt 2:どうやら同じことは単純なプログラムIntStream.iterate(1,i->i+1).limit(1000_000_000).parallel().sum()でも発生するので、limitではなくの怠惰に関係している可能性がありflatMapます。

3
+0および-0は、intおよびfloatデータの異なる動作を示します
私はこの記事を読んで、マイナスとプラスのゼロです。 私の理解では、次のコードは 出力としてtrue とtrueを与えるはずです。 しかし、それは与えているfalseとtrue出力など。 負のゼロと正のゼロを比較しています。 public class Test { public static void main(String[] args) { float f = 0; float f2 = -f; Float F = new Float(f); Float F1 = new Float(f2); System.out.println(F1.equals(F)); int i = 0; int i2 = -i; Integer I = new Integer(i); Integer I1 …
16 java  java-8 

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