Зависит ли оптимизация программ от языков программирования?
Высокоуровневые языки  упрощают разработку и сопровождение исходного кода, а также понимание стороннему програмисту.
На низкоуровнем ассемблере ты код с разбегу просто не воспримешь, да и не напишешь. Зато можешь очень точно допилить код для идеального быстрого исполнения под конкретную аппаратную платформу, но допиливание потребует кучу времени и знаний.
Та же java скрывает многие тонкости работы конкретной аппаратной платформы. зато "набросать" рабочй код получится очень быстро.
джава компилируется в байт-код, который исполняется на виртуальной машине (а это все равно прослойка торможения), но зато байт-код прекрасно выполняется на любой аппаратной платформе, если под нее написана виртуальная машина. с++ компилируется в нативный код под конкретную аппаратную платформу, поэтому дозволяет делать более проработанную оптимизацию, но требует по отдельной компиляции на каждую платформу.
у каждого языка и каждой из реализаций языка в компиляторе/исполнителе есть свое место под солнцем.
абсолютно универсально "вовседырошно применимого" языка пока не создали :)
Давайте по порядку:
1. Что такое оптимизация  программы? 
Есть такое понятие, как алгоритмическая оптимизация. В простых случаях - это, например, вынос присваивания неизменяемого в цикле значения за его рамки, сохранение промежуточных результатов вычислений, при обработке сложного выражения, развертывание цикла, да и много чего еще, что умеют делать современные компилеры с исходниками. Другое дело, что это, в той или иной мере стараются делать все языки, и скриптовые, и компилируемые, ну, может быть кроме асма, там что напишеш, то и получешь, на сколько мне известно.
Кроме оптимизации алгоритмической, есть еще оптимизация под целевую платформу. Компилируемые в нативный код процессора языки стараются эту оптимизацию делать, но, на сколько глубоко, скорее всего зависит от конкретного языка. Например Цэ может вылизать каждый байт результата компиляции, а Go приходится помнить и про сборщик мусора, и про планировщик горутин, кроме собственно оптимизации целевого кода. Для скриптовых языков об этой оптимизации можно говорить только в случае поддержки ими jit компиляции, что есть не у всех из них.
2. Деление на высокоуровневые и низкоуровневые языки достаточно условно. 
Первй критерий, который припоминается - это возможность работы с железом напрямую. Во времена DOS это были асм и цэ, хотя, смутно припоминается, что и паскаль и даже бейсик позволяли скинуть значение в порт или прочитать его. Сейчас, в большинстве случаев, ОС работает в защищенном режиме, и пользовательское приложение прямого доступа к железу не имеет. Особняком стоят языки, которые умеют порождать код, стартующий на голом железе, и здесь кроме асма и це можно, к примеру, вспомнить про erlang, который, хоть и скриптовой, но вроде как умеет стартовать без присутствия ОС, ну или новомодный раст, тоже достойный вариант для рассмотреия.
3. Отличия между языками - это прежде всего по задачам, для которых они предназначены. Например, большинство языков имеет ограниченную точность математики, и для проведения высокоточных расчетов приходится привлекать внешние библиотеки, но есть фортран, который изначально создавался для проведения расчетов, и он прекрасно справляется с этим сам. Другой пример, на асме можно написать текстовый редактор, только это будет долго по времени, в отличии, того же Цэ с плюсами, но если речь зайдет про отладчик программ, то здесь без асма ни как. Ну и на последок, Lua, который популярен у разработчиков игр как встраиваемый в платформу язык, благодаря своей достаточной скорости при небольшом размере среды исполнения.
Про джаву ни чего сказать не могу, потому как знаком с ней только по продукции jetbrains и на примере эклипса или нетбинса.