Хорошо, получил минус, причина не описала мой пример, так что больше примеров:):
Я использую регулярное выражение и метод тестирования:
var isInteger = /^[0-9]\d*$/;
isInteger.test(123); //true
isInteger.test('123'); // true
isInteger.test('sdf'); //false
isInteger.test('123sdf'); //false
// If u want to avoid string value:
typeof testVal !== 'string' && isInteger.test(testValue);
Я попросил членов команды взглянуть на это глубже и получил некоторые интересные результаты. Spring в своей конфигурации по умолчанию очень не заинтересован в том, чтобы быть особенно консервативным в использовании памяти. Есть два основных аспекта, которые можно настроить для значительного улучшения:
OsgiBundleXmlApplicationContext
, которое можно переопределить, если вы расширите этот класс и переопределите customizeBeanFactory
метод. Мы сделали это так:
@Override
protected void customizeBeanFactory(DefaultListableBeanFactory beanFactory) {
super.customizeBeanFactory(beanFactory);
String cacheBeanMetadataSysProp = System.getProperty(CACHE_BEAN_METADATA, "true");
if (cacheBeanMetadataSysProp != null
&& cacheBeanMetadataSysProp.equalsIgnoreCase("false")) {
beanFactory.setCacheBeanMetadata(false);
} else if (cacheBeanMetadataSysProp != null
&& cacheBeanMetadataSysProp.equalsIgnoreCase("true")) {
beanFactory.setCacheBeanMetadata(true);
}
}
Установка для свойства "setCacheBeanMetadata" значения false
приводит к тому, что BeanDefinitions
(в основном программное зеркало вашей конфигурации на основе XML) удаляется после инициализация.
Вы можете сэкономить некоторую память с помощью BeanFactory - см. 3.8.1. BeanFactory или ApplicationContext :
Поскольку ApplicationContext включает в себя все функции BeanFactory, обычно рекомендуется использовать его вместо BeanFactory, за исключением нескольких ограниченных ситуаций, таких как в апплете, где потребление памяти может быть критичным, и несколько дополнительных килобайт могут иметь значение.
Я не знаю, как заставить Spring работать в "легком" режиме. Вы можете попробовать реализовать BeanFactoryPostProcessor и использовать его для удаления определенных bean-компонентов из контекста. Однако я не знаю, приведет ли это к внутренним ошибкам Spring.
Если вы используете Spring только при запуске, т.е. все bean-компоненты подключены, и тогда вам не нужен контекст приложения или логика выключения, вы можете начать ваше приложение, а затем удалите все ссылки на контекст приложения.
If your Spring configuration uses AOP and load time weaving, you could use aop.xml to regain some memory from AspectJ by using AspectJ type demotion feature that was introduced in 1.6.5.
<weaver options="-Xset:typeDemotion=true"/>
Analyse your heap, if you find many RefType objects, the trick above will help.