Для бизнеса, Java и C похожи: в Си код компилируется везде одинаково, а в Java — скомпилированный код выполняется везде одинаково. И синтаксически языки похожи, но если мы посмотрим чуть пристальнее, увидим, что в Си (в меньшей степени в Си++) код находится под параноидальным контролем программиста, а в джаве и большинстве скриптовых языков — гуляет сам по себе.
Что происходит в Java:
- У программиста забирают контроль над тем, где выделяется память, на стеке или в куче. Фактически, почти всё улетает в кучу, причем всё по отдельности. Одним куском можно выделить только массив чисел.
- Программистов убеждают делегировать высвобождение памяти виртуальной машине. Ручное высвобождение невозможно, только удержание.
- Числа иногда ведут себя как объекты, а значит выделяются в куче (точно?), что окончательно растворяет всякую надежду что-либо проконтролировать.
- Поощряется использование потоков и передача объектов между ними. Типы становятся доступными во время выполнения. Реализации и наследники в этом броуновском движении случайны, но в то же время одна только информация о типах может менять логику программы, даже если поведение объектов совпадает.