タグ

javaに関するt10471のブックマーク (65)

  • タイムゾーン呪いの書 - Qiita

    コメント欄で「Software Design 誌 (2018/12) に寄稿した内容や修正などをこちらの記事にも適用したい」と言ったあと、やるやる詐欺でずっと放置していましたが、三年近く経ってようやく 2021年 7月に大幅に改訂し、同時に Zenn に引っ越すことにしました。 タイムゾーン呪いの書 (知識編) タイムゾーン呪いの書 (実装編) タイムゾーン呪いの書 (Java 編) なにやら長くなりすぎたので三部構成になっています。 この Qiita 版は、しばらく (最低一年は) 改訂前のまま残しておきます。 タイムゾーンの存在はほぼ全ての人が知っていると思います。ソフトウェア・エンジニアなら多くの方が、自分の得意な言語で、タイムゾーンが関わるなにかしらのコードを書いたことがあるでしょう。ですが、日に住んで日仕事をしていると国内時差もなく1 夏時間もない2 日標準時 (Japa

    タイムゾーン呪いの書 - Qiita
    t10471
    t10471 2018/02/07
  • OutOfMemoryError の調べ方 - Qiita

    OutOfMemoryError (以下 OOME)が起こったときにお手上げ状態にならないためにも、 Java のメモリ管理の仕組みとか、 OOME が起こったときの調査方法とかを調べる。 環境 OS Windows 7 > java -version java version "1.8.0_74" Java(TM) SE Runtime Environment (build 1.8.0_74-b02) Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode) Java 8 で、 Oracle の JVM を前提とした話です。 Java のメモリ管理 これを知っておかないと、 OOME が起こっても、メモリ内で何が起こっていて、どこを調査すべきで、どのように対処したらいいのかが判断できない。 なので、まずは、そもそも J

    OutOfMemoryError の調べ方 - Qiita
    t10471
    t10471 2016/03/14
  • 2014-05-04

    Fork/Joinとは? JavaSE7でサポートされるjava.util.concurrent.ForkJoinPoolは、ExecutorServiceの一員であり、一見するとThreadPoolExecutorに似たようなものに思えるが、実際は全く別の、異質のものである。 ForkJoinPoolは、ありていに言えばWork-stealingアルゴリズムの実装であり、無数のタスクを無駄なく論理CPU分のスレッドに割り当てるものである。 ForkJoinPoolはデフォルトでは論理CPU数分のスレッドプールをもつように構築される。 そして、あるタスクが完了するか、もしくは待ちになったら、すぐに別のタスクがアクティブとなり、常に、論理CPU数分のスレッドだけがアクティブになるように調整される。 また、ForkJoinPoolに入れたForkJoinTaskは、そのタスクの中で新たなタスク

    2014-05-04
    t10471
    t10471 2016/03/13
  • Web Application Server を動かす時の Java8 起動オプションのメモ - その手の平は尻もつかめるさ

    一般的な Web Application Server *1 を Java8 で動かすにあたって,最近有効にしている起動オプションについてメモ. 何か間違っていたり,あるいは「こっちの方が良い」みたいなのがあれば教えて下さい. -server server mode で起動させる (指定しないと client mode になる可能性がある,マシンスペックによってスイッチする?). -Djava.net.preferIPv4Stack=true If IPv6 is available on the operating system the underlying native socket will be an IPv6 socket. This allows Java(tm) applications to connect too, and accept connections from,

    Web Application Server を動かす時の Java8 起動オプションのメモ - その手の平は尻もつかめるさ
    t10471
    t10471 2016/03/11
  • Javaのマルチスレッドプログラミングで気をつけておくこと - 自分の仕事を憎むには人生は余りにも短い

    マルチスレッドについていろいろ考えてる機会が多かったのでちょっとまとめてみた。 Singletonのdouble-checked lockingはアンチパターンだという話 double-checked lockingとSingletonパターン ネットでも各所に書かれているけれど、メジャーな書き方なのでみんないつの間にか使ってしまっていることが多い。*1被害に会う可能性が非常に低いので対策はほぼ必要ないけど知っておいて損はない。 double-checked lockingとはどんなソースかというと public static Singleton getInstance(){ if (instance == null){ synchronized(Singleton.class) { //1 if (instance == null) //2 instance = new Singleto

    Javaのマルチスレッドプログラミングで気をつけておくこと - 自分の仕事を憎むには人生は余りにも短い
    t10471
    t10471 2016/03/09
  • Concurrency Utilitiesの「再」まとめ - Java8対応版 - argius note

    以前、このような記事を書きました。 Concurrency Utilitiesを使った並列処理・マルチスレッドのおさらい (2013-12-26) 前回の内容は、Concurrency UtilitiesだけでなくJavaのマルチスレッドの話も一部含んでいましたが、今回は、Concurrency Utilitiesだけにフォーカスして、全体が分かるように整理してまとめ直しました。 目次 概要 準備 タスク・フレームワーク (Executor) 同期キュー シンクロナイザー 並行処理コレクション 時間単位 アトミック値型とアトミック操作 ロック・フレームワーク 概要 今回は、Concurrency UtilitiesのAPIをいくつかのグループに分類し、それぞれのグループの主要な機能を「広く浅く」紹介する、という形式でまとめています。 パッケージ単位で分け、それからjava.util.con

    Concurrency Utilitiesの「再」まとめ - Java8対応版 - argius note
    t10471
    t10471 2015/06/08
  • ふわっと JVM のヒープ領域監視について考える - ようへいの日々精進XP

    ども、かっぱです。 はじめに Java アプリケーションを運用する上では避けて通れないであろうヒープ領域の監視についてフワッと考えてみた JVM には幾つか領域があるがヒープ領域に焦点を当てる 参考 http://www.whitemark.co.jp/tec/java/javaHeap.html http://www.whitemark.co.jp/tec/java/javagc.html http://d.hatena.ne.jp/ogin_s57/20120623/1340463194 http://d.hatena.ne.jp/ogin_s57/20120709/1341836704 https://docs.oracle.com/javase/jp/1.5.0/guide/management/agent.html http://chonaso.hatenablog.com/en

    ふわっと JVM のヒープ領域監視について考える - ようへいの日々精進XP
    t10471
    t10471 2015/03/29
  • 恐怖の JVM 大量メモリ消費!メモリリークの謎を追え!! - Cybozu Inside Out | サイボウズエンジニアのブログ

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

    恐怖の JVM 大量メモリ消費!メモリリークの謎を追え!! - Cybozu Inside Out | サイボウズエンジニアのブログ
    t10471
    t10471 2015/02/03
  • よくわかる Apache Thrift J to R | Recruit Tech Blog

    はじめに この記事は、サーバサイドエンジニアの平凡な日常で得た Apache Thrift の基的な使い方を淡々と説明するものです。 過度な期待はしないでください。 それと、Swift1)アップルのiOSおよびOS Xのためのプログラミング言語と勘違いしてこのページを開いてしまった方にはすみません。 みさなまどうも。サーバサイドのエンジニアぶらいじぇんです。 エンジニアの皆様におかれましては、普段いかがおプログラミングでしょうか? さて、諸姉兄におきましてはサービスリリース浅く監視・運用厳しき折、既存のサービスとの連携とは名ばかりで無茶な実装せざるを得ないなんてこともままあるのではないでしょうか? 私に至っては、『このサービスの連携がこんなに難しいはずがない』とか『僕には解決策が少ない』とか感じてしまう今日此頃です。2)超訳すると、RoRのサービスでJavaAPIを叩きたかったときにT

    よくわかる Apache Thrift J to R | Recruit Tech Blog
  • Java 8 Date and Time API の実践的なチートシートできたよ~ - tokuhirom's blog

    Java8 を使いこなそうとすると、やはり Date and Time API も使いこなす必要がでてくる。 我々 Perl 畑出身の人間からすると、Perl の世界では DateTime/Time::Piece というモジュールが一般的に日付の計算に使われており、iandeth.さんのブログエントリがチートシートとしてよく知られている。このいつも見慣れたエントリの体裁で、一般的な日時の操作を実用的に教えてくれるエントリが欲しくて書いた。 junit のテストケースとして書いてあるので、適当にコピペして QuickJUnit で動作確認するとよい(assertはしてないけど)。 なにかあれば教えていただけるとありがたいです。

  • LombokとLombok-pg: Javaコードを減量する魔法のスパイス

    この記事はJavaアドベントカレンダー2014の12月24日分です。昨日は、 nagaseyasuhito さんによる Mavenでマスター/スレーブ構成のMySQLを起動して結合テストをするぞ という記事でした。Mavenでこんなことまでできるんだなぁということが分かる実践的なコードで、参考にしたいです! 明日は、いよいよアドベントカレンダー最終日、担当は kokuzawa さんになります。 コードをシンプルにできるラムダ式への注目 さて今年の日Javaアドベントカレンダーは、4月にJava 8がリリースされたこともあって、Java 8に関連した記事が多かったようです。その中でも、特にラムダ式への注目が際立ちました。 ラムダ式の最たる活用例 Stream APIについては、12月17日のcom4dcさんがデータ処理がどう簡潔に書けるかをコード例で示されています。また12月20日のRy

    LombokとLombok-pg: Javaコードを減量する魔法のスパイス
    t10471
    t10471 2015/01/03
  • Javaのクラスファイルをjavapとバイナリエディタで読む | DevelopersIO

    はじめに こんにちは、虎塚です。 この記事はJava Advent Calendar 2014 の22日目の記事です。昨日はすふぃあ (@empressia) さんの「JavaEEなWebアプリケーションを作ろうとしたときのお話: すふぃあの記憶」でした。 この記事では、「Javaクラスファイルの読み方・増補版」と題しまして、12月20日(土)に開催したJavaクラスファイル入門という勉強会でお話しした内容の補足をお届けします。なお、勉強会のターゲットは、 Javaプログラムは書いたことがあるけど、JVMのことは全然知らない Javaクラスファイルのバイナリを見たことがない といった初心者の方や新人さんでした。なので、Javaに興味さえあれば、どなたでもお読みいただける内容かと思います。 JVM仕様とは JavaとJVM Javaプログラム(.java)をコンパイルすると、中間コードと呼ば

    Javaのクラスファイルをjavapとバイナリエディタで読む | DevelopersIO
    t10471
    t10471 2015/01/03
  • 最強のJVMチューニング・ツール: GCログを可視化するGCViewerとリモート接続でプロファイリング可能なVisualVM

    まずは倍率を1000倍から5000倍に上げます。 Data Panelも一旦非表示にします。 さて、これを見ると、使用済みヒープと使用済みNew領域は比例しつつ一定の間隔で上下しています。 ここからは特異点は見えないので、一旦非表示にします。 イニシャル・マークレベル(黄色の線)も一定で、分析対象としづらいので非表示にします。 すっきりして少し見やすくなりました。 ここから、 最も時間がかかっているのはイニシャル・マーク イニシャル・マークは1分間に2回程度発生している ということが読み取れます。 イニシャル・マーク では、そもそも、コンカレントGCにおけるイニシャル・マークとは何なのでしょうか。 OracleのドキュメントのReviewing GC with the CMSによると、New領域から参照されているオブジェクトをマークするのだと。 Stop the Worldを伴い、マイナー

    t10471
    t10471 2015/01/03
  • 知らないなんてもったいない! 障害発生の原因を洗い出すOSSのJavaVM解析支援ツール「HeapStats」を使ってみよう

    避けるべき状況ですが、残念なことにこのようなことは珍しくありません。解析に必要な情報を漏らさず取得するためには、サービス開始前に入念な準備が必要ですが、現実にはそこまで時間をかけられない場合もあり、往々にして準備不足となる場合があるからです。 こういった不幸な状況を防ぐ手段の1つとして、稿では「HeapStats」というツールを利用した障害解析方法を紹介します。 HeapStatsとは 「HeapStats」は、NTT OSSセンタが開発を行い2013年にOSS(オープンソースソフトウェア)として公開したJavaVM障害解析支援ツールです。 Javaアプリケーションにおけるメモリ不足(OutOfMemoryError)やデッドロックといった障害を素早く解決することを目的として開発されました。特に、Javaヒープメモリ内の状態など、従来は高い負荷をかけて取得する必要があった情報を、低オーバ

    知らないなんてもったいない! 障害発生の原因を洗い出すOSSのJavaVM解析支援ツール「HeapStats」を使ってみよう
  • Javaのスレッドダンプの読み方 - ablog

    あなたとスレッドダンプ - スレッドダンプ入門 - この国では犬が が非常にわかりやすく、自分でブログエントリを書く必要はないが、Oracle DatabaseLinux の性能分析に携わる者の観点から Java のスレッドダンプについて整理してみた。具体的なスレッドダンプの分析方法はサポートエンジニアが語るWebLogic Serverトラブルシュートのノウハウがとてもわかりやすい。 WebLogic のスレッドダンプの見方については id:yamadamn さんの スレッドダンプから見るWebLogic Serverの世界 #javaee - yamadamnのはてな日記 がわかりやすい。 スレッドダンプとは Javaのスレッドのスナップショット。 取得した瞬間のJava仮想マシン(JVM)内に存在するスレッド(ID、名前、状態、タイプなど)とコールスタックを見ることができる。

    Javaのスレッドダンプの読み方 - ablog
    t10471
    t10471 2015/01/03
  • Javaのシステムスレッドについて調べてみた (Java8) - argius note

    システムスレッドについて、あまり知らなかったので、調べてみました。 それ以外にも、APIで生成されるスレッドや、スレッドグループについても、少し触れています。 ※GrepCodeは2018年5月頃からサービスが利用できなくなっています。記事中のリンクはGrepCodeのものがそこそこ多いので、ご注意ください。 参考リンク HotSpot Runtime Overview - OpenJDK JVM Internals (JamesDBloom - Blog) Java SE 8 API仕様 GC: openjdk-8-b132.jar - GrepCode Java Project Source Mirror of OpenJDK repositories - GitHub 目次 はじめに 実行環境 システムスレッドの名称と簡単な説明 APIを使用したときのスレッド おわりに はじめに シ

    Javaのシステムスレッドについて調べてみた (Java8) - argius note
    t10471
    t10471 2015/01/03
  • JPAでマスター/スレーブ構成のMySQLを使うぞ | nagaseyasuhito Daily works.

    この記事はJava EE Advent Calendarの18日目のエントリです。昨日はn_agetsuさんのApache Shiro を使ってみましたでした。 Webサービスやソーシャルゲームのボトルネックになりやすいのがデータベースアクセスです。そしてこれらのサービスではデータベースにMySQLが多く使われています。 高負荷なMySQLの負荷分散の一つにデータベースをマスター/スレーブのレプリケーション構成にしてINSERT/UPDATE/DELETEなど更新系のクエリはマスターに対して行い、スレーブにマスターの更新内容をレプリケート、SELECTなど参照系のクエリはスレーブのデータベースにクエリを発行して負荷分散を行う手法があります。 このエントリではそのようなマスター/スレーブのレプリケーション構成のMySQLにJPAを使ってクエリを発行する方法をご紹介します。 MySQLのJDB

    t10471
    t10471 2014/12/18
  • スレッドダンプから見るWebLogic Serverの世界 #javaee - yamadamn’s blog

    この記事はJava EE Advent Calendarの7日目です。 前回のブログ記事を振り返ると、もう一年前。Advent Calendarでしか書いてない訳です。 それであれば、さすがにネタがあるかなと思ったのですが、何も思い浮かばない… いつものWebLogic Server(以降、基的にWLSと略)ネタでお許しください。 Javaアプリケーションサーバーの特徴的なところは、スレッド管理にあると私は思っています。 そして、ここがチューニング観点としても非常に重要なところです。 そのため、各アプリケーションサーバーの実装によって、工夫を凝らしているところです。 この記事では、スレッドダンプからWLSの世界を垣間見てみましょう。 WLSスレッド管理概要 といっても、いきなりスレッドダンプを見ても迷子になるので、まずはWLSのスレッド管理概要を知っておきましょう。 既に多くの分かりやす

    スレッドダンプから見るWebLogic Serverの世界 #javaee - yamadamn’s blog
    t10471
    t10471 2014/12/10
  • Java Advent Calendar 2014 リソースごとに同時アクセス数の制限を行う - 水まんじゅう2

    これはJava Advent Calendar 2014の6日目の記事です。 昨日はbiblichorさんの「Jersey2×SpringSecurityのハマりポイント三選」でした。 Webシステム等、多数の処理を同時に行う場合、処理に使用するリソース毎に同時に処理ができる上限値を決めたくなることがあります。 たとえば、某拝承系SIerが開発しているCosminexusではURL毎に同時アクセスの最大数を設定でき、同時アクセス数を超えた場合はキューに溜めるという機能が存在します。 http://itdoc.hitachi.co.jp/manuals/link/cosmi_v0870/APSE/EU030187.HTM このようなエンタープライズなアプリケーション・サーバーを使わなくてもJavaではjava.util.concurrent.Semaphoreを使用することで、単純なアクセス

    Java Advent Calendar 2014 リソースごとに同時アクセス数の制限を行う - 水まんじゅう2
    t10471
    t10471 2014/12/09
  • CMS GC おさらい - unnamed

    この記事は Java Advent Calendar 2014 の一日目の記事です。 先日の JJUG CCC 2014 Fall で CMS GC について話してきました。 結構遅めの時間帯にも関わらず、200人規模の部屋がいっぱいに埋まるぐらいの盛況振りで、みなさんGCにお困りなんだなあと実感しました。スライドは以下に公開しています。CMS GC の挙動から GC ログの読み方、どういうケースが厄介なのかを紹介しているので是非ご覧ください! Concurrent Mark-Sweep Garbage Collection #jjug_ccc from Yuji Kubota 嬉しいことにセッションの反応は良かったのですが、「遅めの時間帯で頭も疲れてるとガチ話辛い」という声もあったので、今回は CMS GC について比較的重要な点についてだけ簡単におさらいしたいと思います。 オプションに

    CMS GC おさらい - unnamed
    t10471
    t10471 2014/12/03