此选项在docker文件中有什么作用?
int main()
{
LFUCache<int>cache(3); // cache of size 3
cache.set(1, 1);
cache.set(2, 2);
cache.set(3, 3);
cache.set(2, 4);
rc = cache.get(1, r);
assert(rc);
assert(r == 1);
// evict old element, in this case 3
cache.set(4, 5);
rc = cache.get(3, r);
assert(!rc);
rc = cache.get(4, r);
assert(rc);
assert(r == 5);
LFUCache<int, string>cache2(2);
cache2.set(1, "one");
cache2.set(2, "two");
string val;
rc = cache2.get(1, val);
if (rc)
assert(val == "one");
else
assert(false);
cache2.set(3, "three"); // evict 2
rc = cache2.get(2, val);
assert(rc == false);
rc = cache2.get(3, val);
assert(rc);
assert(val == "three");
}
没有此参数的docker容器会启动吗? 我检查了one article并显示
启用内存支持
但是我仍然不清楚。
答案 0 :(得分:6)
从Java 10开始,此参数(默认情况下启用)用于使JVM在分配堆大小而不是主机配置时考虑容器内存限制。 / p>
这个选项是Java 8的背包: https://www.oracle.com/technetwork/java/javase/8u191-relnotes-5032181.html
示例:
如果您运行:
docker run **-m 1gb** openjdk:8u131 java -XshowSettings:vm -version
结果将是(在我的机器上为8gb的Ubuntu)
Max. Heap Size (Estimated): 1.68G
我为容器设置了内存限制,但它忽略并使用了主机配置(默认情况下,它使用总内存/ 4)
现在,如果我运行具有新功能的版本(上面的链接),则可以看到已考虑容器内存限制:
docker run **-m 1g** openjdk:8u191-jre-alpine java -XshowSettings:vm -version
结果(总内存/ 4):
VM settings:
Max. Heap Size (Estimated): 247.50M
Ergonomics Machine Class: server
Using VM: OpenJDK 64-Bit Server VM
openjdk version "1.8.0_191"
当时我正在编写openjdk:8图像的最新版本是222,因此您可以使用此版本,该版本具有背包功能。
有关更多信息:
说明此标志在Java 10中的用法:https://medium.com/adorsys/jvm-memory-settings-in-a-container-environment-64b0840e1d9e
在Java 8中使用此标志:https://blog.softwaremill.com/docker-support-in-new-java-8-finally-fd595df0ca54
答案 1 :(得分:3)
是的,容器将在没有-XX:+UseContainerSupport
的情况下启动。
XX:+ UseContainerSupport用于分配更大的内存。
要防止VM在容器中运行时调整最大堆大小,请设置-XX:-UseContainerSupport。
除此之外,https://www.eclipse.org/openj9/docs/xxusecontainersupport/可能会有所帮助。