タグ

javaに関するnaglfarのブックマーク (26)

  • OptionalがSerializableではない話と使い方まとめ - きしだのHatena

    Optionalは意図的にSerializableではなくなってますね。 でその意図としては、一旦Serializableにして出力形式を決めてしまうと、今後ずっとその出力形式を維持しないといけないことになるので、そのメンテナンスコストを嫌ったというのがあるようです。 このメンテナンスコストの中には、仕様が変えれなくなる、というコストも含みます。 なので、シリアライズしたい場合には、フィールドはnullを持つようにして、getterでOptionalに変換するということになると思います。 基的にOptionalは、Optional-returnイディオムをサポートするもの以上ではない、ということをBrian goetzさんも書いています。 Shouldn't Optional be Serializable? そこで、Optionalの使い方としては、基的にメソッドの戻り値としてだけ、

    OptionalがSerializableではない話と使い方まとめ - きしだのHatena
    naglfar
    naglfar 2020/06/16
    知らなかった。フィールドはともかく引数にも使えないのはつらい。
  • TOMCAT殺害事件 - Qiita

    OOMKillerの殺意 顧客EC2のTomcatがアクセスの無い早朝にもかかわらずOOMKillerに突然殺されてしまったので、調査した顛末をたぶん同じような問題に直面されている方もおられるかと思いますので備忘録として記載します。 Javaヒープのチューニングにも多少役立つかと思います。 (この記事はJava8が対象となります。) OOMKillerとはOut of Memory時に、サーバ全体を守るためにメモリーを消費しているプロセスを停止するLinuxの標準機能です。 そのOOMKillerになんとTomcatが突然殺害されてしまいました。 問答無用の辻斬り状態です。 早朝ですのでアクセスログには何も記録されておらず、catalina.outには OpenJDK 64-Bit Server VM warning: Setting LargePageSizeInBytes has no

    TOMCAT殺害事件 - Qiita
    naglfar
    naglfar 2020/01/10
    辻斬りだの巌流島の決闘だの、表現が素晴らしいうえ学びも多い。よき。
  • 標準出力もプログラムの動作を致命的に変えるという話 - Qiita

    正常に動作しないスクリプトやプログラムに標準出力処理(echoやSystem.out.print()など)を追加して、デバッグした経験は誰にでもあるのではないでしょうか。標準出力処理の追加は、簡単なプログラムの動作検証から制限などによりデバッガーを使用できない環境での調査まで、いろいろな場面で活用されていると思います。 しかし、1行の標準出力処理の追加でもプログラムの動作を致命的に変える可能性はあります。 過去に、echoが原因でバッチが停止した問題の対策のために、JavaのプログラムにSystem.out.println(・・・);の1行を追加した結果、アプリケーションが応答を返せなくなったことがありました。その時の記憶を、サンプルプログラムを交えながら説明したいと思います。 年次バッチが停止した! 10年ほど前のある日、あるシステムの保守を担当していた私のもとに「年次バッチが停止してし

    標準出力もプログラムの動作を致命的に変えるという話 - Qiita
    naglfar
    naglfar 2019/04/03
    外部プロセスを呼んだときは、いらなくても標準出力を処理するのって定番だよね。
  • JREが単体で配布されなくなった理由

    2018 年 9 月、 Java 11 がリリースされました。Java 10 までは開発用の JDK と実行環境の JRE、 2 つのパッケージが提供されていたのですが、 Java 11 から JDK のみとなり Java 実行環境 (JRE) は単体配布されなくなりました。 オラクルが配布している Oracle JDK、 Oracle OpenJDK だけでなく、 ほかの OpenJDK ビルド Zulu OpenJDK でも JRE は配布されていません。 2019-04-26 訂正AdoptOpenJDK では JRE も配布していました。どうして、 JRE が配布されなくなってしまったのでしょうか? 新たなアプリケーション配布方法の提案オラクルが JDK の新しいリリース ・ モデルおよび提供ライセンスについて発表しています。 前半はリリース ・ サイクルの変更や商用利用の有償化な

    JREが単体で配布されなくなった理由
    naglfar
    naglfar 2019/01/15
    むかしむかーしは JRE のバージョンを上げても動くはず、という思想だった気がしたんだけど、少なくとも今はそうじゃないもんなぁ。
  • マルチプラットフォームで利用可能なOpenJDKのAmazon Correttoが発表されました! | DevelopersIO

    マルチプラットフォーム(ubuntu、RHEL、WindowsMacOS)対応のLTSがついたOpenJDK互換のJavaリリースのアナウンスです! しばらく前に、Amazon LinuxでのJavaのLTSが発表され大きな話題となりました。 Amazon LinuxでのJavaのLTS (Long-Term Support)提供について 「ほぇー、AWSもやりおるやんけ!!」と感慨にふけっていたら、それの100倍ぐらい衝撃的なニュースが、Javaの神様James Goslingのツイートで飛び込んできました。 Just announced #amazon #Corretto at #devoxx. It is our distribution of OpenJDK. https://t.co/09cuPEqnex — James Gosling (@errcraft) 2018年11月

    マルチプラットフォームで利用可能なOpenJDKのAmazon Correttoが発表されました! | DevelopersIO
  • 2019年にJavaを利用している人は全員理解すべきことを説明してみる - orangeitems’s diary

    ※注 当初「2018年にJavaを利用している人は全員理解すべきことを説明してみる」として公開した記事ですが、2019年になっても有用性が変わりませんのでタイトルを改変して公開します。 最新ニュース(2019/4/16) www.orangeitems.com 新元号対応のJava SE Development Kit 8u211から、ライセンスが変わり、無償利用は「開発・個人のみ」に変わっています! >> Javaのこの記事が衝撃的 新野淳一さんのとても分かりやすいJavaの将来についての記事を読みました。 www.publickey1.jp これは、大変なことになります。断定します。 劇的に変更されるJavaのサポートポリシー 世の中にはサーバーサイドがOracle Java SE 8で動いているたくさんのWEBアプリケーションが存在しています。Oracle Java 7が2015年4

    2019年にJavaを利用している人は全員理解すべきことを説明してみる - orangeitems’s diary
    naglfar
    naglfar 2018/07/09
    開発を開始してから java のバージョン上げたプロジェクトやサポートを利用したプロジェクト、経験ない……。
  • TechCrunch

    Rocket Lab is waiting until Neutron is more technically mature before signing launch contracts with customers, CEO Peter Beck told investors on Wednesday. The statements provided an inside look on how

    TechCrunch
    naglfar
    naglfar 2018/03/28
    判決文、開いてはみたけど当然ながら読めなかった。詳細待ち。
  • Java開発のノウハウを全面公開、NTTの深謀遠慮

    「開発人材を増やすため」。NTTは3月13日、Javaアプリケーションフレームワーク「Macchinetta(マキネッタ)」をGitHub上で一般公開した。公開の狙いについて、取り組みのリーダーである夏川勝行ソフトウェアイノベーションセンタソフトウェア開発技術プロジェクトグループリーダ主幹研究員はこう語った。GitHubはクラウド型のソースコード共有サービスで、オープンソースソフトウエア(OSS)の公開でよく使われる。 IT人材の不足は深刻化し、人材の争奪が加熱している。NTTグループは自社のJavaアプリケーションフレームワークをオープンソース化して、他社も利用できるようにする。これを通じて、Macchinettaフレームワークを扱える開発人材のすそ野を広げる。将来的にMacchinettaフレームワークを扱える技術者が増えれば、NTTグループにとって開発人材の獲得が有利になると見込む。

    Java開発のノウハウを全面公開、NTTの深謀遠慮
    naglfar
    naglfar 2018/03/23
    “TERASOLUNAフレームワークとMacchinettaフレームワークは基本的に同じもので、大きな違いはない。NTTデータではMacchinettaフレームワークをTERASOLUNAフレームワークとして提供している”。疑問が解決した。
  • Lombok の Java9以降対応の話 - Qiita

    TL;DR Lombok が Java9 + IntelliJ に対応してなかったので、修正プルリク送って取り込んでもらった(AUTHORSに自分の名前が入った) どういう変更をしたのかを解説(誰得) Lombok は JDK の内部クラスにどっぷり依存しているので、JDKバージョンアップの度に追従が大変。JDKだけじゃなくてIDEの実装にも依存がある。 今後 JDK のライフサイクルが変わるのでさらに大変。追従が遅れる可能性は多分にある。 がっつり Lombok に依存するとそういうリスクがあることを意識しておいたほうがいい。 Lombok について Lombok は Java コードにアノテーションをつけるだけで Setter, Getter を作ってくれるなど、大変便利な開発ツールです。 Lombok は AST(Abstract Syntax Tree;抽象構文木)をコンパイル時に

    Lombok の Java9以降対応の話 - Qiita
    naglfar
    naglfar 2018/03/23
    もう使うの止めようかな……。 IDE が作ってくれる getter/setter で、個人的には困らないし。
  • Javaのジェネリクスは「まがい物」ではない - kmizuの日記

    先日、自分が書いた kmizu.hatenablog.com に対する反応として、「Javaのようなまがい物のジェネリクスと比較するのは適切でない」「Javaのジェネリクスと比較するのは適切でない」(おそらくC#や(C++等(2017/09/24追記))の言語と比較して)といった コメントをいくつか見かけました(はてなブックマークコメントやツイッターなどで)。しかし、ここでは、そのような言説こそが適切でない、ということを言いたいです。なお、methane氏との 対話については既に終わったものなので、それとは関係ありません。 そもそも、Javaジェネリクスは、静的型付き関数型言語で既に一般的であったパラメータ多相をJavaに追加する目的で導入されました(C++テンプレートのようなものをJavaに追加するためだと思っている人がいるかもしれませんが、それは実態にあっていません)。実際、Java

    Javaのジェネリクスは「まがい物」ではない - kmizuの日記
  • 軽い気持ちでLinkedListを使ったら休出する羽目になった話 - Qiita

    ざっくり言うと リスト構造のデータに対してランダムアクセスはしちゃだめだぞ。お兄さんとの約束だ! 発端 数年前に他部署の支援で作ったJavaのシステムに、ちょっとデカめのデータを突っ込んだらありえないほど遅いので助けてくれ、と連絡が入った。 まぁクエリとかインデックスをちょっと見れば直るっしょ・・・と鼻をほじりながら支援に向かった。 処理内容 遅い部分の処理は以下のようなものであった。 処理対象のデータをListで受け取る。 それをforループで1件ずつ前処理する。 処理結果をオブジェクトに格納し、ORマッパーでDBにINSERTする。 これだけ? そう、これだけだ。並列処理なんて高級なことはもちろんやってない。 インフラ調査 処理中のサーバのようすを調査する。今回のインフラは典型的な3層3サーバ構成。 WEBサーバはなにもかもが余裕。 APサーバではCPUを1つ使い切っている。 14コア

    軽い気持ちでLinkedListを使ったら休出する羽目になった話 - Qiita
    naglfar
    naglfar 2018/02/19
    そもそも何故 LinkedList をわざわざ使ったんだろう……と思ったが、 O/R マッパーが戻すリストの実装が何かなんて考えてなかったコトに気づいた。
  • 来月にはJava 10が登場し、9月にはJava 11が登場予定。新しいリリースモデルを採用した今後のJava、入手方法やサポート期間はこう変わる(OpenJDKに関する追記あり)

    来月にはJava 10が登場し、9月にはJava 11が登場予定。新しいリリースモデルを採用した今後のJava、入手方法やサポート期間はこう変わる(OpenJDKに関する追記あり) 2017年9月に「Java 9」が登場したばかりですが、いまから1カ月後の2018年3月には早くもJavaの新バージョン「Java 10」がリリースされます。そしてその6カ月後の9月にはさらに次の「Java 11」がリリース予定です。 Java 9以後のJavaは、毎年3月と9月の年2回メジャーバージョンアップを行う、タイムベースのリリースモデルを採用することになりました。今年はその最初の年となります。 オラクルによるJDKの提供方法やサポートポリシーも、これから大きく変更されることが明らかになっています。一般公開され無償でダウンロードできたOracle JDKの公開はJava 10が最後となり、サポートは3年

    来月にはJava 10が登場し、9月にはJava 11が登場予定。新しいリリースモデルを採用した今後のJava、入手方法やサポート期間はこう変わる(OpenJDKに関する追記あり)
    naglfar
    naglfar 2018/02/08
    わたし個人の経験では、むしろきちんとサポート契約を結ぶような環境はまれだったので…… OpenJDK を使うだけなのではって思う。サポート契約を結んで仕事してる環境もあるんだ、いいねいいよねそうだよね!
  • 若手Javaエンジニア必見。知っておきたいフレームワーク・ツール23選 - エンジニアHub|若手Webエンジニアのキャリアを考える!

    若手Javaエンジニア必見。知っておきたいフレームワーク・ツール23選 システム開発において、登場頻度が非常に高いJava。数多くのフレームワークやツールが存在しますが、一体どれを選べば、効率的な開発が行えるのでしょうか。おすすめのものを一挙にご紹介します! システム開発をする際、欠かせない存在なのが各種フレームワークやツールです。これらを導入することで、工数の削減やアプリの品質向上、セキュリティの堅牢化など数多くの利点があります。中でもJavaのフレームワーク・ツールは、Javaを開発に使用している企業の多さゆえ、利用される頻度も高いものです。 しかし、それらは数えきれないほどの種類があるため、知識の少ない若手のうちは「どれを選べばいいんだ……」と途方に暮れてしまうケースも少なくありません。 そんな悩みを解決するため、今回はよく使われるものから珍しい機能のもの、最近注目されているものまで

    若手Javaエンジニア必見。知っておきたいフレームワーク・ツール23選 - エンジニアHub|若手Webエンジニアのキャリアを考える!
    naglfar
    naglfar 2018/01/09
    タイトルは「知っておきたい」なのに、本文は「絶対に知っておくべき」。タイトルが正解だろう。あと、 Struts2 や Seaser2 は新たに利用するのではなく既存のシステムや脆弱性の学習としてなら、まぁ。
  • Java9 でも String クラスがリファクタリングされていました (JEP 254: Compact Strings 編) - 地平線に行く

    日、ついに JavaSE 9 がリリースされました! そこで、かねてから噂になっていた JEP 254: Compact Strings がどのように実装されているのか調べてみました。 Compact Strings の概要 これまで String クラスや StringBuilder クラスなどの内部では、文字列を UTF-16 でエンコードして char 配列で保持していました。 つまり、一文字あたり*1常に char ひとつ = 2バイト分のメモリを使っていました。 しかし、これだと 1 バイトで表せる LATIN1(ASCII コード + ラテン文字)の文字列の場合、その半分が 0x00 になるという無駄がありました。 そこで、内部表現を変更し、文字列が LATIN1 のみで構成されるときは 1 文字を 1 バイトで保持するようにリファクタリングされました。 ちなみに、LATIN

    Java9 でも String クラスがリファクタリングされていました (JEP 254: Compact Strings 編) - 地平線に行く
  • ヌーラボのアカウント基盤を Java 9 にマイグレーションして起きた問題と解決法 | 株式会社ヌーラボ(Nulab inc.)

    Java 9の起動パラメータ java.locale.providers に Java 8 と同じ優先度で国際化を行う指定をします。 java -Djava.locale.providers=COMPAT,SPI この設定で日付のフォーマットが Java 8 と同じように動作するようになり、自動テストが成功しました。 以上で 750 個のテストがすべて成功するようになりました。次はいよいよJava 9で既存のソースコードをコンパイルします。 Java 9でコンパイルして Java 9で動かす ヌーラボのアカウント基盤には Java のコンパイル対象が約 1,360 ファイルあります。目標は 1,360 のソースコードがJava 9 ですべてコンパイルできることです。 コンパイラの設定を Java 9に切り替える コンパイラを Java 9に切り替えます。Java 9のバージョン指定には注意

    ヌーラボのアカウント基盤を Java 9 にマイグレーションして起きた問題と解決法 | 株式会社ヌーラボ(Nulab inc.)
  • java.lang.OutOfMemoryError #渋谷java

    9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...NTT DATA Technology & Innovation

    java.lang.OutOfMemoryError #渋谷java
  • 例えば、Strutsを避ける

    はじめに 筆者は10年以上ウェブアプリケーション開発を主な業務とするJavaプログラマであったにも関わらず、Strutsについてはこれまでずっとわず嫌いでした。初期のStrutsは「XMLだらけで効率が悪そう」というイメージが強かったためです。最近はRuby on Rails等の影響を受けCoC(convention over configuration)を採り入れ、XML地獄もだいぶ解消したようです。 StrutsはJavaアプリケーションらしくない種類(任意のコード実行等)の脆弱性を連発することでも知られており、最近は我々の提供するSaaS型WAFサービス、Scutum(スキュータム)のお客様からも頻繁にStrutsについての問い合わせを受けるようになりました。また、去年見つかった任意のコード実行の脆弱性では、脆弱性の公表後すぐにPoCが出回り実際に攻撃が発生するなど、悪い意味で注目

    例えば、Strutsを避ける
    naglfar
    naglfar 2014/04/25
    Struts2 なんて一度も使ったコトない……。1なら流石にある。最近は Spring だなあ。
  • Java8時代の文字列連結変態さんまとめ - きしだのHatena

    いろいろな文字列連結のコードを書いた人がいたのでまとめておきますね。 主に変態さん。 とりあえず、基準として、メモリ確保したStringBuilder版 public static String stringBuilderJoinMem(){ StringBuilder s = new StringBuilder(9100).append("["); for(int i = 0; i < strarray.length; ++i){ if(i != 0){ s.append("],["); } s.append(strarray[i]); } s.append("]"); return s.toString(); } 1037ms ということで、まずはbackpaper0さん。比較的常人のコード。 https://gist.github.com/backpaper0/10273558 pu

    Java8時代の文字列連結変態さんまとめ - きしだのHatena
    naglfar
    naglfar 2014/04/14
    これが要求されるほどのプロジェクトに関わったコトはないし、これからも関わりたくないけど、こういうのは好きだ。
  • List<T>よりArrayList<T>のほうが速いって本当? - Islands in the byte stream

    結論:どちらも同じなので意味的に適切だと思う方を使ってよい 発端は以下のツイートだ。 たしかに、公式ドキュメントには以下のように書いてある。 On devices without a JIT, it is true that invoking methods via a variable with an exact type rather than an interface is slightly more efficient. (So, for example, it was cheaper to invoke methods on a HashMap map than a Map map, even though in both cases the map was a HashMap.) It was not the case that this was 2x slower; the

    List<T>よりArrayList<T>のほうが速いって本当? - Islands in the byte stream
    naglfar
    naglfar 2014/03/28
    もしパフォーマンスに歴然とした差があったとしても、今ってソレの違いで問題となるほどの環境を探す方が難しくないか……。そこまでのチューニングが必要となったらそもそも別な部分を見直すべきだろう。
  • 正規表現によるバリデーションでは ^ と $ ではなく \A と \z を使おう

    正規表現によるバリデーション等で、完全一致を示す目的で ^ と $ を用いる方法が一般的ですが、正しくは \A と \z を用いる必要があります。Rubyの場合 ^ と $ を使って完全一致のバリデーションを行うと脆弱性が入りやすいワナとなります。PerlPHPの場合は、Ruby程ではありませんが不具合が生じるので \A と \z を使うようにしましょう。 はじめに 大垣さんのブログエントリ「PHPer向け、Ruby/Railsの落とし穴」には、Rubyの落とし穴として、完全一致検索の指定として、正規表現の ^ と $ を指定する例が、Ruby on Rails Security Guideからの引用として紹介されています。以下の正規表現は、XSS対策として、httpスキームあるいはhttpsスキームのURLのみを許可する正規表現のつもりです。 /^https?:\/\/[^\n]+$/

    naglfar
    naglfar 2014/03/28
    javase 8 を見に行ったら ^:The beginning of a line, $:The end of a line, \A:The beginning of the input, \z:The end of the input だった。