Альтернатива Java - PullRequest
       33

Альтернатива Java

1 голос
/ 14 ноября 2009

Мне нужна альтернатива Java, потому что я работаю над проектом расчета генетики. Это занимает много памяти и большую часть времени процессора. И поэтому он не будет работать, когда я разверну его на сервере, потому что многие люди используют программу одновременно.

Кто-нибудь знает другой язык, который не работает на виртуальной машине и похож на Java (объектно-ориентированный, использующий исключения и безопасность типов)?

С уважением,

Jonathan

Ответы [ 11 ]

22 голосов
/ 14 ноября 2009

Чтобы ответить на прямой вопрос: существуют десятки языков, которые соответствуют вашим явным требованиям. AmmoQ перечислил несколько; Википедия имеет гораздо больше.

И я думаю, что вы будете разочарованы каждым из них.

Несмотря на то, что ненавистники Java хотят, чтобы вы думали, производительность Java не сильно отличается от любого другого скомпилированного языка. Смена языков не сильно улучшит производительность.

Вероятно, вы добьетесь большего успеха, если получите профилировщик и посмотрите на алгоритмы, которые вы использовали.

Удачи!

10 голосов
/ 14 ноября 2009

Если ваши приложения потребляют большую часть ЦП и памяти на однопользовательской рабочей станции, я скептически отношусь к тому, что перевод их на некоторый язык, не относящийся к ВМ, очень поможет. С Java вы зависите от виртуальной машины для таких вещей, как управление памятью; вам придется заново реализовать их эквиваленты на языке, отличном от VM. Кроме того, управление памятью в Java довольно хорошее. Ваше приложение, вероятно, не чувствительно в режиме реального времени, поэтому его приостановка время от времени не является проблемой. Кроме того, вы все равно собираетесь запустить это на многопользовательской системе, верно?

Использование памяти будет больше зависеть от ваших базовых структур данных и алгоритмов, а не от каких-то магических изменений в языке. Если у вас действительно отличная библиотека распределения памяти для выбранного языка, вы можете обнаружить, что используете столько же памяти (если не больше) из-за ошибок в вашей программе.

Поскольку ваше приложение требует значительных вычислительных ресурсов, какой-то другой язык вряд ли сделает его менее значительным, если вы не вставите в код некоторые стратегические вызовы sleep (), чтобы преднамеренно заставить его чаще загружать процессор. Это замедлит его, но будет приятнее для других пользователей.

Попробуйте запустить ваше приложение с параметром Java -server. Это задействует виртуальную машину, предназначенную для долго работающих программ, и включает JIT, который скомпилирует вашу Java в нативный код. Это может заставить вашу программу работать немного быстрее, но она все равно будет связана с процессором и памятью.

9 голосов
/ 14 ноября 2009

Если вам не нравится C ++, вы можете подумать о D, ObjectiveC или новом языке Go от Google.

6 голосов
/ 14 ноября 2009

Вы можете попробовать C ++, он удовлетворяет всем вашим требованиям.

5 голосов
/ 14 ноября 2009

Используйте Python вместе с пакетами numpy, scipy и matplotlib. numpy - это пакет Python, в котором реализован весь код обработки чисел, реализованный на C. Следовательно, производительность во время выполнения (bcoz из Python Virtual Machine) не будет проблемой

Если вы хотите использовать только скомпилированный язык со статической типизацией, взгляните на Haskell.

3 голосов
/ 15 ноября 2009

На ту же тему, что и ответ @ Барри Брауна:

Если ваше приложение интенсивно использует вычислительные ресурсы / память в Java, оно, вероятно, будет интенсивно использовать вычислительные ресурсы и память в C ++ или любом другом «более эффективном» языке. Вы можете получить дополнительную свободу действий ... но вскоре вы столкнетесь с той же стеной производительности.

ИМО, вам нужно сделать следующие вещи:

  1. Вам необходимо профилировать свое приложение и искать какие-либо серьезные узкие места в производительности. Вы можете найти некоторые реальные сюрпризы.

  2. В свете предыдущего шага рассмотрите дизайн и алгоритмы, уделив внимание вопросам сложности пространства и времени. Проведите некоторое исследование, чтобы увидеть, обнаружили ли кто-то лучшие алгоритмы для выполнения вычислений, которые являются проблематичными с точки зрения производительности.

  3. Если предыдущие шаги не опередили вас, посмотрите, можете ли вы обновить свою платформу; получить большую машину с большим количеством процессоров, большим объемом памяти и т. д.

  4. Если вы все еще застряли, ваш единственный вариант - горизонтальный дизайн. Предполагая, что запросы отдельных пользователей обрабатываются в однопоточном режиме, перестройте вашу систему, чтобы вы могли запускать «рабочие» на нескольких серверах с балансировщиком нагрузки на передней панели. Если у вас есть постоянный бэкэнд, посмотрите, как вы можете повторить это. И так далее.

  5. Выясните, можно ли распараллелить / распределить ключевые алгоритмы так, чтобы ресурсоемкие части пользовательского запроса выполнялись параллельно на нескольких процессорах / нескольких серверах; например используя каркас "уменьшение карты".

ОК, поэтому нет простого ответа. Но простая смена языков программирования НЕ является хорошим ответом.

3 голосов
/ 15 ноября 2009

Можно ли распараллелить ваши алгоритмы?

Независимо от того, какой язык вы используете, вы можете столкнуться с ограничениями в какой-то момент, если вы используете один процесс. Использование чего-то вроде Hadoop будет означать, что вы можете сохранить Java и простоту использования, но вы можете работать параллельно на многих машинах.

1 голос
/ 15 ноября 2009

Независимо от языка вашей программе придется делиться с другими при работе в нескольких экземплярах на одном компьютере. Это просто, как работают компьютеры.

Лучший способ позволить вашей текущей программе масштабироваться с использованием доступных аппаратных ресурсов - это разделить объем работы на небольшие независимые части и заставить их реализовать интерфейс Callable. Затем они могут быть выполнены подходящим исполнителем, который затем может быть выбран в соответствии с доступным оборудованием. Смотрите класс Executors для многих предварительно настроенных версий. Это то, что я бы порекомендовал вам сделать здесь.

Если вы хотите переключить язык, то Mac OS X 10.6 позволяет программировать способом, описанным выше, с использованием C и ObjectiveC, и если вы делаете это правильно, OS X может распределять код по всем доступным вычислительным ресурсам (как CPU, так и GPU и тому есть мы).

Если ничего из вышеперечисленного вам не интересно, рассмотрите одну из Grid-фреймворков. Терракота может быть хорошим местом для начала.

0 голосов
/ 15 ноября 2009

Вы можете найти стрельбу по компьютерному языку здесь интересно. Например, вот Java против C ++ .

Вы можете найти Ocaml (из которого происходит F #), на который стоит обратить внимание; он соответствует вашим требованиям к ОО, исключениям, статическим типам и имеет собственный компилятор, однако в соответствии с перестрелкой вы можете торговать меньшим объемом памяти для более низкой скорости.

0 голосов
/ 14 ноября 2009

F # или ruby, или python, они очень хороши для вычислений и многого другого
НАСА использует питона

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...