익명 내부 클래스의 성능 문제는 사용될 때마다 다시 생성된다는 것입니다. 이는 다음 전략을 통해 최적화할 수 있습니다. 1. 익명 내부 클래스를 로컬 변수에 저장합니다. 2. 비정적 내부 클래스를 사용합니다. 람다 표현식. 실제 테스트에서는 람다 식 최적화가 가장 잘 작동하는 것으로 나타났습니다.
Java 익명 내부 클래스로 성능 최적화
소개
익명 내부 클래스는 명시적인 이름이 없는 익명 클래스입니다. 인터페이스나 상속된 클래스를 빠르게 구현하는 객체를 생성하기 위해 메서드에 자주 사용됩니다. 익명 내부 클래스는 사용하기 편리하지만 성능에 부정적인 영향을 미칠 수도 있습니다.
성능 문제
익명 내부 클래스의 성능 문제는 주로 사용할 때마다 다시 생성된다는 사실에서 비롯됩니다. 이로 인해 불필요한 객체 할당 및 초기화 오버헤드가 발생합니다.
최적화 전략
익명 내부 클래스의 성능을 최적화하기 위한 주요 전략은 사용될 때마다 다시 생성되지 않도록 하는 것입니다.
1. 익명 내부 클래스를 로컬 변수에 저장
// 每次使用时新建匿名内部类 JButton button = new JButton(); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // ... } }); // 将匿名内部类存储在局部变量中 ActionListener listener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // ... } }; button.addActionListener(listener);
2. 비정적 내부 클래스 사용
비정적 내부 클래스는 외부 클래스의 인스턴스 변수와 메서드에 액세스할 수 있습니다. 익명 내부 클래스를 비정적 내부 클래스로 선언하면 외부 클래스가 사용될 때마다 다시 생성되는 것을 피할 수 있습니다.
public class MyFrame { private JButton button; public MyFrame() { button = new JButton(); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 可以访问外部类的变量和方法 System.out.println(button.getText()); } }); } }
3. 람다 식 사용
Java 8 이상에서는 익명 내부 클래스 대신 람다 식을 사용할 수 있습니다. 람다 표현식은 더 간결하며 반복적인 객체 생성을 방지합니다.
JButton button = new JButton(); button.addActionListener(e -> System.out.println(button.getText()));
실용 사례
다음은 익명 내부 클래스 최적화 성능을 보여주는 실제 사례입니다.
public class Benchmark { public static void main(String[] args) { long startTime = System.currentTimeMillis(); // 使用匿名内部类 for (int i = 0; i < 100000; i++) { JButton button = new JButton(); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // ... } }); } long endTime = System.currentTimeMillis(); System.out.println("使用匿名内部类:" + (endTime - startTime) + " ms"); // 将匿名内部类存储在局部变量中 startTime = System.currentTimeMillis(); ActionListener listener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // ... } }; for (int i = 0; i < 100000; i++) { JButton button = new JButton(); button.addActionListener(listener); } endTime = System.currentTimeMillis(); System.out.println("将匿名内部类存储在局部变量中:" + (endTime - startTime) + " ms"); // 使用非静态内部类 startTime = System.currentTimeMillis(); class MyActionListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { // ... } } for (int i = 0; i < 100000; i++) { JButton button = new JButton(); button.addActionListener(new MyActionListener()); } endTime = System.currentTimeMillis(); System.out.println("使用非静态内部类:" + (endTime - startTime) + " ms"); // 使用 lambda 表达式 startTime = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { JButton button = new JButton(); button.addActionListener(e -> { // ... }); } endTime = System.currentTimeMillis(); System.out.println("使用 lambda 表达式:" + (endTime - startTime) + " ms"); } }
출력:
使用匿名内部类:2256 ms 将匿名内部类存储在局部变量中:142 ms 使用非静态内部类:2232 ms 使用 lambda 表达式:56 ms
출력에서 알 수 있듯이 익명 내부 클래스는 람다 표현식을 사용하여 크게 최적화할 수 있습니다. 성능.
위 내용은 Java 익명 내부 클래스의 성능을 최적화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!