在运行java桌面应用程序的时候,有时候会因为jvm内存太小,从而内存溢出,程序崩溃。

可是通过修改 eclipse.ini 中的参数,来实现修改jvm的内存大小。

-vmargs

-Xms128M

-Xmx512M

-XX:PermSize=64M

-XX:MaxPermSize=128M

这里有几个问题:

1. 各个参数的含义什么?

2. 为什么有的机器我将-Xmx和-XX:MaxPermSize都设置为512M之后Eclipse可以启动,而有些机器无法启动?

3. 为何将上面的参数写入到eclipse.ini文件Eclipse没有执行对应的设置?

1. 各个参数的含义什么?

参数中-vmargs的意思是设置JVM参数,所以后面的其实都是JVM的参数了,我们首先了解一下JVM内存管理的机制,然后再解释每个参数代表的含义。

堆(Heap)和非堆(Non-heap)内存

按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。

堆内存分配

JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。

非堆内存分配

JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。

JVM内存限制(最大值)

首先JVM内存限制于实际的最大物理内存(废话!呵呵),假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制了。

2. 为什么有的机器我将-Xmx和-XX:MaxPermSize都设置为512M之后Eclipse可以启动,而有些机器无法启动?

通过上面对JVM内存管理的介绍我们已经了解到JVM内存包含两种:堆内存和非堆内存,另外JVM最大内存首先取决于实际的物理内存和操作系统。所以说设置VM参数导致程序无法启动主要有以下几种原因:

1) 参数中-Xms的值大于-Xmx,或者-XX:PermSize的值大于-XX:MaxPermSize;

2) -Xmx的值和-XX:MaxPermSize的总和超过了JVM内存的最大限制,比如当前操作系统最大内存限制,或者实际的物理内存等等。说到实际物理内存这里需要说明一点的是,如果你的内存是1024MB,但实际系统中用到的并不可能是1024MB,因为有一部分被硬件占用了。

3. 为何将上面的参数写入到eclipse.ini文件Eclipse没有执行对应的设置?

那为什么同样的参数在快捷方式或者命令行中有效而在eclipse.ini文件中是无效的呢?这是因为我们没有遵守eclipse.ini文件的设置规则:

参数形如“项 值”这种形式,中间有空格的需要换行书写,如果值中有空格的需要用双引号包括起来。比如我们使用-vm C:\Java\jre1.6.0\bin\javaw.exe参数设置虚拟机,在eclipse.ini文件中要写成这样:

1 -vm

2 C:\Java\jre1.6.0\bin\javaw.exe

按照上面所说的,最后参数在eclipse.ini中可以写成这个样子:

3 -vmargs

4 -Xms128M

5 -Xmx512M

6 -XX:PermSize=64M

7 -XX:MaxPermSize=128M

实际运行的结果可以通过Eclipse中“Help”-“About Eclipse SDK”窗口里面的“Configuration Details”按钮进行查看。

另外需要说明的是,Eclipse压缩包中自带的eclipse.ini文件内容是这样的:

8 -showsplash

9 org.eclipse.platform

10 --launcher.XXMaxPermSize

11 256m

12 -vmargs

13 -Xms40m

14 -Xmx256m

其中–launcher.XXMaxPermSize(注意最前面是两个连接线)跟-XX:MaxPermSize参数的含义基本是一样的,我觉得唯一的区别就是前者是eclipse.exe启动的时候设置的参数,而后者是eclipse所使用的JVM中的参数。其实二者设置一个就可以了,所以这里可以把–launcher.XXMaxPermSize和下一行使用#注释掉。

同样,通过eclipse设置来修改此参数:

Window->Preferences->Java->Installed JREs 双击jre,

