2010-02-02 4 views
4

Кто-нибудь знает о хорошем компиляторе от Java до C?Java to C cross compilation

Хорошо ли они работают?

+1

Если вы не используете всю стандартную библиотеку, это не большая часть прибыли от инвестиций. основной google показывает множество результатов. –

+1

Почему именно вы хотите конвертировать из Java в C? Если скорость является проблемой, вы всегда можете попробовать скомпилировать Java на собственный машинный код, например, с помощью GCJ. – Steve

+0

Хотя вопрос не совсем то же самое, он достаточно близко, чтобы ответы были действительными: http://stackoverflow.com/questions/1096615/automatic-java-to-c-conversion/1096648#1096648 –

ответ

3

Можете ли вы объяснить, почему вы хотите портировать Java-код на c?

Если это для производительности, вы, вероятно, не увидите значительной части улучшения. Java - это сборник мусора, и в настоящее время нет алгоритма, который мог бы эффективно использовать распределение памяти и освобождение вызовов. Было много исследователей, пытающихся решить эту проблему, и у них есть интересные решения, но я не видел хорошего коммерческого продукта, который может масштабироваться до больших программ. Вы можете посмотреть конференцию, проводящую предыдущие конференции ISMM для получения дополнительной информации.

Если вы хотите скорректировать код, я предлагаю вам использовать профилировщик и найти горячие методы. Попробуйте и оптимизируйте горячие методы, и если этого еще недостаточно, попробуйте использовать JNI.

+0

1-й нам нравится переходить с Java на C, затем с C на VHDL (для реализации в FPGA или ASIC). –

+1

@Martin: Итак, вы хотите перейти с Java на VHDL, и лучший путь выглядит так, как будто он использует C? Вы можете отредактировать свой вопрос или привлечь новый, чтобы узнать, есть ли у кого-нибудь лучший способ начать работу с Java и получить VHDL.Мне вспоминается о середине 90-х, когда я использовал f2c для изменения линейного программного кода Fortran на C, чтобы я мог связать его с Macintosh Common Lisp. –

3

Это очень похоже на этот вопрос, ответы могут быть вам полезны: Compiler to translate Java to C.

Реферат: Есть инструменты для этого (Toba, GCJ и т. Д.), Но вы можете столкнуться с проблемами, когда не все переносимые библиотеки Java. В конце концов, инструменты, вероятно, будут делать только ЧАСТЬ РАБОТЫ, и вам придется вручную скомпоновать некоторые из остальных.

Хорошим первым шагом является преобразование вашего Java-кода только для использования стандартных библиотек, доступных в Java 1.4. Фактически, вы, вероятно, захотите отучить как можно больше от всего, что не в пакетах java.lang. * Или java.util. *, Чтобы упростить процедуру портирования.

В зависимости от размера вашей кодовой базы, , на самом деле может быть проще переписать объем напрямую, а не полагаться на инструменты. Java и C имеют много подобия синтаксиса, но несоответствие между прямым процедурным кодом C и объектно-ориентированными объектами Java может вызвать проблемы. Автоматизированные инструменты могут создавать практически незаметный код C при попытке обойти это, и всегда есть возможность для тонких ошибок.

2016 обновление: Не делайте этого, не сейчас, никогда. Параметры, которые использовались для этого, не поддерживались (например, GCJ), и, возможно, легче найти разработчика, свободно владеющего Java, чем C. Кроме того, производительность Java продолжает улучшаться, а базовые реализации, как правило, имеют одинаковую производительность. Оптимизированный C еще быстрее, но с каждой версией JRE край становится все меньше и меньше.

+1

5 лет назад это была идеальная идея, теперь она плоская * ужасная *. Ваш C, скорее всего, будет медленнее, чем исходная Java (JRE 8 примерно такой же умный, как и большинство компиляторов C), а в качестве бонуса gcj поддерживает только до Java 4 с поддержкой Java 5. Теперь мы находимся на Java 8, теперь даже самые тривиальные реализации даже скомпилируются GCJ. – BobMcGee

+1

Насколько плохая идея? Был один микрообъект, который я преобразовал для простого теста (разбор текста и подсчет слов, затем сортировка). Результаты: Java 8, 8.492s в реальном времени, 13.850s процессорное время. GCJ скомпилированный двоичный файл: 28.191s в реальном времени, 27.850s процессорное время. – BobMcGee