java - Java进程内存大小和堆大小的区别

标签 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?

最佳答案

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

JVM 进程的总内存消耗不仅仅包括 Java 堆,这就是为什么您的 Java 进程内存大小将大于最大堆大小。示例:

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

Elasticsearch 将使用 ES_HEAP_SIZE 变量将 Xms 和 Xmx 定义为此值

查看代码 => https://github.com/elastic/elasticsearch/blob/1d3a8ad36a5eec76a246656b098cf1f68b0989fa/bin/elasticsearch.in.sh#L11

因此,在启动 Elasticsearch 之前,您需要定义 ES_HEAP_SIZE

例如,您可以在 /etc/default/elasticsearch 中执行此操作(在 Debian 上),使用 export ES_HEAP_SIZE=8g

关于java - Java进程内存大小和堆大小的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30453625/

相关文章:

java - 将 Pusher 与 java 和 laravel 一起使用

ruby-on-rails - ElasticSearch删除查询

java - 使用AWS开发工具包v2将DynamoDB转换为Elasticsearch?

javafx 8 兼容性问题 - FXML 静态字段

java - 在 Java 中根据 inOrder 和 preOrder 数据构建二叉树

java - 如何使用数组在 Java 的一行中创建多个字符串和整数值?

java - Spring AOP代理使用

firebase - 如何从Firestore获取最近一小时更新的文档?

elasticsearch - 使用固定参数在每个字段中搜索

search - 使用ElasticSearch River搜索CouchDB