пружинная аннотация -конфигурация на основе -потребление памяти слишком велико?

Когда я заметил безумно высокий уровень использования ОЗУ в моем клиентском приложении (Swing -на основе ), я начал изучать это, и похоже, что это как-то связано с конфигурацией Spring на основе аннотаций -. Как вы увидите в моих правках ниже, я понял, что это происходит только на 64 -Bit JVM.

См. следующий тестовый код:

xml -конфигурация на основе

<beans....>
     <bean id="xmlConfigTest" class="at.test.XmlConfigTest" />
</beans>

public class XmlConfigTest extends JFrame {
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("config/applicationContext.xml");
        XmlConfigTest frame = (XmlConfigTest) ctx.getBean("xmlConfigTest");
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

Использует около 32 МБ памяти, что мне кажется нормальным.

Теперь то же самое с конфигурацией на основе аннотаций :

@Service
public class AnnotationConfigTestFrame extends JFrame {
    public static void main(String[] args) throws InterruptedException {
        ApplicationContext ctx = new AnnotationConfigApplicationContext("at.test");

        AnnotationConfigTestFrame frame = (AnnotationConfigTestFrame) ctx
           .getBean("annotationConfigTestFrame");
       frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
       frame.setVisible(true);
    }
}

. Мало того, что открытие кадра занимает заметно больше времени, так еще и потребление памяти -взлетает до 160 МБ памяти при запуске, а затем выравнивается примерно до 152 МБ, что мне кажется очень высоким. И помните, это только самый простой случай, клиентское приложение, которое я разрабатываю, уже потребляет более 400 МБ, что слишком много для старых машин.

У кого-нибудь есть объяснение такому поведению? Я не понимаю..

(Кстати, здесь используется 3.1.1.RELEASE.)

редактировать* Как было предложено axtavt, я также попытался построить AnnotationConfigApplicationContext непосредственно с тестовым классом -в качестве аргумента, так что сканирование classpath -не требуется. К сожалению, ничего не изменилось в потреблении памяти.

редактирование 2 удалено, см. редактирование 3

редактировать 3 Теперь я протестировал на той же машине (Windows 7 64 -Bit )с 32 -Bit и 64 -Bit JVM и тестовыми -программами выше. Вот результаты:

конфигурация на основе xml:

32-Bit JVM: 16MB
64-Bit JVM: 31MB

конфигурация на основе аннотаций:

32-Bit JVM: 17MB
64-Bit JVM: 160MB

Итак, на 32 -Bit JVM обе программы близки,что в значительной степени то, что я ожидал. Однако на 64 -бит все по-другому. Даже первая программа использует в два раза больше памяти на 64 -Bit, что уже кажется перебором. Тем не менее, это не имеет ничего против второй программы, которая использует почти в 10 раз больше памяти на 64 -бит.

редактировать 4 Теперь протестировано и под Ubuntu -> тот же эффект. Однако до сих пор не знаю, почему это происходит. Это действительно нарушение условий сделки для меня

13
задан Mario B 23 July 2012 в 07:57
поделиться