Стек является частью памяти, которой можно управлять с помощью нескольких ключевых инструкций по ассемблеру, таких как 'поп' (удалите и возвратите значение от стека), и 'нажатие' (продвиньте значение к стеку), но также и вызов (назовите подпрограмму - это продвигает адрес возвращаться к стеку) и возврат (возврат из подпрограммы - это выталкивает адрес прочь стека и переходов к нему). Это - регион памяти ниже регистра указателя вершины стека, который может быть установлен по мере необходимости. Стек также используется для передающих аргументов подпрограммам, и также для сохранения значений в регистрах перед называнием подпрограмм.
"куча" является частью памяти, которая дана приложению операционной системой, обычно через syscall как malloc. На современных Ose эта память является рядом страниц, к которым только обработка вызовов имеет доступ.
размер стека определяется во времени выполнения и обычно не растет после запусков программы. В программе C стек должен быть достаточно большим для содержания каждой переменной, объявленной в каждой функции. "Куча" вырастет динамично по мере необходимости, но ОС в конечном счете выполняет вызов (это будет часто выращивать "кучу" больше, чем значение, которое требует malloc, так, чтобы по крайней мере некоторое будущее mallocs не должно было возвращаться к ядру для получения большей памяти. Это поведение часто настраиваемо)
, поскольку Вы выделили стек прежде, чем запустить программу, Вам никогда не нужно к malloc, прежде чем можно будет использовать стек, таким образом, это - небольшое преимущество там. На практике очень трудно предсказать то, что будет быстро и что будет медленным в современных операционных системах, которые имеют подсистемы виртуальной памяти, потому что то, как страницы реализованы и где они хранятся, является деталью реализации.
Исходные каталоги устанавливаются вне подключаемого модуля компилятора внутри элемента
Вы можете использовать подключаемый модуль build-helper-maven-plugin add-source и add-test-source , чтобы указать дополнительные исходные каталоги для ваших интеграционных тестов, но это не удалит существующие исходные каталоги.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>add-it-source</id>
<phase>pre-integration-test</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${basedir}/src/inttest/java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
Если вы привяжите цель add-test-source к запуску непосредственно перед целью testCompile , ваши интеграционные тесты будут включены. Обратите внимание, вы хотите, чтобы они выводились в целевые / тестовые классы, чтобы надежный плагин их обнаружил.
Чтобы обработать удаление стандартных тестовых источников, я написал небольшой плагин для изменения модели, чтобы удалить существующие местоположения testSource перед добавлением для интеграционных тестов.
После дополнительных исследований становится очевидным, что это на самом деле невозможно в Maven 2, как я Если хотите, для внедрения интеграционных тестов необходим какой-то хакер. Хотя вы можете добавлять дополнительные каталоги (как предлагает Rich Seller), нет плагина для удаления других источников или для компиляции каталога отдельно от основной компиляции.
Лучшее решение, которое я нашел для добавления интеграционных тестов, - это сначала использовать подключаемый модуль build helper для добавления каталога inttest, который будет скомпилирован как тесты.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>add-test-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>src/inttest/java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
Теперь, чтобы заставить интеграционные тесты выполняться на этапе интеграции-тестирования, вам нужно использовать исключаемые и включаемые для управления при их запуске, как показано ниже . Это позволяет использовать любые пользовательские параметры, которые могут вам понадобиться (в моем случае агент добавляется через argline).
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/itest/**</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>inttests</id>
<goals>
<goal>test</goal>
</goals>
<phase>integration-test</phase>
<configuration>
<excludes><exclude>none</exclude></excludes>
<includes>
<include>**/itest/**/*Test.java</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>