解读 eclipse.ini 配置文件 & JVM参数

INI文件格式是某些平台或软件上的配置文件的非正式标准,以节(section)和键(key)构成,常用于微软Windows操作系统中。这种配置文件的文件扩展名多为INI,故名。
INI是英文“初始化”(initialization)的缩写。正如该术语所表示的,INI文件被用来对操作系统或特定程序初始化或进行参数设置。
 
 
eclipse的启动由%ECLIPSE_HOME%/eclipse.ini控制,如果$ECLIPSE_HOME 没有被定义,则eclipse安装目录下的默认eclipse.ini会生效。eclipse.ini是一个文本文件,其内容相当于在eclipse运行时添加到eclipse.exe之后的命令行参数。
1. 所有的选项及其相关的参数必须在单独的一行之内,若参数形如“项 值”形式,中间的空格需要换行书写,如果值中有空格则需要用双引号括起来;

         2.所有在-vmargs之后的参数将会被传输给JVM,所有如果所有对Eclipse 设置的参数必须写在-vmargs之前.
 
         -vm [jre path] 描述:指定启动时所使用的Java虚拟机
 
         -vmargs [Java VM arguments] 描述:指定启动时要使用的Java虚拟机参数 . 注:此参数一定要放在所有参数变量的最后面

堆(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以上的处理器就不会有限制了。

设置VM参数导致程序无法启动主要有以下几种原因:
1)参数中-Xms的值大于-Xmx,或者-XX:PermSize的值大于-XX:MaxPermSize;
2) -Xmx的值和-XX:MaxPermSize的总和超过了JVM内存的最大限制,比如当前操作系统最大内存限制,或者实际的物理内存等等。
说到实际物理内存这里需要说明一点的是,如果你的内存是1024MB,但实际系统中用到的并不可能是1024MB,因为有一部分被硬件占用了。

JVM参数介绍:

 

1)-Xgcpolicy: 指定GC回收策略

-Xgcpolicy:< balanced | gencon | optavgpause | optthruput >

gencon:分代并发(gencon)策略(缺省)将并发标记短语与分代垃圾回收结合使用,以帮助尽量缩短在任何垃圾回收暂停中耗费的时间。该策略对许多短生命周期对象的应用程序相当有用,比如事务性应用程序。 仍在生成很大的吞吐量时,暂停时间要比利用 optthruput 策略短很多。也将减少堆分段存储。balanced: balanced 策略使用标记、清除、压缩和分代样式的垃圾回收。 禁用了并发标记阶段;使用了并发垃圾回收技术,但没有采用其他策略中实现并发标记的方式。 balanced 策略针对 Java™ 堆使用基于区域的布局。 将单独管理这些区域以减少大型堆的最大暂停时间并提高垃圾回收的效率。 该策略尝试通过匹配对象分配和生存率来避免全局回收。如果遇到了由全局垃圾回收,特别是压缩引起的应用程序暂停时间的问题,该策略可能会提高应用程序的性能。 如果正在使用具有非统一内存体系结构(NUMA)特性(x86 和仅适用于 POWER® 平台)的大型系统,均衡策略将进一步改善应用程序的吞吐量。 有关该策略的更多信息,包括何时使用该策略,请参阅均衡垃圾回收策略

optavgpause: “针对暂停时间优化”(optavgpause) 策略使用并发标记和并发清扫阶段。暂停时间比使用 optthruput 更短,但是由于应用程序正在运行时进行了一些垃圾回收工作,所以导致应用程序吞吐量减小。 如果堆的大小很大(可以在 64 位平台上使用),请考虑是否使用该策略,因为该策略限制增加的堆大小对垃圾回收暂停时间长度的影响。 但是,如果应用程序使用了很多短生命周期对象,gencon 策略可能会提高性能.

subpool:subpool 策略已弃用,现为 optthruput 的别名。 因此,如果您使用该选项,那么其作用与 optthruput 相同。

