あとで調査するためのメモ。近日中に確認予定。 jcmdを実行したらエラーが出た。 環境 ・ openjdk 1.8.0_151 ・ tomcat 8.5.23 ・ tomcat ユーザは /sbin/nologin com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded. ... Google先生に聞いてみると、rootだとエラーが出て、今回の環境では、tomcatユーザでないといけないらしい。 /sbin/nologinのアカウントにスイッチする方法 こちらを参考に、 # su - tomcat --shell=/bin/bash $ jcmd 0 help →OK 普通に、jcm
Apache Commons-IO ライブラリの org.apache.commons.io.input パッケージに参考になりそうなものがありました。 ReversedLinesFileReader: テキストファイルを末尾から読むクラス Tailer : tail のようにファイル監視機能付の末尾出力の仕組み 仕様は、FileReader に似ているので、使い方が直観的です。 ReadFromTail.java: import org.apache.commons.io.input.ReversedLinesFileReader; import java.io.*; public class ReadFromTail { public static void main(String[] args) throws IOException { try (ReversedLinesFileR
お題: 結合テスト中のシステムで、OutOfMemoryErrorが発生しました。UT後ソースコードの変更はしていません。ヒープメモリは足りているようです。原因として何が考えられますか?(筆記解答) 8つの質問で、Java SI業界の現状を知る - レベルエンター山本大のブログ OSのswapが足りないとOutOfMemoryError後に死んだりするみたいですね。 「Out of Memory Errors a list of all of them」の15ページ目致命的なOOMEの例が幾つも載っているけど、それぞれどういう時に出るかを面接で聞かれても答えられないかも……。 今回は折角なので致命的じゃない方の、普通にヒープメモリが足りない場合について実際に発生させてみたい。 java.lang.OutOfMemoryError: Java heap space 普通にヒープメモリが足りな
超久しぶりに小粒なTIPSを. 使いどころも限られますが… javac の出力するメッセージを,英語 英文にしたい時のTIPS. Windowsでは,環境変数LANGを設定してもダメでした.次のようにします: javac -J-Duser.language=en -J の後に続けて JVMへ渡すオプションを書きます. Locale.getDefault()の返り値を指定するuser.language を指定してやれば,javacのメッセージのロケールも変わるという訳です. 一方.コマンドプロンプトで, en/jp 等でコードページを切り替えてもOK …かと思いきや,jdk1.5 からは普通に日本語メッセージを出力してくれやがります. だから↑の方法を使いましょう.
Streamの parallel メソッドを呼ぶとストリームの処理を並列に実行できますが、これは内部的には前回紹介したForkJoinPoolが使われています。ForkJoinPoolは内部でcommon poolと呼ばれる共通プールを持っており、明示的にPoolを指定しない ForkJoinTask#invoke などはこのプールが利用されるようです。 public static void main(String[] args) { IntStream.range(0, 16).parallel() .forEach(i -> System.out.println(Thread.currentThread().getName() + ": " + i)); } 自分のマシン (MacBook Pro 15 inch) ではプールのサイズは7でした。実装を見るとデフォルトでは "コア数-1
はじめに 2月1日開催の Java読書会「The Java Module Sysmem」を読む会(第4回)において、コラム枠にJDK 9で導入されたjavacコマンドのオプション--releaseの記載がありました。 --releaseオプションは、開発(コンパイル)に使用するJDKのバージョンよりも古いJava SEバージョンで実行可能なクラスファイルをコンパイルするために指定します。そして、JDK 8までの-source、-targetおよび-bootclasspathオプションを置き換えるものです。 JDK 8までの指定 開発(コンパイル)に使用するJDKバージョンより古いバージョンのJavaで実行可能なバイトコード(クラスファイル)を生成するために、javacには以前から次のオプションが用意されています。 -source -target コンパイルする際に適用するJava言語仕様の
Java9 も出た昨今でいまさらですが、Stream パイプラインが裏でどのように動いているのかをコードを交えて紹介します。 以下の単純な例を元に、内部処理を追っていきましょう。 Arrays.asList("a", "b", "c") .stream() // (1) Stream の生成 .filter(String::isEmpty) // (2) パイプライン .forEach(System.out::print); // (3) 終端処理 (1) Stream の生成 (2) パイプライン (3) 終端処理 まとめ (1) Stream の生成 最初はストリームを取得する stream() の中身から見ていきます。 stream() は Collection インターフェースのデフォルトメソッドとして以下のように定義されています。 public interface Collect
この記事はJava Advent Calendar 2016の12日目です。 前日は、leak4mk0さんのデータベースを簡単にーJavaSEでもオブジェクト指向データベース(JPA) でした。 次は、tkxlabさんのJavaSEでもオブジェクト指向データベース(JPA)をとなります。 はじめに 「フリーランチの終焉」と言われマルチコアの時代に突入してはや数年。 Webアプリを作る事が多かったのも理由ですが、ほとんどシングルスレッド(サーブレッドとかでマルチスレッドを意識するケースはあるけど)で開発してた私にも、今年は並列プログラミングの波が押し寄せてきました。 そんなわけで今年のアドベントカレンダーは並列プログラミング入門に関してまとめてみます。 Java 8標準の並列API Javaは当初よりマルチスレッドプログラミングを喧伝してただけあって、それなりに並列プログラミングがやりやすい
概要 Javaでスレッドを扱うと言えばJDK1.4まではThreadクラス・Runnableインターフェースだったが、 JDK1.5でExecutorService・Callableインターフェース・Futureが導入された。 ExecutorServiceでは、同時に実行するスレッド数を指定することが出来る。 処理を登録(submit)しても、指定したスレッド数までしか同時に実行されない。 (実行可能なスレッド数に足りない場合、登録したスレッドは実行待ちになる。実行中のスレッドの処理が終わると、待機していたスレッドが実行される) Callableインターフェースは、ExecutorServiceで実行する処理を定義する為のインターフェース。 Runnableインターフェースは戻り値を指定することが出来ないし例外もRuntimeExceptionしかスローできないが、 Callableイン
Android で非同期処理っていうと、真っ先に AsyncTask が出てくるんですが、なるべくなら Java 標準のマルチスレッドAPI である ExecutorService を使った方が良いと思ってます。 (2007年の記事だけど) Java技術最前線 - 「Java SE 6完全攻略」第49回 Concurrency Utilitiesの変更点 その1:ITpro Android で初めて Java を書いたので細かい仕様がよく分からず、勉強がてら動きを確認してみました。 1. 1つのワーカスレッドに実行させる newSingleThreadExecutor でワーカスレッドを一つ持つ Executor を生成して、2つのタスク(=非同期で実行させる処理)を順に実行。 public void singleThreadExecutorBasicTest() throws Excep
仕事でマルチスレッドを扱うようになったので備忘録として Executors 関連のメモを残しておく。 あるタスクを別スレッドで実行したい時、Executors クラスを使えば自前でスレッドの管理をすること無く簡単に並列処理を行えるようになる。 もちろん完全に簡単になったわけではなく、マルチスレッドプログラミングの困難さは健在だが、自前でスレッドの管理をしない分バグを仕込む可能性も減るだろう。 はじめに Executors はタスクと呼ばれる処理の最小単位を別スレッドで実行する仕組みである。マルチスレッドなのでシングルスレッドに比べると複雑性は若干上がるものの、通常のマルチスレッドプログラミングに比べれば少ない複雑性、高い安全性を備える。そして何より、パフォーマンスの向上が期待できる。 この仕組みはジョブキューモデルそのものである。ジョブはタスク、キューは後述する Executor に相当す
目次 基本的な構造 スケールを変える 足し算 引き算 掛け算 割り算 基本的な構造 BigDecimalは数値を整数部とスケールで表現します。スケールとは小数点以下の桁数のことです。 (例) 1.234 スケールを変える スケールの変更はBigDecimalの基本的な操作です。足し算、引き算、割り算と値の比較でも使われます。 基本的な考え方 スケール(小数点位置)を変更する。 なるべく、実質的に値を変えない。(例:2.5と2.50は実質的に同じ値) スケールを増やす 2.5のスケールを「2」にする例。 実質的に値を変えず、小数点以下の桁数を「2」に変える。(2.5→2.50) 小数点を除いて、実際の値(250)を整数値に転記する。 スケールを「2」にする。 スケールを減らす 2.50のスケールを「1」にする例。 実質的に値を変えず、小数点以下の桁数を「1」に変える。(2.50→2.5) 小
GraalVM・GraalPythonとは GraalVMは2018年4月27日にOracleから公開された仮想マシンです. GraalVM is a universal virtual machine for running applications written in JavaScript, Python, Ruby, R, JVM-based languages like Java, Scala, Clojure, Kotlin, and LLVM-based languages such as C and C++. GraalVMはJavaScript,Python,Ruby,R,JavaやScala,Clojure,KotlinのようなJVMベースの言語,CやC++のようなLLVMベースの言語で書かれたアプリケーションを動かすための仮想マシンです. ちょっと何を言ってるかわから
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く