タグ

Javaに関するDryadのブックマーク (169)

  • JVMはそんなに重くない | POSTD

    Clojureに反対する大きな理由がJVMです。この役立たずは重いですからね。 これは、数週間前に ZA TechSlackで見た投稿です。休暇中にClojureの話題を何件か見たのですが、投稿者はJVMについても繰り返し言及していました。 私はこの投稿について Slack上で少しつぶやいていました が、もっと広く理解され議論されるように、稿を書くことを決めました。 背景 以前は、私もJVMは重いと思っていました。2000年代の初めにJVMとPHPと比べていた頃の話です。当時は、.NETやColdFusionなど、別の重い製品が他にもありました。また、PerlPythonという軽めの製品もありましたが、私はWindowsを使っていたのでActivePerlやActivePythonはやはり少し重めでした。 私が初めてJVMに対する“恐れ”を克服したのは、小規模な製品アプリを、JRu

    JVMはそんなに重くない | POSTD
    Dryad
    Dryad 2017/03/06
    Java重いとか言いながらVagrantサイコーとか言ってたみなさん。
  • 1.0から学ぶJava

    タイトルを見て釣られクマーな皆さんこんにちは。 ホッテントリメーカーで作るような煽りタイトルって、みなさんもう見飽きてると思うんですよね。 今調べたらホッテントリメーカー2008年だそうで。どうりでねー。古臭いなーと思いましたよー。 「一から学ぶJava」ってのをね、1.0にするだけでこんなに素敵なタイトルになるんだから面白いですねー。 タイトルを思いついただけだったんですけど、思いついたらやっぱりちゃんと中身も書かないと行けないじゃないですか。やだー 面倒くさいんですけどね。ちょっと1.0から学んでみましょうか。 Java 1.0 1996年1月23日Javaの1.0がリリースされたのは1996年1月23日ですね。発表されたのが1995年5月23日でJavaの誕生日といった場合にどちらを取るかで揉めることがあります。 かれこれ20年前なわけで、当時のパソコンというとハードウェアはCPU

    1.0から学ぶJava
  • nullチェックの煩雑さを解決、Java SE 8で導入されたjava.util.Optionalクラス

    変数に値が代入されているかどうかを調べるためのイディオムとしてnullチェックがあります。 nullチェックがよく使用されるのが、メソッドの返り値や引数です。例えば、条件に合致した要素を探すsearchメソッドを考えてみましょう。ここでは、searchメソッドの返り値の型がResultクラスだとします(リスト1)。 リスト1●nullチェックの例 Result result = search(t -> t.startsWith("a")); if (result == null) { // 結果がなかった場合の処理 } else { // 結果に応じた通常の処理 } もし、条件に合致する要素がなければsearchメソッドはnullを返します。しかし、nullをそのまま扱ってしまうと、NullPointerException例外が発生してしまいます。 そこで、それを防ぐためにif文で変数の値

    Dryad
    Dryad 2016/03/24
    Optional(=Maybeモナド)の目的は「有効な値が入ってないかもしれない」という文脈を明示することだから、煩雑さの軽減とはちょっと違う。あと、各種?記法は文脈の隠蔽を促進するもので、これとは目的が異なる。
  • re:僕にとってMaybe / Nullable / Optional が、どうしてもしっくりこないわけ。 - ぐるぐる~

    元ネタ: 僕にとってMaybe / Nullable / Optional が、どうしてもしっくりこないわけ。 - 亀岡的プログラマ日記 OOPの文脈で見ると、元の記事が言っていることもわからなくはないのですが、対象が広すぎていろいろと不正確になってしまっているので、ちょっとまとめてみます。 元の記事が対象にしているのは、Maybe / Optional / Nullableの3つです。 対応する型を持つ言語を見てみると、下記のようになります。 Maybe(Haskell) Optional(Swift/Java) Nullable(C#) これらは、「値がないこと」を表すもの、という見方では同じですが、それぞれ異なる価値観の元に作られています。 Maybe/OptionalとNullable これらはすべて型パラメータを取ります*1。 しかし、この中でNullableだけは型パラメータに

    re:僕にとってMaybe / Nullable / Optional が、どうしてもしっくりこないわけ。 - ぐるぐる~
  • 僕にとってMaybe / Nullable / Optional が、どうしてもしっくりこないわけ。 - 亀岡的プログラマ日記

    はい、ポエムです。自分が正しかろうとは欠片も考えていません。異論や示唆は歓迎ですが、そう考えろと言っているわけではないので、そこはご容赦を。 前置き終わり。 さて、Nullは50億ドルの過ちだそうですね。 null参照の考案は10億ドル単位の過ち? | スラド デベロッパー そして、それを回避するため、Maybe / Nullable / Optional などの言語機能が生まれ、各言語に埋め込まれています。 それは、大変喜ばしいこと、だと思います。 なんですが、どうもどうも、僕はどうしてもしっくりこないのです。これら全てに対して。Nullと同じように。 Nullは何がダメなんだっけ? Nullがダメな理由、ってなんなんでしょう。よく言われる批判として、以下があるのかなぁと思っています。 ①Nullは型ではない Nullと言っていますが、こいつはNullポインタ、でございます。 からの「何

    僕にとってMaybe / Nullable / Optional が、どうしてもしっくりこないわけ。 - 亀岡的プログラマ日記
    Dryad
    Dryad 2015/11/24
    不変なデータと操作を切り離す、という関数型的な考え方はオブジェクト指向とはアプローチが少し違うからねぇ。ちなみに非オブジェクト指向が直ちに手続き的ということはないと思う。
  • Javaのログ出力: 道具と考え方

    Concepts and tools of logging in Java. Javaにおけるログ出力の考え方と道具について説明. CC Attribution Licenseの元に公開します.Read less

    Javaのログ出力: 道具と考え方
  • Why String Class is made Immutable or Final in Java - 5 Reasons をテキトーに訳した - kagamihogeの日記

    http://java67.blogspot.sg/2014/01/why-string-class-has-made-immutable-or-final-java.html をテキトーに訳した。 Why String Class is made Immutable or Final in Java - 5 Reasons Stringについて聞かれないJavaの採用面接はほとんど無く*1、なぜJavaのStringはイミュータブルなのか?(Why String is Immutable in Java)はその最たるものと言えます。なぜJavaのStringはイミュータブルなのか?(Why String is Immutable in Java)は、言い換えると、なぜJavaのStringクラスはfinalなのか?(Why String class is made final in Ja

    Why String Class is made Immutable or Final in Java - 5 Reasons をテキトーに訳した - kagamihogeの日記
  • Seasar2から卒業しよう - ひがやすを技術ブログ

    人は、新たな環境で経験を積んでいくと、少しずついろんなことが出来るようになり、そのうち、その環境では、何でも自分の思った通りに出来るようになります。 「おら、強ぇ」状態。 これは、素晴らしいことなのですが、一つ問題があります。成長が止まってしまうことです。 人は、知らないことを経験したり、つまずきを乗り越えたときに、成長します。知らないことがほとんどなくなったり、つまずくことがなくなったりすると、成長が止まってしまうのです。 Seasar2.4、S2JDBC、SAStrutsと開発してきて、通常のサーバーサイドJavaは、十分にやりきった感がありました。このままこの場所にいるのは、心地いいんだけど、成長が止まってしまうのが不安でした。 人って不思議なもので、一定の能力でとどまるってことが出来ないんだよね。成長が止まると、能力は落ちていく。 自分はどこか、ドラゴンボールの悟空に似ているところ

    Seasar2から卒業しよう - ひがやすを技術ブログ
    Dryad
    Dryad 2015/09/28
    SeasarCon、正直S2以降のビジネスや技術トレンドの変化に本質的に踏み込んだ発表があまり無くて、結局コミュニティがある地点で進化をやめてしまったのが敗因ではという感想。これは再び前進を促すための総括なんだろう
  • OracleとGoogleの判決文を斜め読む - Qiita

    (7/7追記)僕は斜め読みだったんですが、もっときちんと読んだ上で解釈を書いてくれている方がいます。僕も時間をとって全文を読みたいとは思っていますが、まだ時間がかかりますし、yudaiさんの会社の方が妥当性は高いと思いますので、そちらをご参照ください↓ 朝っぱらから色々衝撃が走った第一四半期の最終日ですが、OracleGoogleの裁判について、どのあたりが問題だったとされるのか気になるので判決文等を読んでみました。 経緯 2010年8月、OracleGoogleを訴える。当初の争点は特許侵害 (publicKey1) 2012年4月、サンフランシスコ連邦地裁の法廷開始 2012年5月、Googleの特許侵害はないとの陪審評決。ただし、フェアユースは意見が別れる。 2012年6月: OracleGoogleJava/Android訴訟、損害賠償金ゼロで合意。今回議論された37件のJ

    OracleとGoogleの判決文を斜め読む - Qiita
    Dryad
    Dryad 2015/07/01
    ううーん…。まぁ、API著作権についてはまだ決着はついてないってことかしらねぇ。
  • Optionalの取り扱いかた - 日々常々

    JavaSE8で追加されたjava.util.Optionalにはnullとの戦いに終止符を打ってもらいたいと思っているんですが、思ってるだけだと何も起こらないので、使い方とか思ったこととかを一通り書いておきます。 Optionalのファクトリメソッド Optionalのインスタンスメソッド 値を取得するもの 値を使用するもの Optionalのまま扱うもの まとめ なお、一通りと言いつつOptionalIntとかはスルーしています。機会と書くことがあればそのうち書くかもしれません。 Optionalについては諸事情(遅筆とか理解不足とか分量とか)によりJavaエンジニア養成読では軽い紹介にとどまっておりましたので、補足としてお読みいただけると幸いです。あと、この辺も参考にどうぞ。 OptionalのJavadoc 一通り触って適当にコメント書いたコード(GitHub/sandbox)

    Optionalの取り扱いかた - 日々常々
    Dryad
    Dryad 2015/05/05
    一番最後のmap/flatMap/filterが本命であって、これを使わないならOptionalを使う意味もあんまりない。flatMapは「文脈の変更」のためのもの。
  • ビッグデータツールチェインのセキュリティはビッグリスク、あるいは、誰もHadoopをスクラッチからビルドする方法を知らない件について

    ビッグデータツールチェインのセキュリティはビッグリスク、あるいは、誰もHadoopをスクラッチからビルドする方法を知らない件について The sad state of sysadmin in the age of containers コンテナー時代のシステム管理者の惨状 システム管理は惨劇に見舞われている。現状は悲惨だ。 筆者は昔気質のシステム管理者に不満はない。システムの稼働を維持し、アップデートし、アップグレードする方法を知っている者達だ。 この憤りは、コンテナーと構築済みVMと、それらがもたらす、「信頼」や「アップグレード」の欠如による悲惨な惨劇に対するものだ。 例えば、Hadoopを見てみろ。誰もHadoopをスクラッチからビルドする方法を知っているようには見えないぞ。依存性とバージョンとビルドツールが悲惨なほどに絡まりあっている。 この手のイケてるツールの中で、古典的なmake

    Dryad
    Dryad 2015/04/28
    たしかにこの辺はねぇ…。
  • [PDF] ゴールドマン・サックスの Javaへの取り組み

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    [PDF] ゴールドマン・サックスの Javaへの取り組み
  • JavaのTimSortがバグってる件について | さにあらず

    Python で実装され、その後 Java にも移植されたソートアルゴリズムである TimSort が盛大にバグっていることが発見されました。 このバグがどのようにして発生するのかについては、以下のドキュメントを精査して下さい。 TimSort fails with ArrayIndexOutOfBoundsException on worst case long arraysOpenJDK’s java.utils.Collection.sort() is broken: The good, the bad and the worst caseどんなことが起こるのか#通常の利用では想定しえない場所でArrayIndexOutOfBoundsExceptionが発生します。 例えば、以下のようなスタックトレースになります。 Exception in thread "main" java.l

    JavaのTimSortがバグってる件について | さにあらず
    Dryad
    Dryad 2015/02/26
    『この件が本当に面白いのはKeYという形式手法をサポートするツールによってバグが発見されたことなのですけども』
  • The Black Magic of (Java) Method Dispatch

    Programming languages like Java provide the facilities for subtyping/polymorphism as one of the ways to construct modular and reusable software. This language choice naturally comes at a price, since there is no hardware support for virtual calls, and therefore runtimes have to emulate this behavior. In many, many cases the performance of method dispatch is not important. Actually, in a vast major

  • 恐怖の JVM 大量メモリ消費!メモリリークの謎を追え!! - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは、ミドルウェア開発チームの青木(@a_o_k_i_n_g)です。将来の夢は川口浩探検隊に入ることです。 先日、弊社のアプリケーションサーバーで大量にメモリを消費するという現象に遭遇しました。アクセス頻度の低いサーバーがメモリを大量消費するという謎深いものでした。 発生当初の状況はこんな感じです。 アプリケーションサーバーでは Jetty が稼働 現象が発生した JVM は 5GB 程度のメモリを消費しており、明らかに通常ではない量のメモリを消費している 複数台のサーバーで発生していたが、全てで発生したわけではない。 また、発生したサーバーはいずれもアクセス頻度が少ないサーバーだった。 ヒープ、パーマネント、スタック ひとまず、JVM でトラブルが発生した時は何はともあれヒープダンプとスレッドダンプを見るに限ります。各種情報の取得をインフラ部隊へ依頼し、得られたヒープを解析すると、

    恐怖の JVM 大量メモリ消費!メモリリークの謎を追え!! - Cybozu Inside Out | サイボウズエンジニアのブログ
  • Log4j 2にも採用されたLMAX Disruptorはなぜ狂ったように速いのか?

    LMAXという会社はおそらくFX業者で、筆者はLMAXの開発者の講演を、InfoQの動画で何度か見たことがあった。 彼らは非常に特異な集団で、さしずめ「Javaのスピード狂」という感じだ。 印象的なのは、シングルスレッドで仕事を片付けることを強調している点だ。 「Javaならマルチスレッドで並列処理すれば性能が出ると広く思われているが、我々の仕事においてはシングルスレッドが最速だ」というような主張を何度も見た。 ゴールドマンサックスといいLMAXといい、やはり多額の金が動く会社でガチでJavaをやっている連中はカリカリにチューニングするため、技術的には非常に面白い。 彼らがコアのライブラリをOSS化してくれるというのは、金融業界を否定的な目で見る筆者からすると複雑だが、悔しいことに参考になる。 LMAX DisruptorはJavaのライブラリだ。Producer/Consumerパターン

    Log4j 2にも採用されたLMAX Disruptorはなぜ狂ったように速いのか?
  • Javaでいかにifやfor文を使わないでコードを書くか考えてみよう : IT速報

    1: 以下、\(^o^)/でVIPがお送りします 2014/12/29(月) 13:23:22.49 ID:aDj/zqBFNIKU.net if文for文使いまくってるのってキモいよな 2: 以下、\(^o^)/でVIPがお送りします 2014/12/29(月) 13:24:15.50 ID:/y8HWckGNIKU.net じゃあ代わりにswitchとwhile使う 3: 以下、\(^o^)/でVIPがお送りします 2014/12/29(月) 13:24:18.06 ID:afkjonbrNIKU.net switch 6: 以下、\(^o^)/でVIPがお送りします 2014/12/29(月) 13:25:46.44 ID:5e4wCC7eNIKU.net 3重switchできたった 4: 以下、\(^o^)/でVIPがお送りします 2014/12/29(月) 13:25:07.80

    Javaでいかにifやfor文を使わないでコードを書くか考えてみよう : IT速報
    Dryad
    Dryad 2015/01/05
    単に宣言的な記法というだけでワンライナーとは違うよね(´・ω・`)
  • Javaのせいではなく使い方の問題だという意見 - ワザノバ | wazanova

    http://www.jamesward.com/2014/12/03/java-doesnt-suck-youre-just-using-it-wrong 1 comment | 0 points | by WazanovaNews ■ comment by Jshiike | 約3時間前 Salesforce.comのJames Wardが、エンタープライズ向けのJava webアプリに長く携わってきた経験からまとめた、「Javaが悪いんじゃなくて、使い方が間違ってる。」というブログのエントリー。 開発環境のセットアップのWikiが10ページもある JDKインストール、SCMレポをクローン/チェックアウト、ビルドを実行/アプリ起動の3ステップであるべき。 一貫してないデプロイ環境 ビルドを、開発 -> ステージング -> 番と進めるにあたりリスクを最小化するために、各環境で変わるの

    Dryad
    Dryad 2014/12/23
    id:nekora 当然、そこのやり方もプロセスを見直すなり自動化するなりすることは前提ですよ。これは意識の高さではなく純粋にビジネスに勝つためのエンジニアリングの話なんですよ。
  • ジェネリック型引数を実行時型情報に残す方法がある - Qiita

    Javaのジェネリックは1.4以前のバイナリ仕様との互換のために、コンパイルの時点で型引数情報が消去され非ジェネリックプログラミングされたかのようなコードに変換されます。この変換を 型消去(イレイジャ) と呼びます。 型消去、通常のプログラミングにもたまに影響を与えます(例えば List.toArray() がなぜか引数として一見不要な E[] 型の配列オブジェクトを要求するなどします)が、何より影響を受けるのがリフレクションごりごりのフレームワークプログラミングやライブラリプログラミングにおいてです。型消去に伴って、実行時型情報からも型引数の部分が抜け落ちてしまいますから(そこだけは残しておいてくれれば良かったのに!)。 具体的にはどんなことになるかというと、たとえばみんな大好きEBean(うそ、僕が大好き)なら、エンティティクラスを指定して対応するDBテーブルからデータを取り出すのに

    ジェネリック型引数を実行時型情報に残す方法がある - Qiita
    Dryad
    Dryad 2014/12/12
    あー、JSON系のライブラリはこうやってるのかー(´・ω・`)
  • 銀の鍵: Tomcatアーカイブ

    そういえばこれは公開していなかった。tomcatを自動起動するinitスクリプト。欲しい?じゃぁ、持って行って頂戴。Redhat用だよ。御代はGoogle AdSenseのワンクリックでいいよ。 #!/bin/sh # # chkconfig: 2345 99 10 # description: Tomcat init script # # 2005-2009 Ryuichi Kurishima # # Source function library. if [ -x /etc/rc.d/init.d/functions ]; then . /etc/rc.d/init.d/functions fi # Path to the tomcat launch script (direct don't use wrapper) export JAVA_HOME=/usr/