ざっくばらんにまとめました。
1.プロセスについて
実行するアプリケーション単位。
メモリ管理などをすべて行うため、1つのプロセス上でないといけない。
プロセスを複数立ち上げる場合は、元のプロセス(親プロセス)からforkしてプロセス(子プロセス)を作成する。
メモリ空間は別で割り当てられるため、データは共有されない。
※使用されるプログラムは同じだけど、プログラム内の状態をもつ変数はプロセスごとに異なるから、互いで同じプログラムを処理していても干渉しない。
2.メモリについて
A.) Javaヒープ
Javaプログラム内で使用されるオブジェクトが格納される領域。
Object obj = new Object();
や
String[] strArry = new String[5];
などを行うと、Javaヒープに格納される。
New領域とOld領域と言うものが存在する。
B.) Cヒープ
C.) スレッドスタック
JVMが持っているスレッド情報を格納する領域。
1スレッドにつき1処理。
処理がたくさん実行されているとスレッドスタックの数は多くなる。
3.スレッドについて
プロセスの中で起ち上がり、メモリ空間を共有する。
つまり複数のスレッドが実行されている場合は、1つプログラムが複数のスレッドで使用されるのでスレッドセーフな状態でないといけない。
3-1.スレッドセーフとは
複数のスレッドが1つのプログラムを実行しても問題が発生しない状態。
以上