- 浏览: 1049633 次
- 性别:
- 来自: 天津
文章分类
- 全部博客 (314)
- java 技术 (45)
- Java Util (3)
- Struts2 学习笔记 (23)
- MySql@数据库 (18)
- Oracle@数据库 (4)
- sqlserver@数据库 (20)
- Hibernate配置及应用 (7)
- 基础学习笔记@javaScript (24)
- 常用应用实例@javaScript (41)
- 网页设计 (20)
- bug (13)
- 总结 (4)
- eclipse应用 (23)
- tomcat设置及问题 (15)
- SWFUplaod学习笔记 (7)
- C# (5)
- PPT经验技巧 (8)
- 心情随笔 (3)
- 其他 (19)
- jquery (4)
- sping (1)
- json相关 (2)
最新评论
-
流年已逝_奋斗不止2013:
很有用,谢谢!
HQL select 总结 -
qq_31945283:
完美解决了我的难题,谢谢
四、struts2+swfUpload例子二 -
qq_31945283:
...
四、struts2+swfUpload例子二 -
sunbingrun:
集成到我的项目里, 居然post_params: {&quo ...
三、struts2+swfUpload简单例子 -
flyarun:
牛B ,这种人就是我的偶像
四、struts2+swfUpload例子二
我的eclipse用了一段时间后慢的要命,偶尔还崩溃的说。
错误提示:
修改eclipse根目录下面的 eclipse.ini中的参数即可解决。
参数说明:
如果有和我遇到了相同的问题,不妨把这些参数改大些。
我的电脑内存1G,我设置的参数为:
从网上的资料看PermSize大一点肯定更好,而且最好是设置PermSize和MaxPermSize一样大。理由如下:
PermSize 和MaxPermSize如果设置为相同还可以在一定程度上提高性能,因为,PermSize在不断的变化中会需要转移其中的数据。如果固定了以后,则可以减少每次扩大PermSize带来的性能损失。
PermGen space简介
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。
说说为什么会内存益出:
(1)这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同。
(2) GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS 的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。
如果你的WEB APP下都用了大量的第三方jar,其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。
解决方法: 手动设置MaxPermSize大小
修改TOMCAT_HOME/bin/catalina.bat,在echo "Using CATALINA_BASE: $CATALINA_BASE"上面加入以下行:
JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以减少jar 文档重复占用内存
参数的含义
-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
参数中-vmargs的意思是设置JVM参数,所以后面的其实都是JVM的参数了,我们首先了解一下JVM内存管理的机制,然后再解释每个参数代表的含义。
1、堆(Heap)和非堆(Non-heap)内存
按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。
2、堆内存分配
JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。
3、非堆内存分配
JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。
4、JVM内存限制(最大值)
首先JVM内存限制于实际的最大物理内存,假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制了。
为什么有的机器我将-Xmx和-XX:MaxPermSize都设置为512M之后Eclipse可以启动,而有些机器无法启动?
通过上面对JVM内存管理的介绍我们已经了解到JVM内存包含两种:堆内存和非堆内存,另外JVM最大内存首先取决于实际的物理内存和操作系统。所以说设置VM参数导致程序无法启动主要有以下几种原因:
1) 参数中-Xms的值大于-Xmx,或者-XX:PermSize的值大于-XX:MaxPermSize;
2) -Xmx的值和-XX:MaxPermSize的总和超过了JVM内存的最大限制,比如当前操作系统最大内存限制,或者实际的物理内存等等。说到实际物理内存这里需要说明一点的是,如果你的内存是1024MB,但实际系统中用到的并不可能是1024MB,因为有一部分被硬件占用了。
为何将上面的参数写入到eclipse.ini文件Eclipse没有执行对应的设置?
那为什么同样的参数在快捷方式或者命令行中有效而在eclipse.ini文件中是无效的呢?这是因为我们没有遵守eclipse.ini文件的设置规则:
参数形如“项 值”这种形式,中间有空格的需要换行书写,如果值中有空格的需要用双引号包括起来。比如我们使用-vm C:\Java\jre1.6.0\bin\javaw.exe参数设置虚拟机,在eclipse.ini文件中要写成这样:
-vm
C:\Java\jre1.6.0\bin\javaw.exe
按照上面所说的,最后参数在eclipse.ini中可以写成这个样子:
实际运行的结果可以通过Eclipse中“Help”-“About Eclipse SDK”窗口里面的“Configuration Details”按钮进行查看。
另外需要说明的是,Eclipse压缩包中自带的eclipse.ini文件内容是这样的:
其中–launcher.XXMaxPermSize(注意最前面是两个连接线)跟-XX:MaxPermSize参数的含义基本是一样的,我觉得唯一的区别就是前者是eclipse.exe启动的时候设置的参数,而后者是eclipse所使用的JVM中的参数。其实二者设置一个就可以了,所以这里可以把–launcher.XXMaxPermSize和下一行使用#注释掉。
其他的启动参数:
如果你有一个双核的CPU,也许可以尝试这个参数 -XX:+UseParallelGC
让GC可以更快的执行。(只是JDK 5里对GC新增加的参数)
补充:
可以在myelipse里选中相应的服务器比如tomcat5,展开里面的JDK子项页面,来增加服务器启动的JVM参数设置:
错误提示:
MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) space remains. It is strongly recommended that you exit and restart MyEclipse with new virtual machine memory paramters to increase this memory. Failure to do so can result in data loss. The recommended Eclipse memory parameters are: eclipse.exe -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
修改eclipse根目录下面的 eclipse.ini中的参数即可解决。
参数说明:
- -vmargs:说明后面是VM的参数
- -Xms128m:虚拟机占用系统的最小内存
- -Xmx512m:虚拟机占用系统的最大内存
- -XX:PermSize:最小堆大小。
- -XX:MaxPermSize:最大堆大小。
如果有和我遇到了相同的问题,不妨把这些参数改大些。
我的电脑内存1G,我设置的参数为:
-vmargs -Xms128M -Xmx512M -XX:PermSize=128M -XX:MaxPermSize=256M
从网上的资料看PermSize大一点肯定更好,而且最好是设置PermSize和MaxPermSize一样大。理由如下:
PermSize 和MaxPermSize如果设置为相同还可以在一定程度上提高性能,因为,PermSize在不断的变化中会需要转移其中的数据。如果固定了以后,则可以减少每次扩大PermSize带来的性能损失。
PermGen space简介
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。
说说为什么会内存益出:
(1)这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同。
(2) GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS 的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。
如果你的WEB APP下都用了大量的第三方jar,其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。
解决方法: 手动设置MaxPermSize大小
修改TOMCAT_HOME/bin/catalina.bat,在echo "Using CATALINA_BASE: $CATALINA_BASE"上面加入以下行:
JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以减少jar 文档重复占用内存
参数的含义
-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
参数中-vmargs的意思是设置JVM参数,所以后面的其实都是JVM的参数了,我们首先了解一下JVM内存管理的机制,然后再解释每个参数代表的含义。
1、堆(Heap)和非堆(Non-heap)内存
按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。
2、堆内存分配
JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。
3、非堆内存分配
JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。
4、JVM内存限制(最大值)
首先JVM内存限制于实际的最大物理内存,假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制了。
为什么有的机器我将-Xmx和-XX:MaxPermSize都设置为512M之后Eclipse可以启动,而有些机器无法启动?
通过上面对JVM内存管理的介绍我们已经了解到JVM内存包含两种:堆内存和非堆内存,另外JVM最大内存首先取决于实际的物理内存和操作系统。所以说设置VM参数导致程序无法启动主要有以下几种原因:
1) 参数中-Xms的值大于-Xmx,或者-XX:PermSize的值大于-XX:MaxPermSize;
2) -Xmx的值和-XX:MaxPermSize的总和超过了JVM内存的最大限制,比如当前操作系统最大内存限制,或者实际的物理内存等等。说到实际物理内存这里需要说明一点的是,如果你的内存是1024MB,但实际系统中用到的并不可能是1024MB,因为有一部分被硬件占用了。
为何将上面的参数写入到eclipse.ini文件Eclipse没有执行对应的设置?
那为什么同样的参数在快捷方式或者命令行中有效而在eclipse.ini文件中是无效的呢?这是因为我们没有遵守eclipse.ini文件的设置规则:
参数形如“项 值”这种形式,中间有空格的需要换行书写,如果值中有空格的需要用双引号包括起来。比如我们使用-vm C:\Java\jre1.6.0\bin\javaw.exe参数设置虚拟机,在eclipse.ini文件中要写成这样:
-vm
C:\Java\jre1.6.0\bin\javaw.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和下一行使用#注释掉。
其他的启动参数:
如果你有一个双核的CPU,也许可以尝试这个参数 -XX:+UseParallelGC
让GC可以更快的执行。(只是JDK 5里对GC新增加的参数)
补充:
可以在myelipse里选中相应的服务器比如tomcat5,展开里面的JDK子项页面,来增加服务器启动的JVM参数设置:
-Xms128m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m
发表评论
-
MyEclipse中设置开发项目时使用的默认JDK
2021-01-13 10:18 313https://www.cnblogs.com/tutubao ... -
复制粘贴时导致eclipse(myeclipse、sts)卡死的解决办法
2018-11-15 09:42 2150在STS(eclipse)中编辑代码,使用ctrl+c进行 ... -
myeclipse如何让不用工程项目不显示出来
2018-04-25 10:21 8451、关闭不需要显示的项目 2、如果有太多关闭工程显示,不方便工 ... -
MyEclipse怎么才能流畅编辑jsp页面
2018-01-26 12:02 564可以设置Jsp的默认打开方式,选择MyEclipse JSP ... -
增加eclipse的运行内存
2018-04-30 12:08 894myeclipse内存溢出之后,可以通过修改虚拟内存大小来解决 ... -
myeclipse 突然不能折叠代码了,方法前面的小+-号不见了
2016-11-11 09:03 633myeclipse 突然不能折叠代码了,方法前面的小+-号不见 ... -
修改myEclipse的默认的工作空间
2015-04-02 09:31 6611、关闭已经打开的myEcplise,找到该软件的安装目录,比 ... -
myeclipse自动生成hibernate的Mapping和po文件,comment出现中文乱码
2012-12-31 11:20 1880使用myeclipse反向生成hibernate中的d ... -
eclipse里面如何快速收缩当前类文件里面的所有方法和注释
2012-10-30 10:49 3209收缩:ctrl+shift+/ 展开:ctrl+shift+* ... -
eclipse中隐藏jar包文件
2012-03-31 10:14 61391.在工具栏选中java 2.在“Package Explo ... -
Eclipse日志文件存放在何处
2011-05-03 10:18 2022Eclipse日志文件存放在何处我们自己在装插件的时候,有时由 ... -
MyEclipse5.1 注册码
2010-02-20 13:35 2033软件开发工具日新月异,其功能越来越全面,使用越来 ... -
Eclipse安装插件的几种方式
2009-08-19 09:06 1716一、覆盖安装。 将插件解压缩后,覆盖Ecl ... -
从eclipse中打开项目在web服务器(tomcat)端得文件夹
2009-08-19 08:45 25041、打开“Deploy MyEclipse J2EE Proj ... -
myeclipse 修改部署路径
2009-08-12 09:32 4913在Eclipse中修改了项目名称以后,项目的部署路径并没有随之 ... -
Workspace in use or cannot be created, choose a different one.
2009-08-09 10:25 4903eclipse 使用一段时间后,有时会因为一些故障自己就莫名奇 ... -
项目导入问题
2009-08-09 04:14 1457eclipse java web project 导入问题 在 ... -
项目部署问题-could not be redeployed
2009-06-30 10:21 12042今天在开发项目过程中遇到一个问题,我更新项目文件后 ... -
修改eclipse的背景色
2009-01-23 10:48 16708eclipse操作界面默认颜色为白色。对于我们长期使用电脑编程 ... -
myeclipse自动生成hibernate的Mapping和po文件
2008-12-24 16:58 3708用过hibernate的人都知道,hibernate po的M ...
相关推荐
Eclipse的内存优化与内存不足问题 解决内存溢出的办法
解决 在用eclipse的时候,老弹出一个对话框,提示内存不足的问题
设置eclipse的运行内存, jvm内存大小设置, 如果启动服务时报内存溢出说明eclipse的运行内存太小 设置下运行内存就可以了
eclipse tomcat启动,内存溢出问题
刚刚做项目的时候,MyEclipse提示内存不足,比较烦,下面是我的解决办法
Eclipse运行工程内存溢出解决方法,word文档中有很详细的说明
eclipse运行大点的项目时候经常出现内存溢出,这个文档教大家如何解决这个问题,亲测有效
eclipse内配置处理内存溢出
快速熟悉掌握Eclipse的快捷键操作,更快更好的解决效率问题,使自己技术走向成熟!
本文档主要是针对使用Eclipse中的tomcat运行项目,启动项目报内存移除的问题
设置完毕后 有效解决卡顿、降低占用内存
解释了常用的eclipse和tomcat的jVM参数配置,有图有真相..
优化eclipse内存,可以有效防止其内存溢出.
Eclipse + Tomcat 内存溢出参数设置
tomcat_eclipse配置内存溢出,
该插件主要是Eclipse下查看当前Eclipse内存使用情况。在状态栏下显示! <br>支付Eclipse 3.1/3.2/3.3。
Eclipse配置tomcat,使得在Eclipse中可以直接运行Tomcat,第一次打包部署后即可实时调试程序内容。
ermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。说说为什么会内存益出:这一部分 用于存放Class和...
window 下eclipse远程访问伪分布式hadoop 运行wordcount
本文档详细讲述怎么样使做完的java工程 swt rcp swing 等脱离java运行