Java进程内存大小和堆大小之间的差异

时间:2015-05-26 08:40:09

标签: java elasticsearch

有人可以告诉我 Java进程内存大小 Java堆大小的区别。实际上,我试图在一台机器上配置 Elasticsearch 1.5.2 实例。其文件

https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration.html#_environment_variables

说我可以为进程配置最大允许内存。我想这就是它的完成方式

export JAVA_OPTS=”-Xms256m -Xmx512m”

另外,我可以设置ES_HEAP_SIZE环境变量来调整最大堆大小(没有给出语义)。任何人都可以告诉我两者之间的区别以及如何配置(指定内存的语法)ES_HEAP_SIZE?

1 个答案:

答案 0 :(得分:2)

Heap是存储Java应用程序创建的对象的地方,这是垃圾收集发生的地方,也就是Java应用程序使用的内存。

JVM进程的总内存消耗包含的内容不仅仅是Java堆,这就是为什么Java进程内存大小将大于最大堆大小的原因。例子:

  • 线程堆栈
  • 由本机代码/库分配的内存

弹性搜索将使用ES_HEAP_SIZE变量将Xms和Xmx定义为此值

参见code => https://github.com/elastic/elasticsearch/blob/1d3a8ad36a5eec76a246656b098cf1f68b0989fa/bin/elasticsearch.in.sh#L11

因此,您需要在启动Elasticsearch

之前定义ES_HEAP_SIZE

您可以使用/etc/default/elasticsearch

export ES_HEAP_SIZE=8g中(在Debian上)执行此操作