Использование компилятора из Java в машинный код - PullRequest
0 голосов
/ 06 января 2019

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

Я студент информатики в TUM Германии. Я знаю преимущества и недостатки Java, а также плюсы и минусы, например. C / C ++.

Синтаксис Java очень похож на C ++ (не могу говорить о C, никогда не рассматривал его). В Java вы не используете стек явно. Компиляция кода Java (после исправления незначительных синтаксических различий) с помощью компилятора C будет использовать только кучу. Также созданные объекты в куче не будут автоматически освобождены.

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

Если компания создала эффективный синтаксический анализатор, который находит время жизни объектов в коде Java, чтобы изменить эти объекты для использования стека в C ++, компилятор может скомпилировать этот код так же, как обычный C ++, что может привести к лучшей производительности чем с помощью JVM. Также объекты кучи будут освобождены после того, как они больше не используются (Даже если вам нужно было вручную добавить строки, где объекты должны быть освобождены, я не думаю, что это может быть сложно)

Я знаю, что разбил эту огромную тему до этого небольшого объяснения. Что-то я пропускаю или что-то не так с моими мыслями?

(мне «грозит опасность, что я больше не буду спрашивать». Пожалуйста, помогите мне изменить мою тему, чтобы она лучше подходила этому форуму!)

EDIT: Я использую оба, Java в университете, C ++ для выполнения проектов на дому. Для меня различия незначительны и могут быть легко изменены. Это мой опыт, по крайней мере.

1 Ответ

0 голосов
/ 06 января 2019

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

Даже если бы вам пришлось вручную добавлять строки, где объекты должны быть освобождены, я не думаю, что это может быть сложно : это то, что мы делаем в C или C ++, отметка быть звонком, чтобы бесплатно / удалить: -)

Это не зря существуют сборщики мусора, и вы не можете легко заменить сборщик мусора магией.

При отсутствии сборщика мусора есть несколько способов помочь автоматически освободить выделенную память, например, использовать std::shared_ptr, std::string также использовать внутренний счетчик, чтобы знать, когда можно освободить внутренний char *. Использовать счетчик ссылок просто, но счетчик ссылок не должен переполнять счетчик, и этот способ не работает, когда у вас есть круг, потому что счетчики не могут опуститься до 0, опять же нет волшебства

...