很多时候,我们运行的Java程序并没有设定堆的内存限制参数,正常来说可以有两个参数来指定初始分配的堆内存和堆内存的最大值,分别为:

-Xmx 用来设置你的应用程序(不是JVM)能够使用的最大内存数(相当于 -XX:MaxHeapSize)。

-Xms 用来设置程序初始化的时候内存栈的大小(相当于 -XX:MaxNewSize)。

另外还有一个 -Xss 规定了每个线程堆栈的大小。一般情况下256K是足够了,该值影响了此进程中并发线程数大小(相当于 -XX:ThreadStackSize)。

有同学要问了,如果我没有设置这些参数,默认值是多少呢?

一般来说,就JDK8而言:

-Xmx 的默认值为你当前机器最大内存的 1/4

-Xms 的默认值为你当前机器最大内存的 1/64 (这个值要反复测试并通过监控调整一个合适的值,是因为当Heap不够用时,会发生内存抖动,影响程序运行稳定性)

-Xss 的默认值好像和平台有关(不同平台默认值不同),我们最常用的Linux64位服务器默认值好像是1024k(这个我不确定)。在相同物理内存下,减小这个值能生成更多的线程,这个参数在高并发的情况下对性能影响比较明显,需要花比较长的时间进行严格的测试来定义一个合适的值(如果栈不深128k够用的,大的应用建议使用256k)。

对于堆的初始值和最大值,可以使用如下命令查看:

在Windows里:

java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"

在Linux里:

java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'

例入下面是一个启动Java程序的示例:

java

-Xms64m #JVM启动时的初始堆大小

-Xmx128m #最大堆大小

-Xmn64m #年轻代的大小,其余的空间是老年代

-XX:MaxMetaspaceSize=128m #

-XX:CompressedClassSpaceSize=64m #使用 -XX:CompressedClassSpaceSize 设置为压缩类空间保留的最大内存。

-Xss256k #线程

-XX:InitialCodeCacheSize=4m #

-XX:ReservedCodeCacheSize=8m # 这是由 JIT(即时)编译器编译为本地代码的本机代码(如JNI)或 Java 方法的空间

-XX:MaxDirectMemorySize=16m

-jar app.jar

这有一篇比较详细的参数说明:https://www.cnblogs.com/syuf/p/10183683.html

另外再给一个文章参考:https://www.cnblogs.com/jpfss/p/9753215.html

(END)

java 64位 默认分配内存大小_查看你机器中Java程序堆内存的默认初始大小和最大大小...相关推荐

  1. 2020 idea 查看内存消耗_查看运行时某个java对象占用JVM大小及通过idea查看java的内存占用情况...

    一.如果想看运行时某个java对象占用JVM内存大小,可以先将对象转换成字节类型,然后计算: List bizGroupRelatedEventInfos = bizEventVersionMappe ...

  2. java 内存跟踪_详解JVM中的本机内存跟踪

    1.概述 有没有想过为什么Java应用程序通过众所周知的-Xms和-Xmx调优标志消耗的内存比指定数量多得多?出于各种原因和可能的优化,JVM可以分配额外的本机内存.这些额外的分配最终会使消耗的内存超 ...

  3. win10系统64位安装python什么版本_如何在win10中安装Python

    本文主要讲解win10如何安装python,希望对初学的小伙伴有帮助.环境:win 10 64位操作系统1.python下载https://www.python.org/downloads/2.x和3 ...

  4. 查询mysql数据库表占用空间大小_查看 MySQL 数据库中每个表占用的空间大小-阿里云开发者社区...

    如果想知道MySQL数据库中每个表占用的空间.表记录的行数的话,可以打开MySQL的 information_schema 数据库.在该库中有一个 TABLES 表,这个表主要字段分别是: TABLE ...

  5. mysql 索引空间大小_查看数据库表中容量大小,表有多少记录,占多少空间以及索引的大小,以及未使用空间...

    直接在sqlserver查询窗执行就OK了,也是网上看到的,对日常管理数据库工作者来说也蛮有用的,可以及时的清理冗余的数据,缓解数据库服务器的压力. Create Table #TableSpaceI ...

  6. Windows 64 位 mysql 5.7以上版本包解压中没有data目录和my-default.ini和my.ini文件以及服务无法启动的解决办法以及修改初始密码的方法

    Windows 64 位 mysql 5.7以上版本包解压中没有data目录和my-default.ini和my.ini文件以及服务无法启动的解决办法以及修改初始密码的方法 参考文章: (1)Wind ...

  7. mysql 日志大小_查看mysql日志文件大小和数据库大小

    查看数据库日志文件的大小 show binary logs; 删除bin-log(删除mysql-bin.00000*小于mysql-bin.000003所有日志) purge binary logs ...

  8. linux 程序占内存,linux下,一个运行中的程序,究竟占用了多少内存

    1. 在linux下,查看一个运行中的程序, 占用了多少内存, 通常的命令有php (1). ps aux:html 其中  VSZ(或VSS)列 表示,程序占用了多少虚拟内存.linux RSS列 ...

  9. java 64位 默认分配内存大小_JVM默认内存大小

    堆(Heap)和非堆(Non-heap)内存 按照官方的说法:"Java虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配.堆是在Java虚拟机启动时创建的." ...

最新文章

  1. ThreadLocal的正确使用与原理
  2. 统计的一个小题目python实现
  3. 快速构建Windows 8风格应用13-SearchContract构建
  4. python内置函数表_python学习系列--python内置函数(一)
  5. 完全相同的4个小矩形如图所示放置_短线投资,遇到“矩形突破”,斩钉截铁满仓干!...
  6. mysql57数据库命令_MySQL 5.7 mysql command line client 使用命令详解
  7. 第七章:【UCHome二次开发】模板语法说明
  8. apue.h头文件内容
  9. linux安装yum
  10. 【观察】华为:给园区安防加点“智慧”
  11. 一个屌丝程序猿的人生(六十一)
  12. 如何使用命令提示符运行java程序
  13. 面试刷题LeetCode经典100道
  14. vps怎么做文件服务器,vps搭建文件服务器
  15. php中单引号双引号那点事---顺便说说把php变量的值传给js
  16. 向下兼容性格什么意思_恭喜你,被向下兼容了|有启发
  17. 小心你的眼睛—绝妙的视觉错觉图片集锦
  18. Photoshop实例教程:打造Apple光芒…
  19. linux上有趣的项目,介绍几款有趣的开源项目
  20. 需求-MTK平台降低闪光灯电流

热门文章

  1. goland 远程调试go_手把手教你学Go语言,基础环境配置和Hello World
  2. Python入门100题 | 第034题
  3. mac下dashboard小控件开发实例(附源码)
  4. python的des和3des加解密
  5. 【项目管理】敏捷开发项目管理流程
  6. 【NLP】Transformer详解
  7. 十分钟学习自然语言处理概述
  8. 华为,为什么让全世界都感到害怕?
  9. Spring Cloud Alibaba - 23 Gateway初体验
  10. jvm性能调优实战 - 25模拟在Young GC过后因为放入下Survivor区域直接进入老年代