Насчет жабы ничего сказать не могу, а в С++ введение типов
позволяет делать шаблонную магию, переопределяя поведение даже для
объектов нулевого размера. То есть оперативки это не ест, зато
вводит отдельную сущность на уровне языка. Но тут главное не
перестараться: шаблонный код генерится заново для каждого типа,
поэтому иногда вводят специальный базовый класс и реализацию
завязывают на него, иначе будет как у
boost::container::small_vector<T, size_t>, где для векторов разного размера будут разные реализации