新米フリーランスSEのブログ

2017年1月よりフリーランスに転向したシステムエンジニアのブログ。プログラミングスクールではRubyの勉強をしていたが、現在はJavaによる開発がメイン。当ブログは筆者の学習メモを投稿していく予定。

2018/01/13 【Java】学習メモ

JVM(Java Virtual Machine)

Javaの仮想環境

 ー

ーOSに依存せずにJavaプログラムを実行することを可能にする機能。

 ーOSごとに違うJVMを持つが、仮にWindowsコンパイルして作成したクラスファイル(バイトコード)でも、Linuxで実行することが可能。

  ーJavaはOSに依存せず実行可能な言語。

 ーOSごとのネイティブコードに変換する。

Permanent領域

ー非ヒープ領域

 ーヒープとはシステムが利用するメモリ領域

ークラスやメソッドなどの情報が格納される領域

New領域

ーヒープ領域

ーEden領域

 ーオブジェクトがインスタンス化された時に利用する領域

ーFrom領域、To領域

 ーEden領域のメモリが満たされた際、オブジェクトの退避に利用する領域

Old領域

ーヒープ領域

ーNew領域に格納されているオブジェクトで使用期間が長いものが格納される領域

ーOld領域がいっぱいになるとFull GCが起こる

 

ガーベジコレクション

ープログラムが確保したメモリ領域のうち、不要になった箇所を解放する機能

ガーベジコレクションにシステムの動作が停止することがある

 ーFull GC

 

メモリリーク

ー使用可能なメモリが不足し、プログラムが動作しなくなる状態

 

Scavenge GC

ーNew領域のみに対し働くガーベジコレクション

 

Full GC

ーOld領域を含む全領域で働くガーベジコレクション

ー処理に時間がかかる

ーOld領域が多く使用されるほど、Full GCが起こる可能性が上がる。

 ーオブジェクトの使い回しを増やさないようにすると回避できる?

 ー新しいオブジェクトを大量に使う場合は、New領域を大きくする?

  ーOld領域の使用を減らす狙い