Я разработчик php, но недавно мне пришлось писать одно и то же приложение дважды, один раз в php и один раз в java, для класса, который я беру в школе. Для любопытства я сделал бенчмарк на этих двух и обнаружил, что версия java в 2-20 раз медленнее, чем версия php, если к базе данных обращаются, и от 1 до 10 раз медленнее без доступа к БД. Я вижу две непосредственные возможности:
Я разместил здесь код сервлета. Мне не нужны ничтожные скудные или незначительные улучшения, но может ли кто-то увидеть ужасную вопиющую проблему с производительностью? Или кто-нибудь может объяснить, почему Java чувствует, что она должна сосать?
Я всегда слышал, как люди говорят, что java быстрее и масштабируемо, чем php, особенно мой учитель, он в этом убежден, но чем больше запросов выполняется, тем медленнее становится Java. По-видимому, php не влияет на повышенные нагрузки, но остается неизменным.
В зрелом веб-приложении Java Servlet использует существующий пул соединений JDBC. Установление нового соединения будет, безусловно, самой большой ценой, которую вы платите вовремя.
Вызов Class.forName
для каждой попытки получить соединение также приведет к ненужному замедлению.
Настройка JVM также может быть фактором. В корпоративной среде конфигурации JVM и, возможно, конфигурации GC будут скорректированы и настроены для достижения желаемого баланса между отзывчивостью и использованием ресурсов.
Как указывает Стивен С, JVM также имеет концепцию своего рода «разогрева».
Все, что сказал, я понятия не имею, как PHP сравнивается с Java, и я чувствую, что оба языка предлагают отличные решения для разделения непересекающихся наборов потребностей.
Основываясь на Class.forName("com.mysql.jdbc.Driver");
информации (где принимаются лучшие решения), я думаю, это Class.forName("com.mysql.jdbc.Driver");
в getConnection()
– это большой раз.
Создание new String
в importFile, когда char[]
может быть передан out.println, мне не нравится.
Кажется, что ваш тест отражает первоначальные накладные расходы, а не стабильность. Попробуйте выполнить тесты не-DB несколько раз в цикле (чтобы каждый тест wold запускал код несколько раз) и посмотрите на линейную зависимость между временем выполнения и числом итераций. Я подозреваю, что инкрементная стоимость java ниже, чем для php