C で new 無しの配列宣言はスタックに確保される。スタックはヒープに比べてだいぶ小さいので
配列の様な何 kB になるか分からないデータを置いているとすぐにスタックオーバーフローを起こす。
Java はそんな職人のカンが必要な要素をなるべく排除してはじめからスタックに配列を置けない
ようになってる。あと元々組み込みの様な貧弱メモリ環境で使うのに作られた言語だし。