#author("2020-04-05T06:07:38+00:00","default:wikiadmin","wikiadmin") #author("2020-06-10T11:16:13+00:00","default:wikiadmin","wikiadmin") Java全般目次ページ #contents *Optinal修行 [#g34e65c0] if (dinner != null) { shop.setDinnerPrice(dinner.text()); } // 以下に置換可能 Optional.ofNullable(dinner).ifPresent(element -> shop.setDinnerPrice(dinner.text())); // initParam はmap String hoge = "DEFAULT"; if (initParam != null) { hoge = initParam.get("key"); } // 以下に置き換え可能 String hoge = Optional.ofNullable(initParam) .map(param -> param.get("key")) .filter(str -> !str.isEmpty()) .orElse("DEFAULT"); // ifpresetとgetを使わないやり方 Optional<String> optTest = Optional.empty(); return optTest.map("SOME_VALUE"::equals).orElse(false); *JDKバージョンアップ対応 [#s4c4c187] **JDK11 [#k315b03d] -自作バッチはOK -SpringBoot1.5はコンパイルできず、起動もNoClassDefFoundeで詰んだ。 *IDE [#o92efe1d] -Eclipse -IntelliJ *派生言語 [#b1c2954f] +groovy +scala +kotlin *SDKMAN! [#s49eddbf] sdkコマンド一発で関連ツールをインストールできる **SDKMAN!インストール [#i2627b3e] curl -s get.sdkman.io | bash *OpenJDKの場所 [#ke6e7565] readlink $(readlink $(which java)) これでOpenJDKの場所が判明する。 *JVM [#w1c89a07] [[JVMチューニング:http://www.atmarkit.co.jp/fjava/rensai3/javavm01/javavm01_1.html]] http://d.hatena.ne.jp/learn/20090218/p1 **JVMオプション [#df91765a] -JVMのタイプを選ぶ 個人の開発環境のTomcatであればチューニングやタイプなど気にする必要もないが、実際の運用に入っているところでもあまり気にかけていないところが多いのではないか? -client向けJVM -clientオプションを指定する。立ち上がりは早い。しょっちゅう再起動する用途向け -server向けJVM -serverオプションを指定する。立ち上がりは遅いが長く使っているとよく使うクラスにおいてはパフォーマンスがよくなってくるらしい。あまり再起動しない用途向け。Tomcat6.0で試したら立ち上がりまでclientVMの3倍程度時間がかかっていた。 -GC状況の表示 ファイルを指定することもできるが、何も指定しないとコンソールに出力。 -verbose:gc ファイル名を指定するには下記オプション追加 -Xloggc:c:/gc.log -クラスのロード状況やどのjarファイルからロードされるかを詳細表示 -verbose:class -ヒープサイズの指定(Xがつく拡張オプションなのでJDKが違ったら使えない可能性もある) -Xms64m 最小ヒープサイズ -Xmx256m 最大ヒープサイズ -パーマネント領域の設定 -XX:MaxPermSize=256m **OutOfMemory [#j42234d1] -java.lang.OutOfMemoryError: unable to create new native thread ユーザー作成のプロセス(thread)が多すぎるときに発生するらしい。 *デコンパイラ(逆コンパイラ) [#h915dc0b] 最新版のソースがなく確実に実行環境で動いているものでソースを確かめたい場合に重宝する。Jadが一番手軽で使いやすい。インストールは解凍して、jad.exe(Windows)を実行するだけ。 *jar [#m8cb6052] -全部を解凍 jar xvf xxx.jar -一部取り出し(相対パスで指定する) jar xvf xxx.jar META-INF/hogehoge.txt *Java8 [#n221132a] -関数型インターフェース(一個だけ抽象メソッドを持つインターフェース) **関数型インターフェースの種類 [#o871c048] Supplier以外はstreamの中で使えそうだ。 |種類|オーバーライドメソッド|備考| |Supplier|get|引数を取らず値を返す| |Function|apply|引数をとって値を返す。mapなど| |Consumer|accept|戻り値を返さない。foreachなど| |Predicate||Booleanを返す。filterなど| **lambda [#g3010b2e] -特定のEnum要素を抽出 Stream.of(XXXEnum.values()).filter(p -> p.getCode() <= max.getCode()).collect(Collectors.toSet()); -List<Object> to Map Map<String, String> synonymMap = synonymList.stream().collect( Collectors.toMap(Synonym::getKana, Synonym::getConvertedKana)); *bean validation [#y556ef78] *記事一覧 [#f3002e16] #ls2(Java) #counter