Typical spring-boot application - single jar file.
Size of the file is about 10+ megabytes (it contains another jars, classes and resources inside).
What about memory usage for this app?
I created sample with only one web @Controller and two webmethods:
first - reports memory usage,
second - runs Java Garbage Collector.
Memory usage after start (http://localhost:8080/test/mem):
max: 1,875,378,176 bytes
total: 355,729,408 bytes
free: 178,138,976 bytes
used: 177,590,432 bytes
and after GC (http://localhost:8080/test/rungc):
max: 1,875,378,176 bytes
total: 355,729,408 bytes
free: 331,821,496 bytes
used: 23,907,912 bytes
With spring-boot we have a lot of available memory)
package sb;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("test")
public class Controller {
@RequestMapping(value = "mem", produces = "text/plain")
public String mem() {
long max = Runtime.getRuntime().maxMemory();
long total = Runtime.getRuntime().totalMemory();
long free = Runtime.getRuntime().freeMemory();
long used = total - free;
return String.format("Memory:\n" +
"max: %,d bytes\n" +
"total: %,d bytes\n" +
"free: %,d bytes\n" +
"used: %,d bytes\n",
max, total, free, used);
}
@RequestMapping("rungc")
public String rungc() {
Runtime.getRuntime().gc();
return "Run GC";
}
}
package sb;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@EnableAutoConfiguration
@Configuration
@ComponentScan
public class Application {
public static void main(String[] args) throws Throwable {
new SpringApplication(Application.class).run();
}
}
buildscript {
repositories {
maven { url "http://repo.spring.io/libs-snapshot" }
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:0.5.0.M6")
}
}
apply plugin: "java"
apply plugin: "spring-boot"
buildDir = "out"
jar {
baseName = "sb-mem"
version = "0.1"
}
repositories {
mavenCentral()
maven { url "http://repo.spring.io/libs-snapshot" }
}
dependencies {
def springBootVersion = '0.5.0.M6'
compile("org.springframework.boot:spring-boot-starter-web:$springBootVersion")
}