optthruput:“针对吞吐量优化”(optthruput) 策略禁用了并发标记阶段。在全局垃圾回收期间,终止应用程序,以便延长暂停时间。该配置通常用于大堆的应用程序,高应用程序吞吐量才是主要的性能目标,而非缩短垃圾回收暂停时间。 如果应用程序不能忍受较长的垃圾回收暂停时间,请考虑使用其他策略,比如 gencon。

2) -Xmn/-Xmns/-Xmnx, Sets the initial and maximum size of the new area when using -Xgcpolicy:gencon.在使用Xgcpolicy:gencon时,设置婴儿区域(或者young)的大小。  

      -Xmn  设置 最大最小值一致

      -Xmns  设置婴儿区域(young or new area)的最小值

      -Xmnx  设置婴儿区域(young or new area)的最大值

Restriction: If you try to set -Xmn with either -Xmns or -Xmnx, the VM does not start, returning an error. -Xmn与-Xmns 或者 -Xmnx不能同时设置,否则的话JVM将无法启动,并报错。

在Gencon回收策略下,可以通过-Xmn来设置婴儿区域(Nursery或者叫young)的大小,通过-Xmo来设置长存区(tenured或者old)的大小。注意-Xmn不能和-Xmns/-Xmnx参数一起使用,-Xmo不能和-Xmos/-Xmox一起使用,否则会报错。前者就是把年轻代和长存代的大小固定了,而后两者就是设定两个部分最大最小的范围,默认情况下:

-Xmns是-Xms的25%或者64M(在JDK 5.0中默认是25%)

-Xmnx是-Xmx的25%或者64M(同上)

-Xmos是-Xmx减去-Xmns的大小

-Xmox是和-Xmx一样大

3)-XX:MaxPermSize:表示对非堆区分配的内存的最大上限。 

4)-Xquickstart 此选项使 JIT 编译器通过部分优化来运行。效果是通过缩短启动时间加快编译,但较长时间运行的应用程序可能会降低运行速度。在 AOT 编译器处于活动状态时(启用了共享类和 AOT 编译),-Xquickstart 将导致所有方法执行 AOT 编译。AOT 编译可缩短后续运行的启动时间,但可能降低较长时间运行的应用程序的性能。如果将 -Xquickstart 用于长时间运行的包含热方法的应用程序,会降低性能。 -Xquickstart 的执行会根据将来发行版的变化而相应调整。缺省情况下,禁用 -Xquickstart。指定与 -Xquickstart 完全相同的行为的另一种方法是使用 -client 选项。这两个选项可在命令行上互换使用。

 
本地 eclipse.ini例:
-vm
C:\Program Files\..\..\jdk\jre\bin\javaw.exe
-startup
plugins/org.eclipse.equinox.launcher_1.3.200.v20160318-1642.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.400.v20160518-1444
-install
C:/../../SDP
-vmargs
-Dsdp.driver=RADO96-I20161214_1251
-Xquickstart
-Xms512m
-Xmx1536m
-Xmnx64m
-Xgcpolicy:gencon
-Xscmx96m
-Xshareclasses:name=IBMSDP_%u
-XX:MaxPermSize=512M
-Xcompressedrefs
-Dcom.ibm.ws.management.event.max_polling_interval=1000

 


 
 
参考:
http://www.orsoon.com/news/45961.html
http://wiki.eclipse.org/Eclipse.ini#Overview
https://www.eclipse.org/openj9/docs/xquickstart/
https://blog.csdn.net/DavidHsing/article/details/5854560
https://blog.csdn.net/superzyl/article/details/79077166
https://www.ibm.com/support/knowledgecenter/zh/SSYKE2_7.0.0/com.ibm.java.lnx.70.doc/diag/appendixes/cmdline/xgcpolicy.html
https://www.ibm.com/support/knowledgecenter/zh/SSYKE2_7.0.0/com.ibm.java.lnx.70.doc/diag/appendixes/cmdline/xquickstart.html

解读 eclipse.ini 配置文件 & JVM参数

上一篇:VirtualBox中Alpine Linux + Docker安装记录


下一篇:Linux-系统日志