プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理 http://pc11.2ch.net/hp/
Webプログラミング http://pc11.2ch.net/php/
をご利用下さい。
よくある質問
・「コマンドまたはファイル名が違います」
「'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
「Exception in thread "main" java.lang.NoClassDefFoundError: 」
(p)ttp://www.wikiroom.com/java/?path,classpath
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」
・String に == は使うな。equals() を使え。※
質問時の心得
・コンパイルエラーか実行時エラーか、エラーではないが意図しない動作なのかはっきりしろ。あとエラーメッセージちゃんと読め。
・前提条件としてOS、開発環境、バージョン、使用フレームワーク等を明記。
前スレ
★★Java質問・相談スレッド180★★
https://mevius.5ch.net/test/read.cgi/tech/1492780397/
探検
★★Java質問・相談スレッド181★★
■ このスレッドは過去ログ倉庫に格納されています
2018/02/10(土) 17:49:40.56ID:l9ZzjyKP
615デフォルトの名無しさん
2018/07/26(木) 21:15:30.96ID:l6j0Y1pF616デフォルトの名無しさん
2018/07/26(木) 21:33:54.42ID:ekiha7MK うーんどうなんだろう、設計
617デフォルトの名無しさん
2018/07/27(金) 02:20:59.11ID:O4NPrPXG >>612
Linux の場合は fuser コマンドを使うと指定のファイルをオープンしているプログラムのプロセスIDが分かる。
何も出力がなければ開いているプロセスはない。
他のUNIX系OSにもこのコマンドはあるかも知れない。Windows の WSL にはこのコマンドはあった。
その他のOSではどうやるか知らないが、もし fuser コマンドがあるのならそれを使えば同じようにできるんじゃないかと思う。
Windows の場合は他のプロセスが開いている最中にリネームしようとするとエラーになるそうなのでこれを利用するという手があるようだ。
但し同じ方法はOSが違ったら使えない(例えばLinuxやUNIX系OSでは使えない。WSLはわからない)。
https://code.i-harness.com/ja/q/153800
Linux の場合は fuser コマンドを使うと指定のファイルをオープンしているプログラムのプロセスIDが分かる。
何も出力がなければ開いているプロセスはない。
他のUNIX系OSにもこのコマンドはあるかも知れない。Windows の WSL にはこのコマンドはあった。
その他のOSではどうやるか知らないが、もし fuser コマンドがあるのならそれを使えば同じようにできるんじゃないかと思う。
Windows の場合は他のプロセスが開いている最中にリネームしようとするとエラーになるそうなのでこれを利用するという手があるようだ。
但し同じ方法はOSが違ったら使えない(例えばLinuxやUNIX系OSでは使えない。WSLはわからない)。
https://code.i-harness.com/ja/q/153800
618デフォルトの名無しさん
2018/07/27(金) 06:07:34.18ID:br8yoTOu paiza.ioってローカルPCのファイルやフォルダ操作するコードは実行出来ないですか?
619デフォルトの名無しさん
2018/07/27(金) 12:15:33.71ID:4+ImbG1U >>614
ログを開くアプリケーションによってはロック状態を認識できませんでした。
FileChannelクラスのtryLookメソッドを使いました。
OSがcentosでLibreOfficeで開いてるときはロック状態でしたが、geditで開いたときはロックされてなかったです。
何か初心者がおかしやすいミスとかってありますかね。
もう諦めてるんですがgeditが特殊なんですかね
ログを開くアプリケーションによってはロック状態を認識できませんでした。
FileChannelクラスのtryLookメソッドを使いました。
OSがcentosでLibreOfficeで開いてるときはロック状態でしたが、geditで開いたときはロックされてなかったです。
何か初心者がおかしやすいミスとかってありますかね。
もう諦めてるんですがgeditが特殊なんですかね
620デフォルトの名無しさん
2018/07/27(金) 12:16:37.86ID:4+ImbG1U gedit以外のテキストエディタでも同じでしたね
ロックの確認できません。
ロックの確認できません。
621デフォルトの名無しさん
2018/07/27(金) 12:58:52.13ID:ki81FzEq 普通はしないよ。
一々ロックしてたら、たとえばGitなんか阿鼻叫喚の地獄になる。
一々ロックしてたら、たとえばGitなんか阿鼻叫喚の地獄になる。
622デフォルトの名無しさん
2018/07/27(金) 13:04:46.00ID:4+ImbG1U >>621
そうなんですね
そうなんですね
623デフォルトの名無しさん
2018/07/27(金) 13:26:56.82ID:EBOSMkzO >>619
UNIX系OSではオープンしただけでは普通はロックまで掛からなくて、別途 flock() したり fcntl() でロックするようになっている。なので本当に必要な場合しかロックしないのが普通だ。
オープンしてるかどうかだけ確認したいなら fuser コマンドや lsof コマンドを使った方が楽だ。
Linux限定で良いなら /proc ディレクトリ以下を自分で探ってもできるけどね。
それだと多分本当にLinuxのみになるし fuser や lsof も Linux 用なら中で同じことしてるだろうから任せた方が良い。
UNIX系OSではオープンしただけでは普通はロックまで掛からなくて、別途 flock() したり fcntl() でロックするようになっている。なので本当に必要な場合しかロックしないのが普通だ。
オープンしてるかどうかだけ確認したいなら fuser コマンドや lsof コマンドを使った方が楽だ。
Linux限定で良いなら /proc ディレクトリ以下を自分で探ってもできるけどね。
それだと多分本当にLinuxのみになるし fuser や lsof も Linux 用なら中で同じことしてるだろうから任せた方が良い。
624デフォルトの名無しさん
2018/07/27(金) 14:29:19.42ID:4+ImbG1U >>623
色々教えて下さりありがとうございます。
色々教えて下さりありがとうございます。
625デフォルトの名無しさん
2018/07/29(日) 02:53:34.15ID:noej9t8s javaのバージョンって1.8だったり8だったり表記が複数あるようですが何なんですかこれは
626デフォルトの名無しさん
2018/07/29(日) 04:29:48.18ID:SHCnQYdt なんなんでしょうね
627デフォルトの名無しさん
2018/07/29(日) 05:54:37.87ID:Oaphdh9V 初見殺し
628デフォルトの名無しさん
2018/07/29(日) 08:38:57.85ID:7lOBGcOb >>625
Javaのバージョン
https://so-zou.jp/software/tech/programming/java/introduction/version/
意外と知らないバージョン表記・数字の豆知識
http://www.atmarkit.co.jp/ait/articles/1003/26/news106.html
理由はよくわからないが、やはり営業的な理由なんじゃないだろうか。
バージョン番号が大きい方が他の製品よりも良いものであるかのような印象を与えられるから。
Perlなんかは(フリーソフトで誰にも売る必要がないためか)これの逆をやってしまい、大きな変更が
あったのにほんのちょっとしかバージョン番号を上げなかったためにほとんど違いがないと誤解
された事があり、それでその後はバージョン番号の振り方のルールを変えた。
Javaのバージョン
https://so-zou.jp/software/tech/programming/java/introduction/version/
意外と知らないバージョン表記・数字の豆知識
http://www.atmarkit.co.jp/ait/articles/1003/26/news106.html
理由はよくわからないが、やはり営業的な理由なんじゃないだろうか。
バージョン番号が大きい方が他の製品よりも良いものであるかのような印象を与えられるから。
Perlなんかは(フリーソフトで誰にも売る必要がないためか)これの逆をやってしまい、大きな変更が
あったのにほんのちょっとしかバージョン番号を上げなかったためにほとんど違いがないと誤解
された事があり、それでその後はバージョン番号の振り方のルールを変えた。
629デフォルトの名無しさん
2018/07/29(日) 13:22:46.86ID:pFjYaTQt630デフォルトの名無しさん
2018/07/29(日) 21:11:31.52ID:JZa4OXPE eclipseをphoton にしてワークスペースをそのまま引き継ごうとしたら実行できなくなっちゃった。どうすればいいか教えてちょ
631デフォルトの名無しさん
2018/07/29(日) 21:23:30.06ID:JZa4OXPE eclipseをphoton にしてワークスペースをそのまま引き継ごうとしたら実行できなくなっちゃった。どうすればいいか教えてちょ
632デフォルトの名無しさん
2018/07/29(日) 21:46:32.56ID:sUhDPIHz ごめんちょ
633デフォルトの名無しさん
2018/07/30(月) 05:51:28.50ID:HJqNjAI+634デフォルトの名無しさん
2018/07/31(火) 23:16:57.30ID:ZNFzWxLv 初歩的な質問になるんですが異なる2つのクラスで1つの値を共有したいときってどういったやり方あります?
class a
String str
class b
a.setStr
class c
a.getStr
大分省略してますがこんなことをやりたいです。
実行順はbで更新した後にcで取得
class a
String str
class b
a.setStr
class c
a.getStr
大分省略してますがこんなことをやりたいです。
実行順はbで更新した後にcで取得
635デフォルトの名無しさん
2018/07/31(火) 23:22:07.36ID:3ipQI8/S クラスbとcのメンバにaクラスのフィールドをもちbとcのコンストラクタでaを設定する
636デフォルトの名無しさん
2018/07/31(火) 23:30:21.51ID:ZNFzWxLv class b
a a
public b
a = new a
a.set
class c
a a
public c
a = new a
a.get
みたいな感じですかね?
この場合ってbとcでそれぞれ作ったaのインスタンスって別物扱いになりません?
a a
public b
a = new a
a.set
class c
a a
public c
a = new a
a.get
みたいな感じですかね?
この場合ってbとcでそれぞれ作ったaのインスタンスって別物扱いになりません?
637デフォルトの名無しさん
2018/07/31(火) 23:31:13.26ID:0/QW8S54 >>636
外でnewして渡せ
外でnewして渡せ
638デフォルトの名無しさん
2018/08/01(水) 00:58:32.44ID:r0ZYJdIw639デフォルトの名無しさん
2018/08/01(水) 06:25:06.11ID:IkENlkBK new a
new b(a)
new c(a)
new b(a)
new c(a)
640デフォルトの名無しさん
2018/08/01(水) 07:48:14.65ID:3Ruau8S/ jdk11 ea でローカルswing アプリテストしたいのですが、
・jdk11 ea openjdkを取ってくる
・展開して適当なパスに置く
・path/to/openjdk/bin/java -jar myapp.jar
で起動出来るのでしょうか?
・jdk11 ea openjdkを取ってくる
・展開して適当なパスに置く
・path/to/openjdk/bin/java -jar myapp.jar
で起動出来るのでしょうか?
641デフォルトの名無しさん
2018/08/01(水) 10:26:14.54ID:198aEqhp やってみりゃいいじゃん
642デフォルトの名無しさん
2018/08/02(木) 02:22:35.17ID:reX89mAv 通信の優先度を決める事はできますか?
でかいファイルを送受信するけど、他のアプリに影響を出したくなくて、
低い優先度で送りたい。
でかいファイルを送受信するけど、他のアプリに影響を出したくなくて、
低い優先度で送りたい。
643デフォルトの名無しさん
2018/08/02(木) 02:39:35.74ID:vClc7nAi >>642
自分でゆっくり送ればいいのでは?
自分でゆっくり送ればいいのでは?
644デフォルトの名無しさん
2018/08/02(木) 07:50:56.22ID:yvP4ulwr プロセス・スレッドの優先度は、設定できないの?
645デフォルトの名無しさん
2018/08/02(木) 08:06:14.31ID:SwjRc7UR プロセスの優先度は知らんがスレッドの優先度なら
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Thread.html#setPriority-int-
// コードが走ってるスレッドの優先度を変える
Thread.currentThread().setPriority(priority); // 0(MIN_PRIORITY) ~ 10(MAX_PRIORITY)
// 生成したスレッドの優先度を変える
Thread thread = new Thread(runnable);
thread.setPriority(priotrity);
thread.start();
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Thread.html#setPriority-int-
// コードが走ってるスレッドの優先度を変える
Thread.currentThread().setPriority(priority); // 0(MIN_PRIORITY) ~ 10(MAX_PRIORITY)
// 生成したスレッドの優先度を変える
Thread thread = new Thread(runnable);
thread.setPriority(priotrity);
thread.start();
646デフォルトの名無しさん
2018/08/02(木) 08:10:14.12ID:lJdnLKf/647デフォルトの名無しさん
2018/08/08(水) 20:48:19.34ID:Y8NXA7MO アンドロイドアプリを作りたいのですが
数か月の間、メンターになってくえれる人を探そうと思ったら
どんなサイトで募集すればいいのでしょうか?
数か月の間、メンターになってくえれる人を探そうと思ったら
どんなサイトで募集すればいいのでしょうか?
648デフォルトの名無しさん
2018/08/08(水) 21:34:50.44ID:hdmbPKpc 俺がなってやろうか?
3ヵ月240万円でいいよ
3ヵ月240万円でいいよ
649デフォルトの名無しさん
2018/08/08(水) 21:38:15.67ID:oyXSOhRB メンターなんて言葉一般的に使うの?
自己啓発セミナーみたいでいやだなあ
あ、ボクはアナルオナニーインストラクターです
自己啓発セミナーみたいでいやだなあ
あ、ボクはアナルオナニーインストラクターです
650デフォルトの名無しさん
2018/08/08(水) 21:40:40.73ID:Y8NXA7MO 基本料金1か月3万円でお願いします
あとはオファーにより別途請求というシステムで
あとはオファーにより別途請求というシステムで
651デフォルトの名無しさん
2018/08/08(水) 22:33:01.96ID:D/rM6Nrn マンツーマンで教えるとなると時給の最低ラインは3000円だから
月3万円だと月10時間、1日15分ぐらいだな
月3万円だと月10時間、1日15分ぐらいだな
652デフォルトの名無しさん
2018/08/09(木) 10:10:38.81ID:gFPymi4k 専属の人を雇うとなると家庭教師雇うみたいなもんだから高くなるのではないか?
本やネットで調べながらでも何れはできるようになる事についてそこまで投資する必要があるのか?
何らかの期限があるなどして早く覚えないとまずいということか?
本やネットで調べながらでも何れはできるようになる事についてそこまで投資する必要があるのか?
何らかの期限があるなどして早く覚えないとまずいということか?
653デフォルトの名無しさん
2018/08/09(木) 10:33:41.65ID:SPEbgWbN パソコン教室に行って来い
654デフォルトの名無しさん
2018/08/09(木) 16:50:59.46ID:bgFYGL9Q synchronizedListはイテレータがスレッドセーフじゃないといいますが
for(int i=0;i<list.size();i++)
Element e = list.get(i);
もしsizeの増減が無い場合、こんな書き方はスレッドセーフに全要素にアクセスできますか?
for(int i=0;i<list.size();i++)
Element e = list.get(i);
もしsizeの増減が無い場合、こんな書き方はスレッドセーフに全要素にアクセスできますか?
655デフォルトの名無しさん
2018/08/09(木) 18:59:15.93ID:e0VFp9K8 できません
sizeを確認してからgetするまでに要素数が変化する可能性を排除できていません
sizeを確認してからgetするまでに要素数が変化する可能性を排除できていません
656デフォルトの名無しさん
2018/08/09(木) 18:59:52.71ID:e0VFp9K8 あ、ごめん
サイズ増減なしって条件書いてあったね
サイズ増減なしって条件書いてあったね
657デフォルトの名無しさん
2018/08/09(木) 19:02:22.63ID:e0VFp9K8 それはサイズが既知でgetしか使ってないのと同じで安全
ていうか要素が変化しないならスレッドセーフではないLinkedListでさえ安全に使えるでしょ
ていうか要素が変化しないならスレッドセーフではないLinkedListでさえ安全に使えるでしょ
658デフォルトの名無しさん
2018/08/18(土) 22:43:41.07ID:01sV26bM https://github.com/OpenHFT/Chronicle-Network
ここに出てくる"Wire"ってどういう意味ですか?
WireTextだの、WireEchoだの。
たぶんプログラミング界隈の用語だと思うんですが
ここに出てくる"Wire"ってどういう意味ですか?
WireTextだの、WireEchoだの。
たぶんプログラミング界隈の用語だと思うんですが
659デフォルトの名無しさん
2018/08/18(土) 23:10:04.14ID:ddghJ7gy ネットワークを繋ぐ線の概念なんじゃないかな
知らんけど、それっぽいと思った
知らんけど、それっぽいと思った
660デフォルトの名無しさん
2018/08/18(土) 23:30:49.48ID:01sV26bM meta -> meta.write(() -> "tid")
こういう記法は何を意味しますか?
(arg) -> code
みたいなのはラムダ式の説明で出てきますけど、metaはカッコがついていません
こういう記法は何を意味しますか?
(arg) -> code
みたいなのはラムダ式の説明で出てきますけど、metaはカッコがついていません
661デフォルトの名無しさん
2018/08/18(土) 23:35:11.85ID:01sV26bM Wire Message = 電報 ⇒ 通信されるデータ
WireType.TEXTとかWireType.BINARYがあるから、たぶんまさにそれだけの意味。
Network = Wireくらいの意味でこの人は使ってそうです。
WireType.TEXTとかWireType.BINARYがあるから、たぶんまさにそれだけの意味。
Network = Wireくらいの意味でこの人は使ってそうです。
662デフォルトの名無しさん
2018/08/18(土) 23:39:59.88ID:ddghJ7gy >>660
引数が1つのときはカッコを省略できるんよ
引数が1つのときはカッコを省略できるんよ
663デフォルトの名無しさん
2018/08/18(土) 23:58:07.43ID:01sV26bM 数千もの通信を同時処理する高性能なネットワークライブラリを探してるんですが、
何が良いんでしょう?Nettyは内容が難しすぎるんですが・・・。
難しいというか、必要としてるのは単にバイナリを送受信できればいいだけなので、
無駄に高機能過ぎる。
しかし、KeepAliveとか、サーバーが常駐してメッセージを受信してイベント起動、
とかは必要で。ネットワークライブラリの中身なにやってるかあまり詳しくないんですが。
Chronicle-Networkも良く分からない。
// the tid must be unique,
final long tid = tcpChannelHub.nextUniqueTransaction(System.currentTimeMillis());
System.currentTimeMillis()を使ったら、複数クライアントにおいてtidが重複するけど、
それでユニークといっていいのかどうか。
ちょっと情報が少なすぎるのでこれも無理そう。高速らしいんですが
Kryonetは、性能不足ですね。アップデートもされてません。
やはりNettyを頑張るしかないかもしれません。
何が良いんでしょう?Nettyは内容が難しすぎるんですが・・・。
難しいというか、必要としてるのは単にバイナリを送受信できればいいだけなので、
無駄に高機能過ぎる。
しかし、KeepAliveとか、サーバーが常駐してメッセージを受信してイベント起動、
とかは必要で。ネットワークライブラリの中身なにやってるかあまり詳しくないんですが。
Chronicle-Networkも良く分からない。
// the tid must be unique,
final long tid = tcpChannelHub.nextUniqueTransaction(System.currentTimeMillis());
System.currentTimeMillis()を使ったら、複数クライアントにおいてtidが重複するけど、
それでユニークといっていいのかどうか。
ちょっと情報が少なすぎるのでこれも無理そう。高速らしいんですが
Kryonetは、性能不足ですね。アップデートもされてません。
やはりNettyを頑張るしかないかもしれません。
664デフォルトの名無しさん
2018/08/19(日) 00:00:33.27ID:bn6Y5y/t >This comes at the cost of scalability for large number os connections. In this situation, this library should perform at least as well as netty.
これは多数のコンピューターからの同時接続ではNettyと同等の性能しかでない、
ということでしょうか?
想定してるのは1コンピューターとの高速な通信ということでしょうか。
これは多数のコンピューターからの同時接続ではNettyと同等の性能しかでない、
ということでしょうか?
想定してるのは1コンピューターとの高速な通信ということでしょうか。
665デフォルトの名無しさん
2018/08/19(日) 00:24:40.63ID:wM6XArJ0 WebSocket とかじゃないの?
666デフォルトの名無しさん
2018/08/19(日) 10:44:02.78ID:bn6Y5y/t やっぱり高性能なJavaのネットワーキングライブラリはNettyが有力のようです。
あと、Wire Messageは、たぶん「頭4バイトにINT入れて、次8バイトにLONG入れて」みたいな
バイト配列にデータを敷き詰めてく感じの行為をWireというのだろうと。
あと、Wire Messageは、たぶん「頭4バイトにINT入れて、次8バイトにLONG入れて」みたいな
バイト配列にデータを敷き詰めてく感じの行為をWireというのだろうと。
667デフォルトの名無しさん
2018/08/19(日) 11:22:52.85ID:yNrD+B/d よかったね(LOL)
668デフォルトの名無しさん
2018/08/19(日) 15:48:44.36ID:bn6Y5y/t PooledUnsafeDirectByteBufとは何ですか?
Handlerでbyte[]やByteBufなどクラスを限定できますが、
単にbyte[]を使うことと比べてByteBufやPooledUnsafeDirectByteBufは何かメリットがありますか?
Handlerでbyte[]やByteBufなどクラスを限定できますが、
単にbyte[]を使うことと比べてByteBufやPooledUnsafeDirectByteBufは何かメリットがありますか?
669デフォルトの名無しさん
2018/08/19(日) 16:16:30.55ID:bn6Y5y/t どうやら単にbyte[]を送りたい場合でもByteBufを通すのが普通みたいですね
でもそれだとByteBufを作るときもそこからbyte[]を読み取るときもコピー操作があるようで遅そうです
通信に比べればメモリ操作による遅れは微々たるものかもしれませんが
Nettyより高速と謳うライブラリがありますがやはりバッファ周りの問題を指摘してましたが
これですかね
でもそれだとByteBufを作るときもそこからbyte[]を読み取るときもコピー操作があるようで遅そうです
通信に比べればメモリ操作による遅れは微々たるものかもしれませんが
Nettyより高速と謳うライブラリがありますがやはりバッファ周りの問題を指摘してましたが
これですかね
670デフォルトの名無しさん
2018/08/20(月) 08:34:48.22ID:nWwgLLcF ソース読んではいないけど、byte[]のWrapperなんじゃないの?
渡されたbyte[]を丸々コピーするような、あなたのような超初心者な実装はしていないと思うよw
そもそも、byte[]で送るといっても、自分でBufferのサイズを決めたり、通信環境を考慮したり、いろいろやらなきゃいけない。
だから、そういった最適化をByteBufのサブクラスたちは提供してくれているのでしょう。
渡されたbyte[]を丸々コピーするような、あなたのような超初心者な実装はしていないと思うよw
そもそも、byte[]で送るといっても、自分でBufferのサイズを決めたり、通信環境を考慮したり、いろいろやらなきゃいけない。
だから、そういった最適化をByteBufのサブクラスたちは提供してくれているのでしょう。
671デフォルトの名無しさん
2018/08/20(月) 16:30:51.58ID:x31M90y2 こういうコードがあった時、logが呼ばれてもデバッグモードでなければ
意味が無いけど、AnyHeavyMethodは計算されちゃうんでしょうか。
それとも最適化で実行されませんか?
//in some method
log(""+AnyHeavyNoEffectMethod(o));
public void log(String s){
if(isDebugMode())
System.out.println(s);
}
意味が無いけど、AnyHeavyMethodは計算されちゃうんでしょうか。
それとも最適化で実行されませんか?
//in some method
log(""+AnyHeavyNoEffectMethod(o));
public void log(String s){
if(isDebugMode())
System.out.println(s);
}
672デフォルトの名無しさん
2018/08/20(月) 20:31:28.54ID:7cywDiIN JITコンパイラは副作用がないことをどこまで調べるんだろうね
673デフォルトの名無しさん
2018/08/20(月) 20:50:34.41ID:DUHqVJSw >>671
isDebugModeの返す値が定数で、かつそこに登場してる全てのメソッドがインライン展開されれば実行されないんじゃない?
Javaって基本的に大規模アプリケーションに最適化されてて、局所的な速度よりも全体的な安定性やメモリ消費量を重視する傾向があるから、
あまり最適化には期待しないほうがいいよ
isDebugModeの返す値が定数で、かつそこに登場してる全てのメソッドがインライン展開されれば実行されないんじゃない?
Javaって基本的に大規模アプリケーションに最適化されてて、局所的な速度よりも全体的な安定性やメモリ消費量を重視する傾向があるから、
あまり最適化には期待しないほうがいいよ
674デフォルトの名無しさん
2018/08/20(月) 22:27:44.88ID:trJY4lAL AnyHeavyNoEffectMethodが重い処理で、Java8以降ならラムダ式使うんじゃね?
log(() -> "" + AnyHeavyNoEffectMethod(o));
public viod log(Supplier<String> s){
if (isDebugMode())
System.out.println(s.get()); // ここでAnyHeavyNoEffectMethodが実行される
}
log(() -> "" + AnyHeavyNoEffectMethod(o));
public viod log(Supplier<String> s){
if (isDebugMode())
System.out.println(s.get()); // ここでAnyHeavyNoEffectMethodが実行される
}
675デフォルトの名無しさん
2018/08/21(火) 08:43:36.63ID:VaNiE4c6 いいね。そっくりそのままDecoratorにもなってるからすっきりする。
676デフォルトの名無しさん
2018/08/21(火) 09:27:43.13ID:R/vyiArT それJavaの場合はラムダ内で外のミューダブルな変数を参照できないから微妙
677デフォルトの名無しさん
2018/08/21(火) 10:05:53.79ID:VaNiE4c6 どーーしても必要なら、観測したい変数をHeapに逃がせばいい(オブジェクトにぶら下げるとか)わけだけど。
Functional信者は怒りMaxだろうな。
Functional信者は怒りMaxだろうな。
678デフォルトの名無しさん
2018/08/21(火) 12:07:34.45ID:LMQ5YiiU >>676
変態すぎるだろ何やろうとしてるんだよ
変態すぎるだろ何やろうとしてるんだよ
679デフォルトの名無しさん
2018/08/21(火) 12:57:56.56ID:5BiPsrnL680デフォルトの名無しさん
2018/08/21(火) 15:25:34.33ID:LMQ5YiiU681デフォルトの名無しさん
2018/08/21(火) 15:30:01.19ID:LMQ5YiiU あ、わかった
682デフォルトの名無しさん
2018/08/21(火) 17:51:15.05ID:NYseXeYs683デフォルトの名無しさん
2018/08/21(火) 17:55:00.54ID:IftEBw66 ログなら普通にある状況だろ
それを使い方の問題というならラムダをログに使うという>>674の発想が間違ってるわ
それを使い方の問題というならラムダをログに使うという>>674の発想が間違ってるわ
684デフォルトの名無しさん
2018/08/21(火) 20:09:37.16ID:NYseXeYs ないよ。AOPとかDecoratorとか、ラムダが登場する以前からずっとやってきている話。
ラムダはそれをちょっとエレガントにできるようにしただけ。
だから、使い方の問題なんだよ。
ラムダはそれをちょっとエレガントにできるようにしただけ。
だから、使い方の問題なんだよ。
685デフォルトの名無しさん
2018/08/21(火) 22:05:33.53ID:flSi4mUH >>684はミュータブルな変数を一切ログ出力してないの?
自身を持って無いと言い切れるなら偉そうなこと言っていいぞ
自身を持って無いと言い切れるなら偉そうなこと言っていいぞ
686デフォルトの名無しさん
2018/08/21(火) 22:09:43.83ID:flSi4mUH ちなみにログ出力にJavaのラムダが適していないという話であって、ラムダがミューダブルな変数を参照できるべきだなんて誰も言ってないけど
>>684は勘違いしてる
>>684は勘違いしてる
687674
2018/08/22(水) 22:13:46.15ID:xSbYn5li 簡単な実験コード書いてみたけど最適化されませんね。
private static final boolean debug = false;
@Test
public final void testOptimization() {
final long start = System.currentTimeMillis();
log(anyHeavyNoEffectMethod() + "");
final long end = System.currentTimeMillis();
System.out.println((end - start) + "ms");//50ms
}
private static final void log(final String s) {
if (debug)
System.out.println(s);
}
private static final long anyHeavyNoEffectMethod() {
final Random r = new Random();
long total = 0;
int loop = 1000 * 1000;
for (int i = 0; i < loop; i++)
total += r.nextLong();
return total;
}
private static final boolean debug = false;
@Test
public final void testOptimization() {
final long start = System.currentTimeMillis();
log(anyHeavyNoEffectMethod() + "");
final long end = System.currentTimeMillis();
System.out.println((end - start) + "ms");//50ms
}
private static final void log(final String s) {
if (debug)
System.out.println(s);
}
private static final long anyHeavyNoEffectMethod() {
final Random r = new Random();
long total = 0;
int loop = 1000 * 1000;
for (int i = 0; i < loop; i++)
total += r.nextLong();
return total;
}
688デフォルトの名無しさん
2018/08/22(水) 22:39:39.44ID:xSbYn5li ラムダ式の方はanyHeavyNoEffectMethodが呼ばれません。
しかし、指摘のようにミュータブルな変数を渡せません。
log()の実装を二種類用意して使い分けていくのが妥当な気がします。
デコレーターパターンで解決できるんですか?
しかし、指摘のようにミュータブルな変数を渡せません。
log()の実装を二種類用意して使い分けていくのが妥当な気がします。
デコレーターパターンで解決できるんですか?
689デフォルトの名無しさん
2018/08/22(水) 22:48:19.72ID:xSbYn5li このような頻出のパターンについてJITは最適化すべきだと思います。
たぶん、それが一番妥当な解決策です。
副作用が無い事を確認する機能は、JITに既にありそうなものです。
少なくともある程度の範囲で副作用が無い事を確認できるはずです。
どうでもいいんですがこんなパターンにはJITは最適化を見せました。
for(){
list.add(i);
list.remove(i);//追加したものを即削除する
}
たぶん、それが一番妥当な解決策です。
副作用が無い事を確認する機能は、JITに既にありそうなものです。
少なくともある程度の範囲で副作用が無い事を確認できるはずです。
どうでもいいんですがこんなパターンにはJITは最適化を見せました。
for(){
list.add(i);
list.remove(i);//追加したものを即削除する
}
690デフォルトの名無しさん
2018/08/22(水) 22:51:11.60ID:z4qSfGT7 オーバーロードでいんじゃない?
ログの出力ってきほんStringじゃん
ログの出力ってきほんStringじゃん
691デフォルトの名無しさん
2018/08/25(土) 12:01:51.59ID:FONLvq+3 匿名クラスとかでスタック領域の変数を参照できますが、匿名クラスのオブジェクトが破棄されるまでそれらは生存するということですか?
public void method(Observable obs){
Object o = ...;
EventHandler handler = new EventHandler(){
@Override
public void handler(){
System.out.println(o);
}
}
obs.setOnAction(handler);
}
public void method(Observable obs){
Object o = ...;
EventHandler handler = new EventHandler(){
@Override
public void handler(){
System.out.println(o);
}
}
obs.setOnAction(handler);
}
692デフォルトの名無しさん
2018/08/25(土) 12:14:05.20ID:logoA4dK >>691
気のせい
実は無名クラスの中に隠しフィールドが生成されてoの値をコピーしている
ちなみにoは暗黙的にfinalになっており、後でoを書き換えようとするとコンパイルエラー
そこまでするならScalaやKotlinやC#みたいに最初からoをヒープに作っちまえよと思わなくもないが、
この中途半端な仕事かJavaクォリティ
気のせい
実は無名クラスの中に隠しフィールドが生成されてoの値をコピーしている
ちなみにoは暗黙的にfinalになっており、後でoを書き換えようとするとコンパイルエラー
そこまでするならScalaやKotlinやC#みたいに最初からoをヒープに作っちまえよと思わなくもないが、
この中途半端な仕事かJavaクォリティ
693デフォルトの名無しさん
2018/08/25(土) 13:05:07.70ID:KMExyDFm >>691
そうなるよ、参照関係を図で表すとこうな感じでしょ
https://light.dotup.org/uploda/light.dotup.org543719.png
オレンジが変数
緑がオブジェクト
メソッドを抜けてローカル変数o, handler, obsがなくなっても
Observable → EventHandler → Object
の参照は消えない
引数に渡してるObservableはメソッドの外で
変数から参照されてるだろうからメソッドを抜けても
破棄されないよ
そうなるよ、参照関係を図で表すとこうな感じでしょ
https://light.dotup.org/uploda/light.dotup.org543719.png
オレンジが変数
緑がオブジェクト
メソッドを抜けてローカル変数o, handler, obsがなくなっても
Observable → EventHandler → Object
の参照は消えない
引数に渡してるObservableはメソッドの外で
変数から参照されてるだろうからメソッドを抜けても
破棄されないよ
694デフォルトの名無しさん
2018/08/25(土) 13:38:45.65ID:QXNuAaPs695デフォルトの名無しさん
2018/08/26(日) 18:14:43.90ID:oLy9klNt ここを見るとRSA系は2048までしかありません。4096等だとRSA鍵による暗号化ができないということですか?
その場合、非標準のライブラリ等で解決できますか?
https://docs.oracle.com/javase/jp/8/docs/api/javax/crypto/Cipher.html
RSA/ECB/PKCS1Padding (1024、2048)
RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024、2048)
RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024、2048)
その場合、非標準のライブラリ等で解決できますか?
https://docs.oracle.com/javase/jp/8/docs/api/javax/crypto/Cipher.html
RSA/ECB/PKCS1Padding (1024、2048)
RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024、2048)
RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024、2048)
696デフォルトの名無しさん
2018/08/27(月) 09:33:01.48ID:n6GSDZ7+697デフォルトの名無しさん
2018/08/27(月) 09:47:55.19ID:n6GSDZ7+ 強度の強い暗号化は輸出制限あるから気を付けてね。
うっかりノートPCにセットしたまま他国へ持って行こうとするとバレた時に大変まずいことになるかも知れない。
うっかりノートPCにセットしたまま他国へ持って行こうとするとバレた時に大変まずいことになるかも知れない。
698デフォルトの名無しさん
2018/08/27(月) 17:31:52.62ID:n/TwkHD5 jre1.8の最近のバージョンでデフォルトで強度無制限になったようです。
とはいえ、java8の仕様上、2048までしかサポートする必要は無いようです。
実装によってサポートしているかもしれません。
とはいえ、java8の仕様上、2048までしかサポートする必要は無いようです。
実装によってサポートしているかもしれません。
699デフォルトの名無しさん
2018/08/27(月) 17:33:10.48ID:n/TwkHD5 このようなコードがあった場合、tは生存しますか?
tはどこからも参照されてないとします。
//in some method
Thread t = new Thread(){...};
t.start();
return;
tはどこからも参照されてないとします。
//in some method
Thread t = new Thread(){...};
t.start();
return;
700デフォルトの名無しさん
2018/08/27(月) 20:27:36.23ID:QkMU0TtV >>699
試してみた
https://paiza.io/projects/PxoO2-fLSd_KfpwF5B3prA
結果からわかることは
・メソッドを抜けてもスレッドが終了するわけではない
・スレッドが終了しないならばプロセスは終了しない
・ローカル変数がなくてもスレッドを取得できる
作成したスレッドのオブジェクトはどこかに保持されるみたいね
tは生存します、が答えっす
試してみた
https://paiza.io/projects/PxoO2-fLSd_KfpwF5B3prA
結果からわかることは
・メソッドを抜けてもスレッドが終了するわけではない
・スレッドが終了しないならばプロセスは終了しない
・ローカル変数がなくてもスレッドを取得できる
作成したスレッドのオブジェクトはどこかに保持されるみたいね
tは生存します、が答えっす
701デフォルトの名無しさん
2018/08/27(月) 20:52:27.61ID:l2rfNjjd 変数tを通してアクセスできなくなるだけだな。
702デフォルトの名無しさん
2018/08/27(月) 21:06:10.81ID:ngNgILlM threadは、main thread同様garbage collectionのrootとして扱われるそうなので、生存しまする
703デフォルトの名無しさん
2018/08/28(火) 10:11:17.88ID:nen4cHNL ただし、daemonthreadは除く。
704デフォルトの名無しさん
2018/08/29(水) 16:44:32.01ID:V/7UzzKh Eclipseとかいう汚物にJavaFXを入れたく思いマーケットプレースでjavafxで出てくるe(fx)clipseをインストールしようとしたところ長時間待たされた挙句にエラーが出ました
どうすればいいでしょうか?
どうすればいいでしょうか?
705デフォルトの名無しさん
2018/08/29(水) 16:50:03.76ID:V/7UzzKh706デフォルトの名無しさん
2018/08/29(水) 18:31:24.16ID:bzaK3e7y >>704
JavaFXは廃止されたから使っちゃダメ
JavaFXは廃止されたから使っちゃダメ
707デフォルトの名無しさん
2018/08/29(水) 18:35:28.97ID:bZ2D0xRL 諦めなさい
708デフォルトの名無しさん
2018/08/29(水) 20:23:25.71ID:QbSkJrbm マジで?!廃止されるのswingかと思ってた!
709デフォルトの名無しさん
2018/08/29(水) 20:35:24.50ID:LfUbbQ2v 厳密には廃止ではなく分離とされてる。
あとJava8が2020年までサポートだから、2020年までは1.8系のjreがあれば使える。
あとJava8が2020年までサポートだから、2020年までは1.8系のjreがあれば使える。
710デフォルトの名無しさん
2018/08/29(水) 20:44:48.17ID:LfUbbQ2v そもそもJavaの未来はどうなるのか。JREが有償化される。
OpenJDKはインストーラや自動アップデータが提供されるのか。
JavaFXは単体のライブラリとして独立できるはずだが、誰かがやるのかどうか。
現状だと、何やら面倒なインストール手順が必要なようで、
デスクトップアプリに使われるであろうJavaFXにとって致命的なはず。
mavenとかを使ってアプリに気軽に同梱できるものになればいいのだが。
OpenJDKはインストーラや自動アップデータが提供されるのか。
JavaFXは単体のライブラリとして独立できるはずだが、誰かがやるのかどうか。
現状だと、何やら面倒なインストール手順が必要なようで、
デスクトップアプリに使われるであろうJavaFXにとって致命的なはず。
mavenとかを使ってアプリに気軽に同梱できるものになればいいのだが。
711デフォルトの名無しさん
2018/08/29(水) 20:48:44.47ID:zRPnCBM0 JavaFX will continue to be supported in the future by the company Gluon as a downloadable module in addition to the JDK.
712デフォルトの名無しさん
2018/08/29(水) 20:49:34.59ID:zRPnCBM0713デフォルトの名無しさん
2018/08/29(水) 20:51:13.97ID:zRPnCBM0 このスレではJavaFXをオヌヌメします
JavaFXをオヌヌメしないのはoracleのコウサクイン
JavaFXをオヌヌメしないのはoracleのコウサクイン
714デフォルトの名無しさん
2018/08/29(水) 21:01:34.66ID:CmXgIFV4 JavaでデスクトップのGUI環境自体どうなんだ?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★4 [七波羅探題★]
- 中国軍機レーダー照射、トランプ氏沈黙突く 試される日本外交 [蚤の市★]
- 【地震】青森県で震度6強 長周期地震動も 津波注意報すべて解除 ★7 [ぐれ★] [ぐれ★]
- 【広島】「万引きした人を追跡」コンビニ店員の男性(46)を果物ナイフで刺したか 中国籍の少年(17)を殺人未遂容疑で現行犯逮捕 [ぐれ★]
- トランプ大統領 エヌビディア製AI半導体の中国輸出許可 安全保障重視の方針転換 [蚤の市★]
- 【サッカー】58歳カズ「オファーが来ている」 J3福島と近日中にも交渉 早ければ年内にも決断 [征夷大将軍★]
- 【悲報】高市早苗の擬人化がXで大バズりwwwwwwwwwwww [455031798]
- 高市が早くあの発言を撤回しないと、中国からもっと大きな制裁が飛んでくるぞ [805596214]
- 【動画】ファッションモデルまんこ、裸でランウェイを歩く。これがファッションだと言われて [749674962]
- 【画像】髙市さん「無職のシンママ支援を手厚くするため、世帯年収900万円以上の控除をカットします🙂」 [881878332]
- 早大名誉教授「高市内閣の高支持率はデータ操作か、支持している日本人がアホなのか」👈核心を突いてしまう [868050967]
- こんぺこ!こんぺこ!こんぺこ!🐰🏡
