zoukankan      html  css  js  c++  java
  • eclipse init 配置

    --设置最大的堆和最小堆大小.两者一样表示固定大小.这样可以防止老年代内存扩展造成额外的gc.当然也会多占一些内存.系统内存不足的慎用

    -Xms512m

    -Xmx512m

    --加大年轻代内存.减少minor gc

    -Xmn164m

    --这个是永久代大小.默认是64M,增加到96M.固定大小,减少扩展造成的gc

    -XX:PermSize=96m

    -XX:MaxPermSize=96m

    --去除字节码验证

    -Xverify:none

    --屏蔽显示调用gc.

    -XX:+DisableExplicitGC

    --关闭类垃圾回收,就可以消除由于多次装入和卸装同一个类而造成的开销

    -Xnoclassgc

    --指定最适合多任务并行的CMS垃圾收集器

    -XX:+UseParNewGC

    -XX:+UseConcMarkSweepGC

    --修改默认的触发老年代full gc的内存所占比..改成85%

    -XX:CMSInitiatingOccupancyFraction=85

    [plain] view plain copy
     
    1. # 我的配置.  
    2. -vm  
    3. -C:Javajdk1.6.0_30injavaw.exe  
    4. -startup  
    5. plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar  
    6. --launcher.library  
    7. plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.1.R36x_v20100810  
    8. -product  
    9. org.eclipse.epp.package.jee.product  
    10. --launcher.defaultAction  
    11. openFile  
    12. --launcher.XXMaxPermSize  
    13. 128M  
    14. -showsplash  
    15. org.eclipse.platform  
    16. --launcher.XXMaxPermSize  
    17. 128m  
    18. --launcher.defaultAction  
    19. openFile  
    20. -vmargs  
    21. -Dosgi.requiredJavaVersion=1.5  
    22. -Xverify:none  
    23. -XX:+DisableExplicitGC  
    24. -Xms512M  
    25. -Xmx512M  
    26. -Xmn164m  
    27. -XX:PermSize=96m  
    28. -XX:MaxPermSize=96m  
    29. -XX:+UseParallelGC  
    30. -XX:CMSInitiatingOccupancyFraction=85  


     

    转自: http://blog.chinaunix.net/space.php?uid=10178376&do=blog&id=100985

    -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:Javajre1.6.0injavaw.exe参数设置虚拟机,在eclipse.ini文件中要写成这样:

    -vm 
    C:Javajre1.6.0injavaw.exe 
    按照上面所说的,最后参数在eclipse.ini中可以写成这个样子:

    -vmargs 
    -Xms128M 
    -Xmx512M 
    -XX:PermSize=64M 
    -XX:MaxPermSize=128M 
    实际运行的结果可以通过Eclipse中“Help”-“About Eclipse SDK”窗口里面的“Configuration Details”按钮进行查看。

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

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

    3. 其他的启动参数。 如果你有一个双核的CPU,也许可以尝试这个参数:

    -XX:+UseParallelGC

    让GC可以更快的执行。(只是JDK 5里对GC新增加的参数)

    堆大小设置
    JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。
    典型设置:
    java -Xmx3550m -Xms3550m -Xmn2g -Xss128k
    -Xmx3550m:设置JVM最大可用内存为3550M。
    -Xms3550m:设置JVM促使内存为3550m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
    -Xmn2g:设置年轻代大小为2G。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
    -Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
    java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0
    -XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5
    -XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6
    -XX:MaxPermSize=16m:设置持久代大小为16m。
    -XX:MaxTenuringThreshold=0:设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。
    回收器选择
    JVM 给了三种选择:串行收集器、并行收集器、并发收集器,但是串行收集器只适用于小数据量的情况,所以这里的选择主要针对并行收集器和并发收集器。默认情况下,JDK5.0以前都是使用串行收集器,如果想使用其他收集器需要在启动时加入相应参数。JDK5.0以后,JVM会根据当前系统配置进行判断。
    吞吐量优先的并行收集器
    如上文所述,并行收集器主要以到达一定的吞吐量为目标,适用于科学技术和后台处理等。

    以下转自: http://www.oschina.net/question/12_11854

    A:JVM参数配置之heapsize

    -Xmx
    指定jvm的最大heap大小,如:-Xmx2g(千万记住可是没有等号的哦)

    -Xms
    指定jvm的最小heap大小,如:-Xms2g(千万记住可是没有等号的哦),高并发应用,建议和-Xmx一样,防止因为内存收缩/突然增大带来的性能影响,总之记住这遇见这两值配一样的数就OK。

    -Xmn
    指定jvm中NewGeneration的大小,如:-Xmn256m。这个参数会很影响性能的哦,所以要配置好,如果你的程序需要比较多的临时内存,建议设置到512M,如果用的少,尽量降低这个数值,一般来说128/256足以使用了,配置得小gc效率就越快,系统性能也就得到提高,一般情况下跟据系统配到能接受的下限就OK。

    -XX:PermSize=
    指定jvm中PermGeneration的最小值,如:-XX:PermSize=32m。这个参数需要看你的实际情况。在生产环境中这个参数得需调试着才能拿到最准值,往往在应用中都会造成这一区域的内存溢出。

    -XX:MaxPermSize=
    指定(永久代)PermGeneration的最大值,如:-XX:MaxPermSize=64m

    -Xss
    指定线程桟大小,如:-Xss128k,一般来说,webx框架下的应用需要256K。如果你的程序有大规模的递归行为,请考虑设置到512K/1M。这个需要全面的测试才能知道。不过,256K已经很大了。这个参数对性能的影响比较大的。分配得少也就意味着你能多弄几个线程出来,但还是得根据你的应用来拿拈了。

    -XX:NewRatio=
    指定jvm中OldGenerationheapsize与NewGeneration的比例,在使用CMSGC的情况下此参数失效,如:-XX:NewRatio=2

    -XX:SurvivorRatio=
    指定NewGeneration中EdenSpace与一个SurvivorSpace的heapsize比例,-XX:SurvivorRatio=8,那么在总共NewGeneration为10m的情况下,EdenSpace为8m

    -XX:MinHeapFreeRatio=
    指定jvmheap在使用率小于n的情况下,heap进行收缩,Xmx==Xms的情况下无效,如:-XX:MinHeapFreeRatio=30

    -XX:MaxHeapFreeRatio=
    指定jvmheap在使用率大于n的情况下,heap进行扩张,Xmx==Xms的情况下无效,如:-XX:MaxHeapFreeRatio=70

    -XX:LargePageSizeInBytes=
    指定Javaheap的分页页面大小,如:-XX:LargePageSizeInBytes=128m

    B:JVM参数配置garbagecollector

    -XX:+UseParallelGC
    指定在NewGeneration使用parallelcollector,并行收集,暂停appthreads,同时启动多个垃圾回收thread,不能和CMSgc一起使用.系统吨吐量优先,但是会有较长长时间的apppause,后台系统任务可以使用此gc

    -XX:ParallelGCThreads=
    指定parallelcollection时启动的thread个数,默认是物理processor的个数,

    -XX:+UseParallelOldGC
    指定在OldGeneration使用parallelcollector

    -XX:+UseParNewGC
    指定在NewGeneration使用parallelcollector,是UseParallelGC的gc的升级版本,有更好的性能或者优点,可以和CMSgc一起使用

    -XX:+CMSParallelRemarkEnabled
    在使用UseParNewGC的情况下,尽量减少mark的时间

    -XX:+UseConcMarkSweepGC
    指定在OldGeneration使用concurrentcmarksweepgc,gcthread和appthread并行(在init-mark 和remark时pauseappthread).apppause时间较短,适合交互性强的系统,如webserver

    -XX:+UseCMSCompactAtFullCollection
    在使用concurrentgc的情况下,防止memoryfragmention,对liveobject进行整理,使memory碎片减少

    -XX:CMSInitiatingOccupancyFraction=
    指示在oldgeneration在使用了n%的比例后,启动concurrentcollector,默认值是68,如:-XX:CMSInitiatingOccupancyFraction=70 

    -XX:+UseCMSInitiatingOccupancyOnly
    指示只有在oldgeneration在使用了初始化的比例后concurrentcollector启动收集

    C: 其他JVM参数配置

    -XX:MaxTenuringThreshold=
    指定一个对象(object)在经历了n次(新生代区里的GC)younggc后转移到oldgeneration(老生代区),在linux64的java6下默认值是15,此参数对于throughputcollector无效,如:-XX:MaxTenuringThreshold=31

    -XX:+DisableExplicitGC
    禁止java程序中调用的fullgc,如System.gc()的调用。一般都会要配此参数以提高系统性能。

    -XX:+UseFastAccessorMethods
    把get,set方法转成本地代码


    -XX:+PrintGCDetails
    此参数用来打应垃圾收集的详细情况 

    -XX:+PrintGCTimeStamps
    打应垃圾收集的时间分部情况 

    -XX:+PrintGCApplicationStoppedTime
    打应垃圾收集时,GC时导致的系统停顿时间

    D:几组GC对新旧代的回收方式列表: 

    指定方式                                                  新生代GC方式              旧生代GC方式

    -XX:+UseSerialGC                                         串行GC                     串行GC

    -XX:+UseParallelGC                                     并行回收GC                 并行GC

    -XX:+UseConeMarkSweepGC                      并行GC                     并发GC

    -XX:+UseParNewGC                                   并行GC                      串行GC

    -XX:+UseParallelOldGC                              并行回收GC                 并行GC

    -XX:+ UseConeMarkSweepGC                   

    -XX:+UseParNewGC                                  串行GC                     并发GC

    不支持的组合                 1、-XX:+UseParNewGC -XX:+UseParallelOldGC

                                        2、-XX:+UseParNewGC -XX:+UseSerialGC

    三种方式的拉圾回收总结:

    串行收集:串行收集使用单线程处理所有垃圾回收工作,因为无需多线程交互,实现容易,而且效率比较高。但是,其局限性也比较明显,即无法使用多处理器的优势,适合单处理器机器。

    并行收集:并行收集使用多线程处理垃圾回收工作,因而速度快,效率高。而且理论上CPU数目越多,就会越能体现出并行收集器的优势。

    并发收集:相对于串行收集和并行收集而言,前面两个在进行垃圾回收工作时,需要暂停整个运行环境(即只有GC一个线程在跑,其它的弟兄们都得停下手头上的活来等着这兄弟执行完),因此,系统在垃圾回收时会有明显的暂停,而且暂停时间会因为堆越大而越长。

  • 相关阅读:
    (BFS 二叉树) leetcode 515. Find Largest Value in Each Tree Row
    (二叉树 BFS) leetcode513. Find Bottom Left Tree Value
    (二叉树 BFS DFS) leetcode 104. Maximum Depth of Binary Tree
    (二叉树 BFS DFS) leetcode 111. Minimum Depth of Binary Tree
    (BFS) leetcode 690. Employee Importance
    (BFS/DFS) leetcode 200. Number of Islands
    (最长回文子串 线性DP) 51nod 1088 最长回文子串
    (链表 importance) leetcode 2. Add Two Numbers
    (链表 set) leetcode 817. Linked List Components
    (链表 双指针) leetcode 142. Linked List Cycle II
  • 原文地址:https://www.cnblogs.com/ZRRJDD/p/8135127.html
Copyright © 2011-2022 走看看