java内存修改_修改java虚拟机启动内存大小相关推荐

  1. java jmap 分析_利用java虚拟机的工具jmap分析java内存情况

    有时候碰到性能问题,比如一个java application出现out of memory,出现内存泄漏的情况,再去修改bug可能会变得异常复杂,利用工具去分析整个java application 内 ...

  2. java jvm内存地址_深入Java虚拟机——JVM内存详解

    在C++中,程序员拥有每一个对象的所有权,但与此同时还肩负着释放对象内存空间的责任:而Java由于有了虚拟机的帮助,程序员拥有对象的所有权的同时不再需要释放对象的内存空间.由于是JVM自动进行对象内存 ...

  3. java web源代码_检测Java Web应用程序而无需修改其源代码

    java web源代码 与其他系统进行交互时,大多数Java Web应用程序都使用标准Java接口. 诸如Web页面或REST服务器之类的基于HTTP的服务是使用接口javax.servlet.Ser ...

  4. java天地劫_[修改]手机版回合制RPG游戏《殇界痕》吾爱版首发及PC修改方法

    本帖最后由 104952551 于 2018-10-2 20:10 编辑 游戏类型: RPG 角色扮演 版本信息: 正式版 V1.0.7 制作工具: RPG Maker MV 游戏时长: 8 小时 安 ...

  5. java 二维数组内存溢出_模拟Java内存溢出

    本文通过修改虚拟机启动参数,来剖析常见的java内存溢出异常(基于jdk1.8). 修改虚拟机启动参数 这里我们使用的是IDEA集成开发环境,选择Run/Debug Configurations 然后 ...

  6. java内存漏洞_处理Java程序中的内存漏洞

    Java 程序中也有内存漏洞?当然有.与流行的观念相反,在 Java 编程中,内存治理仍然是需要考虑的问题.在本文中,您将了解到什么会导致内存漏洞以及何时应该关注这些漏洞.您还有机会实践一下在您自己的 ...

  7. linux启动java jar文件_推荐:Linux启动Java程序jar包Shell脚本

    #!/bin/sh# 该脚本为Linux下启动java程序的脚本## author: luandy# date: 2021/1/15## 特别注意:# 该脚本使用系统kill命令来强制终止指定的jav ...

  8. java -jar 停止_推荐:Linux启动Java程序jar包Shell脚本

    每次启动Java程序jar包的时候,难道你还在手敲java -jar xxserver.jar--?边敲边想着都需要追加哪些参数? 今天就推荐给大家一个几乎通用的Shell脚本,它支持Java程序Ja ...

  9. C语言与JAVA内存管理_深入理解C语言内存管理

    之前在学Java的时候对于Java虚拟机中的内存分布有一定的了解,但是最近在看一些C,发现居然自己对于C语言的内存分配了解的太少. 问题不能拖,我这就来学习一下吧,争取一次搞定. 在任何程序设计环境及 ...

最新文章

  1. 观点丨麦肯锡:怎么理解“人工智能最大挑战与机会”
  2. .NET 程序测试 Java 项目 log4j2 是否存在远程代码执行漏洞
  3. Angular 5.0 学习2:Angular 5.0 开发环境的搭建和新建第一个ng5项目
  4. python xmlns 解析_使用python读取标记中包含xmlns的XML文件
  5. [转载]Java Socket实战之二 多线程通信
  6. 关于ibatis中sqlMap配置文件中使用到,的处理
  7. android 音效,音效  |  Android 开源项目  |  Android Open Source Project
  8. IT行业技术部门人员架构设计
  9. 数据元素之间的逻辑关系的整体称为数据的逻辑结构
  10. Web开发技术架构图
  11. 浪涌测试仪的工作原理
  12. 规模化敏捷转型中,哪些问题会被经常问到?
  13. win10+Ubuntu20.4双系统安装详细教程(包含bios设置)
  14. 论文笔记(五)FWENet:基于SAR图像的洪水水体提取深度卷积神经网络(CVPR)
  15. 信创云领未来,华云数据打造科技强国新基座
  16. Lyft押重注于苹果编程语言Swift
  17. react native的WebView报错: Unable to open URL:****
  18. 算法研究NO7.数字滤波
  19. 【微信小程序】自定义加载动画4
  20. ArcBlock ⑦ 月报 | 产品一天半迭代1个版本 全球开发者社区建设启动

热门文章

  1. IDEA集成leetcode
  2. Swoft 踩坑笔记一 - 安装Swoft并启动
  3. linux v4l2 示例程序,Linux关于Camera使用V4L2
  4. 关于 Linux 中安全方面的一些笔记
  5. 一个基于.Net开发的Windows截屏录制工具
  6. Robotstudio软件:机床上下料工作站机器人主逻辑编写与仿真运行
  7. CICS集群配置相关
  8. python挖掘chinaz长尾词脚本代码分享
  9. Hbulidx 运行到手机或模拟器总是连不上
  10. yocs_velocity_smoother速度平滑包的动态参数设置