2016-05-29 2 views
0

Мне было интересно, есть ли какой-нибудь инструмент для оптимизации/минимизации кода Java. Я уже узнал о некоторых Obfuscators (http://java-source.net/open-source/obfuscators), но я не уверен, что это то, что я хочу, потому что я на самом деле хочу еще «читаемые» Java-плагины, но с его миниатюрностью, например, создавая методы для дублирования кода, просто сделайте код лучше.Minify Code - Java

Есть ли какой-нибудь инструмент, который может это сделать?

+0

Обфускаторы не предназначены для оптимизации кода. Существуют декомпиляторы, которые создают исходный код из файлов классов. Если у кого-то есть .class-файл, декомпилятор может использоваться для создания исходного кода. Обфускаторы заменяют имена классов/переменных/методов именами без каких-либо чувств, например 'class A' или' public int b() '. Поэтому после декомпиляции вместо плохих имен используются «плохие» имена. Единственная причина этого: путать людей так, что работать с кодом очень сложно, если не невозможно. Но это не имеет никакого отношения к оптимизации. –

ответ

2

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

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

0

Вы не ищете меры по минимизации, вы ищете автоматический рефакторинг. Для этого есть . Кроме того, IDE могут помочь вам с полуавтоматическим рефакторингом и автоматическим переформатированием, что также может сократить количество строк кода.

Инструменты могут помочь вам найти потенциальные проблемы с кодом, требующие ручной фиксации. Но поскольку у них есть ложные срабатывания, было бы опасно просто применять предлагаемые исправления автоматически.

Инструменты для тестирования могут также оказаться полезными при поиске неиспользуемого кода, предполагая, что тесты достаточно полные.

0

Я фактически только что выпустил что-то несколько дней назад, что делает именно это (для скомпилированного java. На исходном уровне все, что вы действительно можете сделать, это форматирование трюков). It's part of a multi-project repository I'm working on. Скриншот: enter image description here

Как это работает: Использование ASM (Bytecode библиотека модификации) классы для чтения и раздели их отладочной информации. Затем вызывается основной класс, указанный в MANIFEST. Каждый тип, который упоминается в классе, добавляется в список и также посещается. Процесс происходит рекурсивно, пока в списке не будет указано все, на что ссылается. Большую часть времени, если вы используете библиотеки, будут классы, на которые никогда не ссылаются. Это не входит в список, и когда ASM перекомпилирует классы, они не включены.

При работе на нем он упал примерно с 700 кб до примерно 150 кб. Большая часть того, что было сброшено, было apache commons и некоторыми моими собственными файлами, которые не использовались сжимателем.

+0

Как вы можете определить, не используется ли класс во время компиляции? – shmosel

+0

Как моя программа работает, так это то, что она читает основной класс вашей банки. Затем он выполняет итерацию по типам полей. Типы добавляются в список. Затем методы повторяются.В список добавляются параметры, возвращаемые и локальные переменные. Каждый класс в списке посещается, и процесс повторяется до тех пор, пока в списке не будет указано все, на что ссылается. Затем банку перекомпилируют без отладочной информации, а классы, не входящие в список, исключаются из компиляции. –

+0

Таким образом, любая загрузка динамического класса, скорее всего, не удастся. – shmosel