例子:-Xmx=512M -Xms=64M

Java堆可以通过Xmx和Xms两个参数指定最大内存512M,最小内存64M。以下为两个常见疑问:

1. 既然都指定了 Xmx 为什么还要设置 Xms 呢?

Xms 是必不可少的配置,Xms 是 GC 算法进行垃圾收集评判标准中一个必不可少的元素。另外-Xms和-Xmx设置相同时可避免Java堆自动扩展。

2. Xmx 指定的最大 Java 堆内存是在 Java 进程启动的时候直接一次性分配还是随着堆内存消耗不断增加直到 Xmx?

Xmx的内存是在Java进程启动的时候直接分配(预留)的,而不是不断增加的。因为大部分 GC 算法依赖于被分配为连续的内存块的堆,因此不能在堆需要扩大时再分配更多本机内存。所有堆内存必须预先保留。

对于例子中的Xmx=512M是直接预留出512M的内存空间,但启动时的Java进程并不一定全部使用,但512M是它的“领地”。

注意:

1. 对于问题2的提问其实有错误,Xmx指定内存并不是真正的分配,而是一种保留,内存保留 != 内存分配。当本机内存被保留时,无法使用物理内存或其他存储器作为备用内存。尽管保留地址空间块不会耗尽物理资源,但会阻止内存被用于其他用途。由保留从未使用的内存导致的泄漏与泄漏分配的内存一样严重。

相关博文:

1.【原创】Java进程的内存使用情况

2.【原创】Java进程内存消耗情况

3.【原创】修改WorkShop最大内存分配

转载于:https://www.cnblogs.com/orientsun/archive/2012/07/25/2608538.html

深入理解Java堆内存分配策略(Xmx和Xms)相关推荐

  1. Java堆内存分配与回收策略

    java主要在堆上分配内存,而Java堆又分为新生代(YoungGen)和老年代(OldGen)两个部分,新生代又再分为Eden区和Survivor区两部分,本文根据java堆的划分,描述hotspo ...

  2. Java虚拟机内存分配策略

    1.JVM内存分配分区 Java的内存简单分为堆内存和非堆内存 其中堆内存又可以分为新生代和老年代 新生代分为1个Eden区和2个Survivor区,如下图: 2.JVM垃圾回收种类 分为2种,Min ...

  3. java虚拟机内存比例,【Java虚拟机】堆内存分配策略总结

    1 一般情况 对象出生在Eden区. 第一次MinorGC之后仍然存活,并且能被Survivor容纳,则被移动到Survivor空间中,并将年龄设为1. 对象在Survivor区中每熬过一次Minor ...

  4. Java虚拟机-内存分配策略

    Java技术体系中所提倡的自动内存管理策略最终可以归结为自动化地解决了两个问题:给对象分配内存以及回收分配给对象的内存: 几条普遍的分配规则: 1.对象优先在Eden区分配 年轻代分为三个区:1个Ed ...

  5. Java的内存分配策略有哪些_Java的内存分配策略

    简单来说,对象内存分配主要是在堆中分配.但是分配的规则并不是固定的,取决于使用的收集器组合以及JVM内存相关参数的设定 以下介绍几条基本规则(使用的ParNew+Serial Old收集器组合): 一 ...

  6. JAVA虚拟机内存分配原则 (转

    Java把内存划分成两种:一种是栈内存,一种是堆内存. 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配. 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间, ...

  7. 理解Java heap内存和Java direct内存

    Java Heap内存 Java应用运行在Java运行环境(JVM),Java heap内存是JVM为java应用分配的内存.JVM被设计就是为了从机器上隔离应用.通常讨论Java内存,就是指Java ...

  8. 《深入理解Java虚拟机》-----第3章 垃圾收集器与内存分配策略

    Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来. 3.1 概述 说起垃圾收集(Garbage Collection,G ...

  9. 《深入理解java虚拟机》笔记2——GC算法与内存分配策略

    说起垃圾收集(Garbage Collection, GC),想必大家都不陌生,它是JVM实现里非常重要的一环,JVM成熟的内存动态分配与回收技术使Java(当然还有其他运行在JVM上的语言,如Sca ...

  10. 【深入理解Java虚拟机学习笔记】第三章 垃圾收集器与内存分配策略

    最近想好好复习一下java虚拟机,我想通过深读 [理解Java虚拟机 jvm 高级特性与最佳实践] (作者 周志明) 并且通过写一些博客总结来将该书读薄读透,这里文章内容仅仅是个人阅读后简短总结,加强 ...

最新文章

  1. OpenCV中minAreaRect()最小外接矩形 cvBoxPoints()计算矩形顶点 RotatedRect和CvBox2D详解
  2. 以前不知道的,现在知道了(微机原理)
  3. asp.net的JSONHelper 类
  4. 【人物】大众点评张涛:未来2-3年是O2O红利期和飞速增长期
  5. C++STL常用排序算法
  6. ClickedOnce部署方法
  7. Windows编程—杀死指定路径程序文件的进程
  8. 二叉树先序、中序和后序遍历
  9. 你以为你懂MySQL索引?阿里的面试官:你还太嫩!
  10. golang的配置文件操作:viper
  11. mybatis的mysql参数传递_Mybatis参数传递及返回类型
  12. JDBC:java数据库连接对象
  13. Oracle学习笔记
  14. android layout.inflater,LayoutInflater.inflate详解
  15. 近代光学系统设计概论学习笔记-第四章双胶合和双分离消色差物镜
  16. 什么是进程、线程、协程
  17. 物联网行业中Mqtt的使用
  18. 有钱就放余额宝的人,这个习惯恐怕要改一改!
  19. vscode写php高亮,写了一个Hy的vscode语法高亮插件
  20. java rsa 公钥格式_JAVA,NET RSA密钥格式转换

热门文章

  1. kubernetes service是什么
  2. java csrf 跨域_使用javascript跨域请求与CSRF
  3. 单片机4层电梯设计c语言,详解基于单片机的四层电梯控制系统的设计与实现,Proteus仿真和程序代码...
  4. java servlet JSP 区别_servlet和jsp的区别
  5. chown: 无效的用户: hadoop-3.1.4_Ubuntu 21.04 用户主目录权限将14年来首次变更及新功能预览...
  6. 设计模式之GOF23代理模式02
  7. oracle open 101,解决oracle数据库ORA-65101 container database set up incorrectly
  8. Kubernetes(K8s) 1.14.3常用操作命令
  9. Spring boot 拦截器(HandlerInterceptor) 与 自定义资源映射虚拟路径,WebMvcConfigurer
  10. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_17-CMS前端工程创建-单页面应用介绍...