我注意到Spring Boot应用程序不遵守通过Xmx选项设置的内存量.例如:java -Xss64m -Xmx64m -jar test.jar
我还在控制台上打印了启动时应用程序真正使用的内存量,并显示:最大内存:61M
long maxBytes = Runtime.getRuntime().maxMemory();
System.out.println("Max memory: " + maxBytes / 1024 / 1024 + "M");
Run Code Online (Sandbox Code Playgroud)
当我在访问任何网页之前打开Windows进程时,它显示+ -105M,那么Java如何说61M呢?
访问任何网页后,它从+ -125M到+ -135M.为什么会有这样的增加?它应该给出"java.lang.OutOfMemoryError:PermGen space"但不要增加这种方式.
如果许多应用程序可能在服务器上耗尽内存,这让我很担心.顺便说一句,我使用的是Java 1.8_45
我有一个问题,为什么非常简单的Spring Boot应用程序会分配100 MB RAM?如何减少内存使用量?
1)https://start.spring.io/生成具有“ Spring Web Starter”依赖项的演示程序
2)Dockerfile
FROM openjdk:8-jre-alpine
ADD /target/demo.jar demo.jar
EXPOSE 8080
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar /demo.jar"]
Run Code Online (Sandbox Code Playgroud)
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<finalName>demo</finalName>
</build>
Run Code Online (Sandbox Code Playgroud)
班级 …