Java オブジェクトのシリアライズとは? ObjectInputStream と ObjectOutputStream を用いることによって、 Java オブジェクトをファイルに出力したり、ファイルからオブジェクトを元にもどしたりできます。 ハードディスクなどの記憶装置などにメモリ上のオブジェクトを記録することを永続化 (パーシスタント) といいますが、このときオブジェクトを記憶装置上のバイト列に表現することをシリアライズ (Serialize) といい、 記憶装置からデータを読み込んで Java オブジェクトに復元することをデシリアライズといいます。 ちなみに RPC とかの話などでリモートマシン上(あるいは何らかのバウンダリを越えた場所)にデータを送るような話をするときはマーシャリングといいます。 シリアライズ/デシリアライズ可能なオブジェクト このページでは Company と E
はじめに Oracle JDK/JRE 8のPublic Updates1が商用ユーザーに対しては2019年1月までで終了し、2019年4月のリリースからライセンスが変更されたため、別のJDKディストリビューションへの切り替えを考えている方も多いと思います。 しかし、特にOracle JDK 8までは、素のOpenJDKにはない2機能が多く存在します。 安易に切り替えてトラブルにならないように、Oracle JDK 8にはあるが、一般的なOpenJDKディストリビューション3にはない機能を無償・有償別にまとめてみます。 Oracle JDK 8で無償利用できていた機能 Applets/JRE Browser plug-in 4 Java Web Start 5 JavaFX 6 VisualVM 7 Derby DB 8 Font Rendering/Fonts 9 Color Match
Webシステムの安定動作には、メモリ使用量の適切な見積もりが不可欠。だがJavaVMでメモリがどのように管理されるかを理解しているだろうか? メモリに関する問題が発生すると、知識や技術資料の不足によって問題が長期化しがち。JavaVMでどのようにメモリが管理されているかを理解し、正確なメモリサイジングやメモリ関係のトラブルの早期解決へとつなげよう。 JavaVMのメモリ構造を理解しよう まず、JavaVMがどのようにメモリを使っているかを理解しておこう。JavaVMがプログラムを実行すると、Javaのプロセスによってメモリが使用される。Javaのプロセスでは、Javaヒープ、Permヒープ、Cヒープ、およびスレッドスタックという4つのメモリ領域を使用する。 Javaヒープはアプリケーションプログラムの各種オブジェクトを格納する領域であり、Classのnewで確保される。JavaヒープはNe
VSCodeで、JavaのHot Code Replacement(ホットコード置換)がサポートされた。ホットコード置換を用いると実行中のアプリケーションのコードを実行したまま動的に修正できるため、トライアンドエラーが容易になる。 アプリケーションのコードを修正した場合、その修正を反映させるためには、コンパイル型の言語であれば再コンパイルする必要があり、インタープリタ型の言語であればアプリケーションの再実行が必要となります。 しかしコードを書き換え、実行し、動作を確認するということを何度も繰り返す開発作業では、いちいち再コンパイルをしたり、再実行する手間はなんとも面倒です。 そこでJavaには、「Hot Code Replacement」(ホットコード置換)と呼ばれる機能が用意されています。これはコードを再コンパイルすることなく変更した内容をJavaVMに転送し、反映できるというものです。
前提条件 コーディング規約をどこまで細かく規定するか、については、常に論争となる点です。そこで、まず前提条件を明確化し、不要な論争を避け、有意義な議論ができる土台を定義します。 前提とするソフトウェア開発組織 理想的なソフトウェア開発組織は、同じ開発文化を共有する開発者チームが継続していろいろな仕事をこなす形態です。 しかし、ソフトウェア開発組織を継続して保有(常備)するためには、定常的にコストがかかります。そのため、中にはソフトウェア開発組織の質よりも常備コスト削減を優先し、開発案件が発生したときに臨時でソフトウェア開発組織を編成し、案件終了時にソフトウェア開発組織を解散する、というやり方を取る会社があります。 継続するソフトウェア開発組織であれば、ソフトウェア開発能力はメンバー間の暗黙知による共有により十分期待できるのですが、臨時編成するソフトウェア開発組織では、能力はまちまち、暗黙知
illustration by iwasawa Selenideとは Selenideとは、エストニアにあるCodeborne社のAndrei Solntsev氏を中心に開発が行われているWebDriverのJavaラッパーの一つで、同じJavaで実装されたFluentLeniumやGroovyでのGebに相当するものです。WebDriverはプログラムからブラウザを操作するAPIを提供していますが、基本的に低レベルAPIで自動テストを記述するには大量のコードが必要となります。SelenideはWebDriverを基盤としながら高水準APIを提供することで、WebDriverを素で使うよりも容易にかつ記述量を抑えてテストを記述することができます。 Selenideの特徴 以下ではSelenideの特徴を述べていきます。これらの中には上記で挙げたFluentLeniumやGebでも提供されて
はじめに 最近、Amazon Alexa のCustom Skillを作る勉強をしています。Alexa のCustom SkillはAWS Lambdaを使うのでNode.js、Java、Pythonなどの言語で開発できます。ネットではNode.jsの入門記事が多いのですが、私はJavaとEclipseの開発の方が慣れているのでJavaでやってみました。今回はサンプルを動かすことができましたのでその手順をまとめます。前提としてはAWS LambdaとJavaでの開発経験がある方を対象としています。 Alexaって何という方は以下の記事をご覧ください。 Amazon Alexaの基礎知識 目次 Alexa Skills Kitのサンプルを動かしてみる Slotを使って声掛けによって結果が変わるCustom Skillを作成する Sessionを使って何回かやり取りするCustom Skill
GC周りでトラブルシューティングした際の経験や、Web等で調べたことをまとめてみる。 前提 ・JVMは、Sun Javaを想定。(他は使ったことないです。。。) ・Sun Java 1.5-1.6を想定。 目標 マイナーGC、Full GCそれぞれが頻発することなく、かつそれぞれの実行時間を1秒未満に抑えること。 マイナーGCは1秒未満どころではなく、もっと短くなるべき。どれくらいが理想かは?(0.1秒未満ぐらいを目指したい?) 連続した負荷状態(想定されるピークアクセス)でもOutOfMemoryErrorが発生しないこと。 理想的な状態は、上記に加えて、Full GCの発生が低頻度であること。 具体的には、できるだけマイナーGCで短命オブジェクト(1回使ったらもう使わないようなオブジェクト。逆にセッションオブジェクト等は長命オブジェクトとなる)を破棄させて、短命オブジェクトが、Tenu
Java VMのメモリ不足の問題は、解決までに時間を要する。だが適切な初期調査を行えば、ある程度まで原因を絞り込め、早期解決につながる。今回はメモリ不足問題の対応方法を、体系立てて解説する。 問題解決のポイント Java VMでメモリ不足が発生した時に重要となるポイントは、早期に発生個所の特定と原因の切り分けである。 Webシステムでメモリが不足すると、「java.lang.OutOfMemoryError」メッセージが出力される。このメッセージが出力された時、最初に行うことは、WebサーバやJava VMのログを確認することだ。これらのログから障害の痕跡を発見できると、障害内容からメモリ不足の原因を切り分けられる。しかし、使用しているJava VMによっては、障害の切り分けに必要な情報が得られない場合もある。その場合、GCログが障害解析の資料として役に立つ。 以降、Webシステムを例に、
渡辺です。 2014年3月18日にJava8がリリースされ、半年以上が経過しました。 そろそろプロダクション環境でもJava8が採用されているかと思います。 また、先日、AWS環境(Amazon Linux)でも、yumでJava8がインストールできるようになりました。 早速、Java8/Tomcat8で環境を構築しようとしたところ、ビミョーな所ではまってしまいました。 EC2インスタンスの作成 Amazon Linux AMI 2014.09.1 x86_64 HVM EBS(ami-4985b048) を利用しました。 インスタンスタイプはt2.small以上とするのが無難でしょう。 セットアップ Tomcat8とJava8をインストールする手順は以下の通りです。 $ sudo yum -y install java-1.8.0-openjdk-devel tomcat8 $ sudo
よく訓練されたアップル信者、都元です。ゴールデンウィークは、越後湯沢の関東IT健保の宿泊施設トスラブ湯沢に行ってました。明らかに広すぎる部屋で、チェックイン以来出入りしなかった部屋が1つありました…っていう。まぁとにかくリフレッシュできました! さて、私がJavaを触りはじめて10年以上が経ち、近年はJavaの入門書に触れる機会はめっきりありませんでした。が、最近しがないOLがJavaエンジニアを目指して頑張るということで、いくつか本を勧めたりしていたところに、「Java本格入門」が発売となりました。しがないOLには、少し古めのJava解説書を勧めていたこともあり、その最新知識へのアップデートとして、率直に良書が空から降ってきた感があります。 ちなみに本書は監修を行った会社名より「アクロ本」と呼んで親しまれています。購入はこちらからどうぞ。 個人的によかったなと思う部分 Javadocに触
Play2.1がリリースされたと言う事で、Play2.1とJenkinsを絡める部分についての設定時のメモを。主に過程を進めていく上で主にScala環境周りで(主に実行権限とかファイルとか)エラーが出たので対処の内容になってます。 とりあえず動かしたレベルなので全然改善の余地ありだし、時間を見て追記更新する予定。 Ubuntu12.04 Scala 2.9.1 Play2.1.0 Play2.1インストール $ wget http://downloads.typesafe.com/play/2.1.0/play-2.1.0.zip $ sudo unzip play-2.1.0.zip $ sudo vi .bash_profile --------------- # add PLAY env. #export PLAY_HOME=/usr/local/bin/play-1.2.5 exp
GradleでのJavaプロジェクトの初め方です。タイトルのEclipseのプラグインとは、Gradle側からのEclipseプラグインと、Eclipse側からのGradleプラグインがありますので両方紹介します。 GradleでHelloWorld! GradleはビルドツールですがGroovyというスクリプト言語で記述します。おなじみのHelloWorld!から試してみたいと思います。 適当なディレクトリを作成して、その中にbuild.gradleというファイルを作成してください。これはビルドスクリプトのデフォルトファイル名です。 task hello << { println 'Hello World!' } 記述するのはこれだけです。早速実行してみましょう。 $ gradle hello :hello Hello World! BUILD SUCCESSFUL Total time
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く