Главная фишка высоконагруженных приложений не в выборе технологий, а в архитектуре. Зачастую, узким местом приложения является база данных. Первое, что нужно сделать - это научиться масштабировать данные. Ищем по ключевым словам "шардирование", "репликация".
После того, как данные масштабируются, можно думать о включении кэширующего слоя. Ищем "memcached", "redis".
Если начинает не справляться фронтенд (фронтенд бэкэнда), подключаем балансировщик нагрузки. Как на уровне DNS, так и на уровне отдельных инстансов фронтенда.
Раздаете много статики? CDN вам в помощь.
Много сложных и ресурсоемких вычислений, результат выполнения которых не требует моментального отображения клиенту? Разворачиваем очереди задач и считаем это в фоне.
А уж какую технологию выбрать java или php это Вам виднее. То, что лучше знаете и сможете поддерживать.
Советую почитать
ruhighload.com/scale