Java к [закрытой] кросс-компиляции C

6
задан Anderson Green 2 April 2016 в 18:08
поделиться

2 ответа

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

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

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

4
ответ дан 16 December 2019 в 21:39
поделиться

Это очень похоже на этот вопрос, и ответы могут быть вам полезны: Компилятор для перевода Java на C .

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

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

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

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

4
ответ дан 16 December 2019 в 21:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: