リスト13.1: プリミティブ型と参照型 1: int primitiveType = 1; // プリミティブ型 2: Object referenceType = new Object(); // 参照型 Javaの変数に格納される型としてint、floatといったプリミティブ型があります(リスト13.1の1行目)。プリミティブ型はJava上では数値として扱われます。それと同様にC++(HotspotVM)上でもintやfloatといった数値として扱われます。 一方、Objectクラス(またはその子クラス)のインスタンスを指す参照型があります(リスト13.1の2行目)。参照型はC++(HotspotVM)上ではオブジェクトへのポインタとして扱われます。 ここで問題となるのがプリミティブ型はVM上で数値として扱われるという点です。つまり、プリミティブ型の値は偽ポインタの可能性があります。
![正確なGCへの道](https://cdn-ak-scissors.b.st-hatena.com/image/square/aad5afb6cba48b2bb2c4ab4bb44cf7039c4307a1/height=288;version=1;width=512/http%3A%2F%2Fwww.narihiro.info%2Fg1gc-impl-book%2Fimages%2Fprecise%2Fbytecode_flow.png)