1. Создайте экземпляр класса без использования нового ключевого слова.
Когда вы создаете экземпляр класса с использованием ключевого слова new, автоматически вызываются все конструкторы в цепочке конструкторов. Но если объект реализует интерфейс Cloneable, мы можем вызвать его метод clone(). Метод clone() не вызывает никаких конструкторов классов. Если вы создаете объект, используя шаблон Factory, очень просто использовать метод clone() для создания нового экземпляра объекта.
2. Не инициализируйте переменные повторно
По умолчанию Java инициализирует переменные определенными значениями при вызове конструктора класса. Это следует особенно отметить, когда класс является производным от другого класса, поскольку при создании объекта с использованием ключевого слова new все конструкторы в цепочке конструкторов будут вызываться автоматически.
3. Используйте исключения с осторожностью
Исключения вредны для производительности. Вызов исключения сначала создает новый объект. Конструктор интерфейса Throwable вызывает собственный метод fillInStackTrace(). Метод fillInStackTrace() проверяет стек и собирает информацию о трассировке вызовов. Всякий раз, когда генерируется исключение, JVM должна корректировать стек вызовов, поскольку во время обработки создается новый объект. Исключения следует использовать только для обработки ошибок и не следует использовать для управления ходом программы.
Обратите внимание на следующие два момента. (1) Избегайте использования операторов try/catch для логики приложения. Если его можно обработать с помощью логических операторов, таких как if и while, старайтесь как можно чаще не использовать операторы try/catch. (2) Повторно используйте исключения, когда необходима обработка исключений. , максимально повторно используйте существующие объекты исключений. Потому что при обработке исключений генерация объекта исключения занимает большую часть времени.
4. Нить
Потоки могут полностью использовать системные ресурсы. Пока другие потоки ожидают чтения и записи на жесткий диск или в сеть, программа может продолжать обработку и работу. Однако неправильное использование потоков также повлияет на производительность программы. Пример: правильно используйте класс Vector. Вектор в основном используется для сохранения различных типов объектов (в том числе объектов одного типа и разных типов). Вектор обеспечивает функции защиты потокобезопасности. Хотя многие методы в классе Vector синхронизированы. Но если вы подтвердили, что ваше приложение однопоточное, синхронизация этих методов совершенно не нужна. Кроме того, при поиске различных объектов, хранящихся в Vector, на сопоставление типов часто уходит много времени. Когда все эти объекты относятся к одному типу, эти совпадения совершенно не нужны. Поэтому необходимо разработать однопоточный класс или коллекцию, сохраняющую объекты определенного типа, чтобы заменить класс Vector.
Что касается операций с потоками, обратите внимание: (1) Не допускайте чрезмерной синхронизации. Если программа является однопоточной, не используйте синхронизацию. (2) Синхронизируйте методы вместо синхронизации всего сегмента кода. Синхронизация метода обеспечивает более высокую производительность, чем синхронизация всего сегмента кода.
5. Попробуйте использовать локальные переменные
Параметры, передаваемые при вызове метода, и временные переменные, созданные во время вызова, сохраняются в стеке (Stack), что происходит быстрее.
6. Используйте статические переменные как можно чаще
Пусть все экземпляры будут использовать эту переменную.
7. Попробуйте указать финальный модификатор класса
Классы с модификатором Final не являются производными. java.lang.String, указание Final для класса String не позволяет людям переопределять метод length(). Кроме того, если класс обозначен как окончательный, все методы класса будут окончательными. Компилятор Java будет искать возможности встроить все конечные методы, что может повысить производительность в среднем на 50%.
8. Создание объекта и выделение ему разумного пространства и размера.
При программировании на JAVA часто создается большое количество объектов (или экземпляров). Поскольку системе требуется время не только для создания объектов, но также может потребоваться время для сбора мусора и последующей обработки этих объектов. Следовательно, создание слишком большого количества объектов сильно повлияет на производительность программы, кроме того, многие классы в JAVA имеют размеры выделения пространства по умолчанию; Для класса StringBuffer размер выделенного пространства по умолчанию составляет 16 символов. Если размер пространства StringBuffer, используемого в программе, не составляет 16 символов, то необходимо провести корректную инициализацию.
9. Используйте неблокирующий ввод-вывод
Более низкие версии JDK не поддерживают неблокирующий API ввода-вывода. Чтобы избежать блокировки ввода-вывода, некоторые приложения создают большое количество потоков (в лучших случаях используется пул буферов). Этот метод можно увидеть во многих приложениях, которые должны поддерживать параллельные потоки ввода-вывода, таких как веб-серверы. В JDK 1.4 появилась неблокирующая библиотека ввода-вывода (java.nio).
Эта статья взята из блога CSDN. При перепечатке указывайте источник: http://blog.csdn.net/Foxalien/archive/2009/12/18/5029659.aspx.