遇到游戏无法安装的问题,想请问青少年如何提高智力电脑内存的办法有几种?《》

我的游戏完不了了,帮帮忙.(内存问题)_百度知道
我的游戏完不了了,帮帮忙.(内存问题)
游戏进行中会弹出错误提示,内容是&0X241fsa38''指令引用的''0X00d3fa''内存.该内存不能为''read''.要终止程序,请点击确定.点击确定后,游戏就退出了.
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
你是不是有还原精灵?很多游戏在C:\\有DLL文件``象还原精灵这种软件还原C:\\时就把游戏在C:\\的文件也删了
采纳率:60%
游戏的安装程序有问题,建议你重新下载或重新买过只碟把
楼主无需忧虑, 我来帮你分析 ,看情况是你游戏的DLL(动态连接库)文件丢失引起的错误
建议你重新安装游戏 就可以了
以后记住 游戏程序会在C盘自动建立个目录 那里面的文件不能删除 下面详细解答下关于这一类问题的原因,你自己从中找出对应的电脑症状所在,后面都有解决方法
我所熟悉的0X000000该内存不能为read或者written的解决方法 硬件: 电脑硬件是很不容易坏的。内存出现问题的可能性并不大(除非你的内存真的是杂牌的一塌徒地),主要方面是:1。内存条坏了(二手内存情况居多)、2。使用了有质量问题的内存,3。内存插在主板上的金手指部分灰尘太多。4。使用不同品牌不同容量的内存,从而出现不兼容的情况。5。超频带来的散热问题。你可以使用MemTest 这个软件来检测一下内存,它可以彻底的检测出内存的稳定度。 二、如果都没有,那就从软件方面排除故障了。 原理:内存有个存放数据的地方叫缓冲区,当程序把数据放在缓冲区,需要操作系统提供的“功能函数”来申请,如果内存分配成功,函数就会将所新开辟的内存区地址返回给应用程序,应用程序就可以通过这个地址使用这块内存。这就是“动态内存分配”,内存地址也就是编程中的“光标”。内存不是永远都招之即来、用之不尽的,有时候内存分配也会失败。当分配失败时系统函数会返回一个0值,这时返回值“0”已不表示新启用的光标,而是系统向应用程序发出的一个通知,告知出现了错误。作为应用程序,在每一次申请内存后都应该检查返回值是否为0,如果是,则意味着出现了故障,应该采取一些措施挽救,这就增强了程序的“健壮性”。若应用程序没有检查这个错误,它就会按照“思维惯性”认为这个值是给它分配的可用光标,继续在之后的执行中使用这块内存。真正的0地址内存区储存的是计算机系统中最重要的“中断描述符表”,绝对不允许应用程序使用。在没有保护机制的操作系统下(如DOS),写数据到这个地址会导致立即当机,而在健壮的操作系统中,如Windows等,这个操作会马上被系统的保护机制捕获,其结果就是由操作系统强行关闭出错的应用程序,以防止其错误扩大。这时候,就会出现上述的内存不能为“read”错误,并指出被引用的内存地址为“0x“。内存分配失败故障的原因很多,内存不够、系统函数的版本不匹配等都可能有影响。因此,这种分配失败多见于操作系统使用很长时间后,安装了多种应用程序(包括无意中“安装”的病毒程序),更改了大量的系统参数和系统档案之后。 在使用动态分配的应用程序中,有时会有这样的情况出现:程序试图读写一块“应该可用”的内存,但不知为什么,这个预料中可用的光标已经失效了。有可能是“忘记了”向操作系统要求分配,也可能是程序自己在某个时候已经注销了这块内存而“没有留意”等等。注销了的内存被系统回收,其访问权已经不属于该应用程序,因此读写操作也同样会触发系统的保护机制,企图“违法”的程序唯一的下场就是被操作终止执行,回收全部资源。计算机世界的法律还是要比人类有效和严厉得多啊!像这样的情况都属于程序自身的BUG,你往往可在特定的操作顺序下重现错误。无效光标不一定总是0,因此错误提示中的内存地址也不一定为“0x”,而是其它随机数字。 首先建议: 1、 检查系统中是否有木马或病毒。这类程序为了控制系统往往不负责任地修改系统,从而导致操作系统异常。平常应加强信息安全意识,对来源不明的可执行程序绝不好奇。 2、 更新操作系统,让操作系统的安装程序重新拷贝正确版本的系统档案、修正系统参数。有时候操作系统本身也会有BUG,要注意安装官方发行的升级程序。 3、 尽量使用最新正式版本的应用程序、Beta版、试用版都会有BUG。 4、 删除然后重新创建 Winnt\System32\Wbem\Repository 文件夹中的文件:在桌面上右击我的电脑,然后单击管理。 在&服务和应用程序&下,单击服务,然后关闭并停止 Windows Management Instrumentation 服务。 删除 Winnt\System32\Wbem\Repository 文件夹中的所有文件。(在删除前请创建这些文件的备份副本。) 打开&服务和应用程序&,单击服务,然后打开并启动 Windows Management Instrumentation 服务。当服务重新启动时,将基于以下注册表项中所提供的信息重新创建这些文件: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\CIMOM\Autorecover MOFs 下面搜集几个例子给大家分析: 例一:IE浏览器出现“0x0a8ba9ef”指令引用的“0x” 内存,或者“0x70dcf39f”指令引用的“0x”内存。该内存不能为“read”。要终止程序,请单击“确定”的信息框,单击“确定”后,又出现“发生内部错误,您正在使用的其中一个窗口即将关闭”的信息框,关闭该提示信息后,IE浏览器也被关闭。解决方法: 1、 开始-运行窗口,输入“regsvr32 actxprxy.dll”回车,接着会出现一个信息对话 框“DllRegisterServer in actxprxy.dll succeeded”,确定。再依次运行以下命令。(这个方法有人说没必要,但重新注册一下那些.dll对系统也没有坏处,反正多方下手,能解决问题就行。) regsvr32 shdocvw.dll regsvr32 oleaut32.dll regsvr32 actxprxy.dll regsvr32 mshtml.dll regsvr32 msjava.dll regsvr32 browseui.dll regsvr32 urlmon.dll 2、 修复或升级IE浏览器,同时打上系统补丁。看过其中一个修复方法是,把系统还原到系统初始的状态下。建议将IE升级到了6.0。 例二:有些应用程序错误: “0x7cd64998” 指令参考的 “0x14c96730” 内存。该内存不能为 “read”。解决方法:Win XP的“预读取”技术这种最佳化技术也被用到了应用程序上,系统对每一个应用程序的前几次启动情况进行分析,然后新增一个描述套用需求的虚拟“内存映像”,并把这些信息储存到Windows\Prefetch文件夹。一旦建立了映像,应用软件的装入速度大大提高。XP的预读取数据储存了最近8次系统启动或应用软件启动的信息。建议将虚拟内存撤换,删除Windows\Prefetch目录下所有*.PF文件,让windows重新收集程序的物理地址。 例三:在XP下双击光盘里面的“AutoRun.exe”文件,显示“0x77f745cc”指令引用的“0x”内存。该内存不能为“written”,要终止程序,请单击“确定”,而在Windows 98里运行却正常。 解决方法:这可能是系统的兼容性问题,winXP的系统,右键“AutoRun.exe”文件,属性,兼容性,把“用兼容模式运行这个程序”项选择上,并选择“Windows 98/Me”。win2000如果打了SP的补丁后,只要开始,运行,输入:regsvr32 c:\winnt\apppatch\slayerui.dll。右键,属性,也会出现兼容性的选项。 例四:RealOne Gold关闭时出现错误,以前一直使用正常,最近却在每次关闭时出现“0xffffffff”指令引用的“0xffffffff”内存。该内存不能为“read” 的提示。 解决方法:当使用的输入法为微软拼音输入法2003,并且隐藏语言栏时(不隐藏时没问题)关闭RealOne就会出现这个问题,因此在关闭RealOne之前可以显示语言栏或者将任意其他输入法作为当前输入法来解决这个问题。 例五:我的豪杰超级解霸自从上网后就不能播放了,每次都提示“0x”(每次变化)指令引用的“0xff000011”内存不能为“read”,终止程序请按确定。 解决方法:试试重装豪杰超级解霸,如果重装后还会,到官方网站下载相应版本的补丁试试。还不行,只好换就用别的播放器试试了。 例六:双击一个游戏的快捷方式,“0x77f5cd0”指令引用“0xffffffff”内 存,该内存不能为“read” ,并且提示Client.dat程序错误。解决方法:重装显卡的最新驱动程序,然后下载并且安装DirectX9.0。 例七:一个朋友发信息过来,我的电脑便出现了错误信息:“0x772b548f”指令引用的“0x”内存,该内存不能为“written”,然后QQ自动下线,而再打开QQ,发现了他发过来的十几条的信息。 解决方法:这是对方利用QQ的BUG,发送特殊的代码,做QQ出错,只要打上补丁或升级到最新版本,就没事了。 该内存不能为read或written的解决方案关键词: 该内存不能为&read& 该内存不能为&written& 从网上搜索来的几篇相关文章. 【文章一】 使用Windows操作系统的人有时会遇到这样的错误信息: 「“0X????????”指令引用的“0x”内存,该内存不能为“read”或“written”」,然后应用程序被关闭。 如果去请教一些「高手」,得到的回答往往是「Windows就是这样不稳定」之类的义愤和不屑。其实,这个错误并不一定是Windows不稳定造成的。本文就来简单分析这种错误的一般原因。 一、应用程序没有检查内存分配失败 程序需要一块内存用以储存数据时,就需要使用操作系统提供的「功能函数」来申请,如果内存分配成功,函数就会将所新开辟的内存区地址返回给应用程序,应用程序就可以通过这个地址使用这块内存。这就是「动态内存分配」,内存地址也就是编程中的「光标」。内存不是永远都招之即来、用之不尽的,有时候内存分配也会失败。当分配失败时系统函数会返回一个0值,这时返回值「0」已不表示新启用的游标,而是系统向应用程序发出的一个通知,告知出现了错误。作为应用程序,在每一次申请内存后都应该检查返回值是否为0,如果是,则意味着出现了故障,应该采取一些措施挽救,这就增强了程序的「健壮性」。若应用程序没有检查这个错误,它就会按照「思维惯性」认为这个值是给它分配的可用游标,继续在之后的执行中使用这块内存。真正的0地址内存区储存的是计算机系统中最重要的「中断描述符表」,绝对不允许应用程序使用。在没有保护机制的操作系统下(如DOS),写数据到这个地址会导致立即当机,而在健壮的操作系统中,如Windows等,这个操作会马上被系统的保护机制捕获,其结果就是由操作系统强行关闭出错的应用程序,以防止其错误扩大。这时候,就会出现上述的「写内存」错误,并指出被引用的内存地址为「0x」。内存分配失败故障的原因很多,内存不够、系统函数的版本不匹配等都可能有影响。因此,这种分配失败多见于操作系统使用很长时间后,安装了多种应用程序(包括无意中「安装」的病毒程序),更改了大量的系统参数和系统档案之后。 二、应用程序由于自身BUG引用了不正常的内存光标 在使用动态分配的应用程序中,有时会有这样的情况出现:程序试突读写一块「应该可用」的内存,但不知为什么,这个预料中可用的光标已经失效了。有可能是「忘记了」向操作系统要求分配,也可能是程序自己在某个时候已经注销了这块内存而「没有留意」等等。注销了的内存被系统回收,其访问权已经不属于该应用程序,因此读写操作也同样会触发系统的保护机制,企图「违法」的程序唯一的下场就是被操作终止执行,回收全部资源。计算机世界的法律还是要比人类有效和严厉得多啊!像这样的情况都属于程序自身的BUG,你往往可在特定的操作顺序下重现错误。无效光标不一定总是0,因此错误提示中的内存地址也不一定为「0x」,而是其它随机数字。如果系统经常有所提到的错误提示,下面的建议可能会有说明 : 1.检视系统中是否有木马或病毒。这类程序为了控制系统往往不负责任地修改系统, 从而导致操作系统异常。平常应加强信息安全意识,对来源不明的可执行程序绝不好奇。 2.更新操作系统,让操作系统的安装程序重新拷贝正确版本的系统档案、修正系统参数。 有时候操作系统本身也会有BUG,要注意安装官方发行的升级程序。 3.试用新版本的应用程序。 Mode: 将虚拟内存撤换 答案: 目前为止是肯定的,也就是如在下次冷天到来时亦没再发生,就代表这是主因 追加: 如果你用 Ghost 恢复 OS 后建议 删除WINDOWS\PREFETCH目录下所有*.PF文件因为需让windows重新收集程序的物理地址 有些应用程序错误 &0x7cd64998& 指令参考的 &0x14c96730& 内存。该内存不能为 &read&推论是此原因 源由: Win XP的「预读取」技术 这种最佳化技术也被用到了应用软件上,系统对每一个应用软件的前几次启动情况进行分析,然后新增一个描述套用需求的虚拟「内存映像」,并把这些信息储存到WINDOWSPREFETCH数据夹。一旦建立了映像,应用软件的装入速度大大提高。XP的预读取数据储存了最近8次系统启动或应用软件启动的信息。 后叙: 目前此方法亦是独步网络的(其码自己针对此问题查了许久),也是常见问题,原本几乎每天睡前关闭软件时一些程序都会发生...read... 现在就没发生了。 【文章二】 运行某些程序的时候,有时会出现内存错误的提示(0x后面内容有可能不一样),然后该程序就关闭。 “0x????????”指令引用的“0x????????”内存。该内存不能为“read”。 “0x????????”指令引用的“0x????????”内存,该内存不能为“written”。 不知你出现过类似这样的故障吗? 一般出现这个现象有方面的,一是硬件,即内存方面有问题,二是软件,这就有多方面的问题了。 下面先说说硬件: 一般来说,内存出现问题的可能性并不大,主要方面是:内存条坏了、内存质量有问题,还有就是2个不同牌子不同容量的内存混插,也比较容易出现不兼容的情况,同时还要注意散热问题,特别是超频后。你可以使用MemTest 这个软件来检测一下内存,它可以彻底的检测出内存的稳定度。 假如你是双内存,而且是不同品牌的内存条混插或者买了二手内存时,出现这个问题,这时,你就要检查是不是内存出问题了或者和其它硬件不兼容。 如果都没有,那就从软件方面排除故障了。 先简单说说原理:内存有个存放数据的地方叫缓冲区,当程序把数据放在其一位置时,因为没有足够空间,就会发生溢出现象。举个例子:一个桶子只能将一斤的水,当你放入两斤的水进入时,就会溢出来。而系统则是在屏幕上表现出来。这个问题,经常出现在windows2000和XP系统上,Windows 2000/XP对硬件的要求是很苛刻的,一旦遇到资源死锁、溢出或者类似Windows 98里的非法操作,系统为保持稳定,就会出现上述情况。另外也可能是硬件设备之间的兼容性不好造成的。 下面我从几个例子给大家分析: 例一:打开IE浏览器或者没过几分钟就会出现&0x70dcf39f&指令引用的&0x&内存。该内存不能为“read”。要终止程序,请单击“确定”的信息框,单击“确定”后,又出现“发生内部错误,您正在使用的其中一个窗口即将关闭”的信息框,关闭该提示信息后,IE浏览器也被关闭。 解决方法:修复或升级IE浏览器,同时打上补丁。看过其中一个修复方法是,Win2000自升级,也就是Win2000升级到Win2000,其实这种方法也就是把系统还原到系统初始的状态下。比如你的IE升级到了6.0,自升级后,会被IE5.0代替。 例二:在windows xp下双击光盘里面的“AutoRun.exe”文件,显示“0x77f745cc”指令引用的“0x”内存。该内存不能为“written”,要终止程序,请单击“确定”,而在Windows 98里运行却正常。 解决方法:这可能是系统的兼容性问题,winXP的系统,右键“AutoRun.exe”文件,属性,兼容性,把“用兼容模式运行这个程序”项选择上,并选择“Windows 98/Me”。win2000如果打了SP的补丁后,只要开始,运行,输入:regsvr32 c:\winnt\apppatch\slayerui.dll。右键,属性,也会出现兼容性的选项。 例三:RealOne Gold关闭时出现错误,以前一直使用正常,最近却在每次关闭时出现“0xffffffff”指令引用的“0xffffffff”内存。该内存不能为“read” 的提示。 解决方法:当使用的输入法为微软拼音输入法2003,并且隐藏语言栏时(不隐藏时没问题)关闭RealOne就会出现这个问题,因此在关闭RealOne之前可以显示语言栏或者将任意其他输入法作为当前输入法来解决这个问题。 例四:我的豪杰超级解霸自从上网后就不能播放了,每次都提示“0x”(每次变化)指令引用的“0xff000011”内存不能为“read”,终止程序请按确定。 解决方法:试试重装豪杰超级解霸,如果重装后还会,到官方网站下载相应版本的补丁试试。还不行,只好换就用别的播放器试试了。 例五:双击一个游戏的快捷方式,“0x77f5cd0”指令引用“0xffffffff”内 存,该内存不能为“read” ,并且提示Client.dat程序错误。 解决方法:重装显卡的最新驱动程序,然后下载并且安装DirectX9.0。 例六:一个朋友发信息过来,我的电脑便出现了错误信息:“0x772b548f”指令引用的“0x”内存,该内存不能为“written”,然后QQ自动下线,而再打开QQ,发现了他发过来的十几条的信息。 解决方法:这是对方利用QQ的BUG,发送特殊的代码,做QQ出错,只要打上补丁或升级到最新版本,就没事了。 【原因 解决方法】 1 内存条坏了 更换内存条 2 双内存不兼容 使用同品牌的内存或只要一条内存 3 内存质量问题 更换内存条 4 散热问题 加强机箱内部的散热 5 内存和主板没插好或其他硬件不兼容 重插内存或换个插槽 6 硬件有问题 更换硬盘 7 驱动问题 重装驱动,如果是新系统,应先安装主板驱动 8 软件损坏 重装软件 9 软件有BUG 打补丁或更新到最新版本 10 软件和系统不兼容 给软件打上补丁或是试试系统的兼容模式 11 软件和软件之间有冲突 如果最近安装了什么新软件,卸载了试试 12 软件要使用其他相关的软件有问题 重装相关软件,比如播放某一格式的文件时出错,可能是这个文件的解码器有问题 13 病毒问题 杀毒 14 杀毒软件与系统或软件相冲突 由于杀毒软件是进入底层监控系统的,可能与一些软件相冲突,卸载试试 15 系统本身有问题 有时候操作系统本身也会有BUG,要注意安装官方发行的更新程序,象SP的补丁,最好打上.如果还不行,重装系统,或更换其他版本的系统。 〔又一说〕 在控制面板的添加/删除程序中看看你是否安装了微软NET.Framework,如果已经安装了,可以考虑卸载它,当然如果你以后在其它程序需要NET.Framework时候,可以再重新安装。 另外,如果你用的是ATI显卡并且你用的是SP2的补丁(一些ATI的显卡驱动需要在NET.Framework正常工作的环境下)。这种情况你可以找一款不需要NET.Framework支持的ATI显卡驱动。 如果以上两种方法并不能完全解决问题,你试着用一下“IE修复”软件,并可以查查是否有病毒之类的。 〔微软NET.Framework升级到1.1版应该没问题了〕 〔还有一说〕 方法一: 微软新闻组的朋友指点:开始--运行:regsvr32 jscript.dll 开始--运行:regsvr32 vbscript.dll 不过没解决---但提供了路子-----一次运行注册所有dll 搜索查找到方法如下: 运行 输入cmd 回车在命令提示符下输入 for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1 这个命令老兄你慢慢输 输入正确的话会看到飞快地滚屏 否则……否则失败就是没这效果。回车后慢慢等(需要点时间1-2分钟) 都运行完再打开看 方法二: 这是个典型问题~~~~~引起这个问题的原因很多。一般来讲就是给系统打上补丁和更换内存、给内存换个插槽这3种方法来解决。[系统补丁只要到Microsoft Update网站在线更新就可以了] 造成这种问题的原因很多,不能单纯的下结论,尽量做到以下几点可能对你有帮助: 1。确保使用的是未修改过的软件(非汉化、破解版) 2。使用改软件时尽量不要运行其他软件。(这是个临时文件,可能某些软件也在使用临时文件夹,所以产生干扰) 3。把那些什么桌面工具,内存整理工具通通关掉(你至少有2个类似的工具在运行)” 处理方法: 运行regedit进入注册表, 在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks下,应该只有一个正常的键值&{AEB-11d0-97EE-00C04FD91972}, 将其他的删除。 〔我个人的最后解决和看法〕 我今天尝试了多种办法,最后我发现问题出在微软的NET.Framework上面。我升级了这个软件,并打齐了补丁,短暂平安后,有出现“内存不能为read”的情况。后来我受上面文章的启发,卸载了微软的NET.Framework1.0和1.1,世界太平了。 另外:如果是打开“我的电脑”、“我的文档”等的时候出现上述情况,还有一种可能,就是你的右键菜单太臃肿了,此时只要清理右键菜单问题就解决了。 下面的方法,最管用、最彻底的方法是这个: 运行 输入cmd 回车在命令提示符下输入 for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1 【技巧】如果怕输入错误的话,可以复制这条指令,然后在命令提示框点击左上角的c:\,使用下面的“编辑-粘贴”功能就不容易输错了。在飞速滚屏完全静止之后,别着急启动其他程序,先耐心等一会儿,因为此时dll们还在找位置。直到你的指示灯不闪了再做别的 如有哪些地方不解 可以发消息给我 我帮你详细解答
楼上的好厉害啊.佩服啊!我想是不是主要原因是不兼容呢?
其他1条回答
为您推荐:
其他类似问题
您可能关注的内容
内存的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。电脑里有些大型的游戏就安装不了,请问是机器硬件问题还是软件问题_百度知道
电脑里有些大型的游戏就安装不了,请问是机器硬件问题还是软件问题
我的电脑下载的游戏安装程序在安装过程中老实出现错误,错误原因是原程序配毁坏,我不管是装魔兽世界,还是梦幻西游全是这个问题,请高手帮我解决一下,不胜感激
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
如果是NSIS错误那就是需要重装系统,如果是程序本身错误,那是内存条的问题吧1
采纳率:17%
首先问下你内存多大啊
魔兽最少要1G内存
安装过程错误是系统问题~与内存无关~
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。新配的电脑,128的固态硬盘啊 不够用,装几个游戏就老提示内存不足,_百度知道
新配的电脑,128的固态硬盘啊 不够用,装几个游戏就老提示内存不足,
新配的电脑,128的固态硬盘啊 不够用,装几个游戏就老提示内存不足,我想把原来电脑上的拆下来
装上午 会有兼容上的问题么?会影响点电源么
原来电脑的硬盘好像有些年头了!能用
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
不会不兼容,可以把原来的硬盘装在上面做从盘,固态就留着装系统,游戏也可以放固态,其他大文件都放到从盘
照这个结发结
采纳率:48%
为您推荐:
其他类似问题
固态硬盘的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。内存溢出的几种原因和解决办法
对于JVM的内存写过的文章已经有点多了,而且有点烂了,不过说那么多大多数在解决OOM的情况,于此,本文就只阐述这个内容,携带一些分析和理解和部分扩展内容,也就是JVM宕机中的一些问题,OK,下面说下OOM的常见情况:第一类内存溢出,也是大家认为最多,第一反应认为是的内存溢出,就是堆栈溢出:那什么样的情况就是堆栈溢出呢?当你看到下面的关键字的时候它就是堆栈溢出了:java.lang.OutOfMemoryError: ......java heap space.....也就是当你看到heap相关的时候就肯定是堆栈溢出了,此时如果代码没有问题的情况下,适当调整-Xmx和-Xms是可以避免的,不过一定是代码没有问题的前提,为什么会溢出呢,要么代码有问题,要么访问量太多并且每个访问的时间太长或者数据太多,导致数据释放不掉,因为垃圾回收器是要找到那些是垃圾才能回收,这里它不会认为这些东西是垃圾,自然不会去回收了;主意这个溢出之前,可能系统会提前先报错关键字为:java.lang.OutOfMemoryError:GC over head limit exceeded这种情况是当系统处于高频的GC状态,而且回收的效果依然不佳的情况,就会开始报这个错误,这种情况一般是产生了很多不可以被释放的对象,有可能是引用使用不当导致,或申请大对象导致,但是java heap space的内存溢出有可能提前不会报这个错误,也就是可能内存就直接不够导致,而不是高频GC.第二类内存溢出,PermGen的溢出,或者PermGen 满了的提示,你会看到这样的关键字:关键信息为:java.lang.OutOfMemoryError: PermGen space原因:系统的代码非常多或引用的第三方包非常多、或代码中使用了大量的常量、或通过intern注入常量、或者通过动态代码加载等方法,导致常量池的膨胀,虽然JDK 1.5以后可以通过设置对永久带进行回收,但是我们希望的是这个地方是不做GC的,它够用就行,所以一般情况下今年少做类似的操作,所以在面对这种情况常用的手段是:增加-XX:PermSize和-XX:MaxPermSize的大小。第三类内存溢出:在使用ByteBuffer中的allocateDirect()的时候会用到,很多javaNIO的框架中被封装为其他的方法溢出关键字:java.lang.OutOfMemoryError: Direct buffer memory如果你在直接或间接使用了ByteBuffer中的allocateDirect方法的时候,而不做clear的时候就会出现类似的问题,常规的引用程序IO输出存在一个内核态与用户态的转换过程,也就是对应直接内存与非直接内存,如果常规的应用程序你要将一个文件的内容输出到客户端需要通过OS的直接内存转换拷贝到程序的非直接内存(也就是heap中),然后再输出到直接内存由操作系统发送出去,而直接内存就是由OS和应用程序共同管理的,而非直接内存可以直接由应用程序自己控制的内存,jvm垃圾回收不会回收掉直接内存这部分的内存,所以要注意了哦。如果经常有类似的操作,可以考虑设置参数:-XX:MaxDirectMemorySize第四类内存溢出错误:溢出关键字:java.lang.StackOverflowError这个参数直接说明一个内容,就是-Xss太小了,我们申请很多局部调用的栈针等内容是存放在用户当前所持有的线程中的,线程在jdk 1.4以前默认是256K,1.5以后是1M,如果报这个错,只能说明-Xss设置得太小,当然有些厂商的JVM不是这个参数,本文仅仅针对Hotspot VM而已;不过在有必要的情况下可以对系统做一些优化,使得-Xss的值是可用的。第五类内存溢出错误:溢出关键字:java.lang.OutOfMemoryError: unable to create new native thread上面第四种溢出错误,已经说明了线程的内存空间,其实线程基本只占用heap以外的内存区域,也就是这个错误说明除了heap以外的区域,无法为线程分配一块内存区域了,这个要么是内存本身就不够,要么heap的空间设置得太大了,导致了剩余的内存已经不多了,而由于线程本身要占用内存,所以就不够用了,说明了原因,如何去修改,不用我多说,你懂的。第六类内存溢出:溢出关键字java.lang.OutOfMemoryError: request {} byte for {}out of swap这类错误一般是由于地址空间不够而导致。六大类常见溢出已经说明JVM中99%的溢出情况,要逃出这些溢出情况非常困难,除非一些很怪异的故障问题会发生,比如由于物理内存的硬件问题,导致了code cache的错误(在由byte code转换为native code的过程中出现,但是概率极低),这种情况内存 会被直接crash掉,类似还有swap的频繁交互在部分系统中会导致系统直接被crash掉,OS地址空间不够的话,系统根本无法启动,呵呵;JNI的滥用也会导致一些本地内存无法释放的问题,所以尽量避开JNI;socket连接数据打开过多的socket也会报类似:IOException: Too many open files等错误信息。JNI就不用多说了,尽量少用,除非你的代码太牛B了,我无话可说,呵呵,这种内存如果没有在被调用的语言内部将内存释放掉(如C语言),那么在进程结束前这些内存永远释放不掉,解决办法只有一个就是将进程kill掉。另外GC本身是需要内存空间的,因为在运算和中间数据转换过程中都需要有内存,所以你要保证GC的时候有足够的内存哦,如果没有的话GC的过程将会非常的缓慢。顺便这里就提及一些新的CMS GC的内容和策略(有点乱,每次写都很乱,但是能看多少看多少吧):首先我再写一次一前博客中的已经写过的内容,就是很多参数没啥建议值,建议值是自己在现场根据实际情况科学计算和测试得到的综合效果,建议值没有绝对好的,而且默认值很多也是有问题的,因为不同的版本和厂商都有很大的区别,默认值没有永久都是一样的,就像-Xss参数的变化一样,要看到你当前的java程序heap的大致情况可以这样看看(以下参数是随便设置的,并不是什么默认值):$sudo jmap -heap `pgrep java` Attaching to process ID 4280, please wait...Debugger attached successfully.Server compiler detected.JVM version is 19.1-b02using thread-local object allocation.Parallel GC with 8 thread(s)Heap Configuration:MinHeapFreeRatio = 40MaxHeapFreeRatio = 70MaxHeapSize =
(1024.0MB)NewSize =
(128.0MB)MaxNewSize =
(128.0MB)OldSize = .1875MB)NewRatio = 2SurvivorRatio = 8PermSize =
(128.0MB)MaxPermSize =
(256.0MB)Heap Usage:PS Young GenerationEden Space:capacity = .75MB)used = .625MB)free = .375MB)26.29% usedFrom Space:capacity = .9375MB)used = .59375MB)free = .406MB)1.6867% usedTo Space:capacity = .125MB)used = 0 (0.0MB)free = .125MB)0.0% usedPS Old Generationcapacity =
(896.0MB)used = .719MB)free =
(880.3MB)1.3124% usedPS Perm Generationcapacity =
(128.0MB)used = .375MB)free = .62MB)35.45% used付:sudo是需要拿到管理员权限,如果你的系统权限很大那么就不需要了,最后的grep java那个内容如果不对,可以直接通过jps或者ps命令将和java相关的进程号直接写进去,如:java -map 4280,这个参数其实完全可以通过jstat工具来替代,而且看到的效果更加好,这个参数在线上应用中,尽量少用(尤其是高并发的应用中),可能会触发JVM的bug,导致应用挂起;在jvm 1.6u14后可以编写任意一段程序,然后在运行程序的时候,增加参数为:-XX:+PrintFlagsFinal来输出当前JVM中运行时的参数值,或者通过jinfo来查看,jinfo是非常强大的工具,可以对部分参数进行动态修改,当然内存相关的东西是不能修改的,只能增加一些不是很相关的参数,有关JVM的工具使用,后续文章中如果有机会我们再来探讨,不是本文的重点;补充:关于参数的默认值对不同的JVM版本、不同的厂商、运行于不同的环境(一般和位数有关系)默认值会有区别。OK,再说下反复的一句,没有必要的话就不要乱设置参数,参数不是拿来玩的,默认的参数对于这门JDK都是有好处的,关键是否适合你的应用场景,一般来讲你常规的只需要设置以下几个参数就可以了:-server 表示为服务器端,会提供很多服务器端默认的配置,如并行回收,而服务器上一般这个参数都是默认的,所以都是可以省掉,与之对应的还有一个-client参数,一般在64位机器上,JVM是默认启动-server参数,也就是默认启动并行GC的,但是是ParallelGC而不是ParallelOldGC,两者算法不同(后面会简单说明下),而比较特殊的是windows 32位上默认是-client,这两个的区别不仅仅是默认的参数不一样,在jdk包下的jre包下一般会包含client和server包,下面分别对应启动的动态链接库,而真正看到的java、javac等相关命令指示一个启动导向,它只是根据命令找到对应的JVM并传入jvm中进行启动,也就是看到的java.exe这些文件并不是jvm;说了这么多,最终总结一下就是,-server和-client就是完全不同的两套VM,一个用于桌面应用,一个用于服务器的。-Xmx 为Heap区域的最大值-Xms 为Heap区域的初始值,线上环境需要与-Xmx设置为一致,否则capacity的值会来回飘动,飘得你心旷神怡,你懂的。-Xss(或-ss) 这个其实也是可以默认的,如果你真的觉得有设置的必要,你就改下吧,1.5以后是1M的默认大小(指一个线程的native空间),如果代码不多,可以设置小点来让系统可以接受更大的内存。注意,还有一个参数是-XX:ThreadStackSize,这两个参数在设置的过程中如果都设置是有冲突的,一般按照JVM常理来说,谁设置在后面,就以谁为主,但是最后发现如果是在1.6以上的版本,-Xss设置在后面的确都是以-Xss为主,但是要是-XX:ThreadStackSize设置在后面,主线程还是为-Xss为主,而其它线程以-XX:ThreadStackSize为主,主线程做了一个特殊判定处理;单独设置都是以本身为主,-Xss不设置也不会采用其默认值,除非两个都不设置会采用-Xss的默认值。另外这个参数针对于hotspot的vm,在IBM的jvm中,还有一个参数为-Xoss,主要原因是IBM在对栈的处理上有操作数栈和方法栈等各种不同的栈种类,而hotspot不管是什么栈都放在一个私有的线程内部的,不区分是什么栈,所以只需要设置一个参数,而IBM的J9不是这样的;有关栈上的细节,后续我们有机会专门写文章来说明。-XX:PermSize与-XX:MaxPermSize两个包含了class的装载的位置,或者说是方法区(但不是本地方法区),在Hotspot默认情况下为64M,主意全世界的JVM只有hostpot的VM才有Perm的区域,或者说只有hotspot才有对用户可以设置的这块区域,其他的JVM都没有,其实并不是没有这块区域,而是这块区域没有让用户来设置,其实这块区域本身也不应该让用户来设置,我们也没有一个明确的说法这块空间必须要设置多大,都是拍脑袋设置一个数字,如果发布到线上看下如果用得比较多,就再多点,如果用的少,就减少点,而这块区域和性能关键没有多大关系,只要能装下就OK,并且时不时会因为Perm不够而导致Full GC,所以交给开发者来调节这个参数不知道是怎么想的;所以Oracle将在新一代JVM中将这个区域彻底删掉,也就是对用户透明,G1的如果真正稳定起来,以后JVM的启动参数将会非常简单,而且理论上管理再大的内存也是没有问题的,其实G1(garbage first,一种基于region的垃圾收集回收器)已经在hotspot中开始有所试用,不过目前效果不好,还不如CMS呢,所以只是试用,G1已经作为ORACLE对JVM研发的最高重点,CMS自现在最高版本后也不再有新功能(可以修改bug),该项目已经进行5年,尚未发布正式版,CMS是四五年前发布的正式版,但是是最近一两年才开始稳定,而G1的复杂性将会远远超越CMS,所以要真正使用上G1还有待考察,全世界目前只有IBM J9真正实现了G1论文中提到的思想(论文于05年左右发表),IBM已经将J9应用于websphere中,但是并不代表这是全世界最好的jvm,全世界最好的jvm是Azul(无停顿垃圾回收算法和一个零开销的诊断/监控工具),几乎可以说这个jvm是没有暂停的,在全世界很多顶尖级的公司使用,不过价格非常贵,不能直接使用,目前这个jvm的主导者在研究JRockit,而目前hotspot和JRockit都是Oracle的,所以他们可能会合并,所以我们应该对JVM的性能充满信心。也就是说你常用的情况下只需要设置4个参数就OK了,除非你的应用有些特殊,否则不要乱改,那么来看看一些其他情况的参数吧:先来看个不大常用的,就是大家都知道JVM新的对象应该说几乎百分百的在Eden里面,除非Eden真的装不下,我们不考虑这种变态的问题,因为线上环境Eden区域都是不小的,来降低GC的次数以及全局 GC的概率;而JVM习惯将内存按照较为连续的位置进行分配,这样使得有足够的内存可以被分配,减少碎片,那么对于内存最后一个位置必然就有大量的征用问题,JVM在高一点的版本里面提出了为每个线程分配一些私有的区域来做来解决这个问题,而1.5后的版本还可以动态管理这些区域,那么如何自己设置和查看这些区域呢,看下英文全称为:Thread Local Allocation Buffer,简称就是:TLAB,即内存本地的持有的buffer,设置参数有:-XX:+UseTLAB 启用这种机制的意思-XX:TLABSize=&size in kb& 设置大小,也就是本地线程中的私有区域大小(只有这个区域放不下才会到Eden中去申请)。-XX:+ResizeTLAB 是否启动动态修改这几个参数在多CPU下非常有用。-XX:+PrintTLAB 可以输出TLAB的内容。下面再闲扯些其它的参数:如果你需要对Yong区域进行并行回收应该如何修改呢?在jdk1.5以后可以使用参数:-XX:+UseParNewGC注意: 与它冲突的参数是:-XX:+UseParallelOldGC和-XX:+UseSerialGC,如果需要用这个参数,又想让整个区域是并行回收的,那么就使用-XX:+UseConcMarkSweepGC参数来配合,其实这个参数在使用了CMS后,默认就会启动该参数,也就是这个参数在CMS GC下是无需设置的,后面会提及到这些参数。默认服务器上的对Full并行GC策略为(这个时候Yong空间回收的时候启动PSYong算法,也是并行回收的):-XX:+UseParallelGC另外,在jdk1.5后出现一个新的参数如下,这个对Yong的回收算法和上面一样,对Old区域会有所区别,上面对Old回收的过程中会做一个全局的Compact,也就是全局的压缩操作,而下面的算法是局部压缩,为什么要局部压缩呢?是因为JVM发现每次压缩后再逻辑上数据都在Old区域的左边位置,申请的时候从左向右申请,那么生命力越长的对象就一般是靠左的,所以它认为左边的对象就是生命力很强,而且较为密集的,所以它针对这种情况进行部分密集,但是这两种算法mark阶段都是会暂停的,而且存活的对象越多活着的越多;而ParallelOldGC会进行部分压缩算法(主意一点,最原始的copy算法是不需要经过mark阶段,因为只需要找到一个或活着的就只需要做拷贝就可以,而Yong区域借用了Copy算法,只是唯一的区别就是传统的copy算法是采用两个相同大小的内存来拷贝,浪费空间为50%,所以分代的目标就是想要实现很多优势所在,认为新生代85%以上的对象都应该是死掉的,所以S0和S1一般并不是很大),该算法为jdk 1.5以后对于绝大部分应用的最佳选择。-XX:+UseParallelOldGC-XX:ParallelGCThread=12:并行回收的线程数,最好根据实际情况而定,因为线程多往往存在征用调度和上下文切换的开销;而且也并非CPU越多线程数也可以设置越大,一般设置为12就再增加用处也不大,主要是算法本身内部的征用会导致其线程的极限就是这样。设置Yong区域大小:-Xmn Yong区域的初始值和最大值一样大-XX:NewSize和-XX:MaxNewSize如果设置以为一样大就是和-Xmn,在JRockit中会动态变化这些参数,根据实际情况有可能会变化出两个Yong区域,或者没有Yong区域,有些时候会生出来一个半长命对象区域;这里除了这几个参数外,还有一个参数是NewRatio是设置Old/Yong的倍数的,这几个参数都是有冲突的,服务器端建议是设置-Xmn就可以了,如果几个参数全部都有设置,-Xmn和-XX:NewSize与-XX:MaxNewSize将是谁设置在后面,以谁的为准,而-XX:NewSize -XX:MaxNewSize与-XX:NewRatio时,那么参数设置的结果可能会以下这样的(jdk 1.4.1后):min(MaxNewSize,max(NewSize, heap/(NewRatio+1)))-XX:NewRatio为Old区域为Yong的多少倍,间接设置Yong的大小,1.6中如果使用此参数,则默认会在适当时候被动态调整,具体请看下面参数UseAdaptiveSizepollcy 的说明。三个参数不要同时设置,因为都是设置Yong的大小的。-XX:SurvivorRatio:该参数为Eden与两个求助空间之一的比例,注意Yong的大小等价于Eden + S0 + S1,S0和S1的大小是等价的,这个参数为Eden与其中一个S区域的大小比例,如参数为8,那么Eden就占用Yong的80%,而S0和S1分别占用10%。以前的老版本有一个参数为:-XX:InitialSurivivorRatio,如果不做任何设置,就会以这个参数为准,这个参数的默认值就是8,不过这个参数并不是Eden/Survivor的大小,而是Yong/Survivor,所以所以默认值8,代表每一个S区域的空间大小为Yong区域的12.5%而不是10%。另外顺便提及一下,每次大家看到GC日志的时候,GC日志中的每个区域的最大值,其中Yong的空间最大值,始终比设置的Yong空间的大小要小一点,大概是小12.5%左右,那是因为每次可用空间为Eden加上一个Survivor区域的大小,而不是整个Yong的大小,因为可用空间每次最多是这样大,两个Survivor区域始终有一块是空的,所以不会加上两个来计算。-XX:MaxTenuringThreshold=15:在正常情况下,新申请的对象在Yong区域发生多少次GC后就会被移动到Old(非正常就是S0或S1放不下或者不太可能出现的Eden都放不下的对象),这个参数一般不会超过16(因为计数器从0开始计数,所以设置为15的时候相当于生命周期为16)。要查看现在的这个值的具体情况,可以使用参数:-XX:+PrintTenuringDistribution通过上面的jmap应该可以看出我的机器上的MinHeapFreeRatio和MaxHeapFreeRatio分别为40个70,也就是大家经常说的在GC后剩余空间小于40%时capacity开始增大,而大于70%时减小,由于我们不希望让它移动,所以这两个参数几乎没有意义,如果你需要设置就设置参数为:-XX:MinHeapFreeRatio=40-XX:MaxHeapFreeRatio=70JDK 1.6后有一个动态调节板块的,当然如果你的每一个板块都是设置固定值,这个参数也没有用,不过如果是非固定的,建议还是不要动态调整,默认是开启的,建议将其关掉,参数为:-XX:+UseAdaptiveSizepollcy 建议使用-XX:-UseAdaptiveSizepollcy关掉,为什么当你的参数设置了NewRatio、Survivor、MaxTenuringThreshold这几个参数如果在启动了动态更新情况下,是无效的,当然如果你设置-Xmn是有效的,但是如果设置的比例的话,初始化可能会按照你的参数去运行,不过运行过程中会通过一定的算法动态修改,监控中你可能会发现这些参数会发生改变,甚至于S0和S1的大小不一样。如果启动了这个参数,又想要跟踪变化,那么就使用参数:-XX:+PrintAdaptiveSizePolicy上面已经提到,javaNIO中通过Direct内存来提高性能,这个区域的大小默认是64M,在适当的场景可以设置大一些。-XX:MaxDirectMemorySize一个不太常用的参数:-XX:+ScavengeBeforeFullGC 默认是开启状态,在full GC前先进行minor GC。对于java堆中如果要设置大页内存,可以通过设置参数:付:此参数必须在操作系统的内核支持的基础上,需要在OS级别做操作为:echo 1024 & /proc/sys/vm/nr_hugepagesecho
& /proc/sys/kernel/shmmax-XX:+UseLargePages-XX:LargePageSizeInBytes此时整个JVM都将在这块内存中,否则全部不在这块内存中。javaIO的临时目录设置-Djava.io.tmpdirjstack会去寻找/tmp/hsperfdata_admin下去寻找与进程号相同的文件,32位机器上是没有问题的,64为机器的是有BUG的,在jdk 1.6u23版本中已经修复了这个bug,如果你遇到这个问题,就需要升级JDK了。还记得上次说的平均晋升大小吗,在并行GC时,如果平均晋升大小大于old剩余空间,则发生full GC,那么当小于剩余空间时,也就是平均晋升小于剩余空间,但是剩余空间小于eden + 一个survivor的空间时,此时就依赖于参数:-XX:-HandlePromotionFailure启动该参数时,上述情况成立就发生minor gc(YGC),大于则发生full gc(major gc)。一般默认直接分配的对象如果大于Eden的一半就会直接晋升到old区域,但是也可以通过参数来指定:-XX:PretenureSizeThreshold=2m 我个人不建议使用这个参数也就是当申请对象大于这个值就会晋升到old区域。传说中GC时间的限制,一个是通过比例限制,一个是通过最大暂停时间限制,但是GC时间能限制么,呵呵,在增量中貌似可以限制,不过不能限制住GC总体的时间,所以这个参数也不是那么关键。-XX:GCTimeRatio=-XX:MaxGCPauseMillis-XX:GCTimeLimit要看到真正暂停的时间就一个是看GCDetail的日志,另一个是设置参数看:-XX:+PrintGCApplicationStoppedTime有些人,有些人就是喜欢在代码里面里头写System.gc(),耍酷,这个不是测试程序是线上业务,这样将会导致N多的问题,不多说了,你应该懂的,不懂的话看下书吧,而RMI是很不听话的一个鸟玩意,EJB的框架也是基于RMI写的,RMI为什么不听话呢,就是它自己在里面非要搞个System.gc(),哎,为了放置频繁的做,频繁的做,你就将这个命令的执行禁用掉吧,当然程序不用改,不然那些EJB都跑步起来了,呵呵:-XX:+DisableExplicitGC 默认是没有禁用掉,写成+就是禁用掉的了,但是有些时候在使用allocateDirect的时候,很多时候还真需要System.gc来强制回收这块资源。内存溢出时导出溢出的错误信息:-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=/home/xieyu/logs/ 这个参数指定导出时的路径,不然导出的路径就是虚拟机的目标位置,不好找了,默认的文件名是:java_pid&进程号&.hprof,这个文件可以类似使用jmap -dump:file=....,format=b &pid&来dump类似的内容,文件后缀都是hprof,然后下载mat工具进行分析即可(不过内存有多大dump文件就多大,而本地分析的时候内存也需要那么大,所以很多时候下载到本地都无法启动是很正常的),后续文章有机会我们来说明这些工具,另外jmap -dump参数也不要经常用,会导致应用挂起哦;另外此参数只会在第一次输出OOM的时候才会进行堆的dump操作(java heap的溢出是可以继续运行再运行的程序的,至于web应用是否服务要看应用服务器自身如何处理,而c heap区域的溢出就根本没有dump的机会,因为直接就宕机了,目前系统无法看到c heap的大小以及内部变化,要看大小只能间接通过看JVM进程的内存大小(top或类似参数),这个大小一般会大于heap+perm的大小,多余的部分基本就可以认为是c heap的大小了,而看内部变化呢只有google perftools可以达到这个目的),如果内存过大这个dump操作将会非常长,所以hotspot如果以后想管理大内存,这块必须有新的办法出来。最后,用dump出来的文件,通过mat分析出来的结果往往有些时候难以直接确定到底哪里有问题,可以看到的维度大概有:那个类使用的内存最多,以及每一个线程使用的内存,以及线程内部每一个调用的类和方法所使用的内存,但是很多时候无法判定到底是程序什么地方调用了这个类或者方法,因为这里只能看到最终消耗内存的类,但是不知道谁使用了它,一个办法是扫描代码,但是太笨重,而且如果是jar包中调用了就不好弄了,另一种方法是写agent,那么就需要相应的配合了,但是有一个非常好的工具就是btrace工具(jdk 1.7貌似还不支持),可以跟踪到某个类的某个方法被那些类中的方法调用过,那这个问题就好说了,只要知道开销内存的是哪一个类,就能知道谁调用过它,OK,关于btrace的不是本文重点,网上都有,后续文章有机会再探讨,原理:No performance impact during runtime(无性能影响)Dumping a –Xmx512m heapCreate a 512MB .hprof file(512M内存就dump出512M的空间大小)JVM is “dead” during dumping(死掉时dump)Restarting JVM during this dump will cause unusable .hprof file(重启导致文件不可用)注明的NUMA架构,在JVM中开始支持,当然也需要CPU和OS的支持才可以,需要设置参数为:-XX:+UseNUMA 必须在并行GC的基础上才有的老年代无法分配区域的最大等待时间为(默认值为0,但是也不要去动它):-XX:GCExpandToAllocateDelayMillis让JVM中所有的set和get方法转换为本地代码:-XX:+UseFastAccessorMethods以时间戳输出Heap的利用率-XX:+PrintHeapUsageOverTime在64bit的OS上面(其实一般达不到57位左右),由于指针会放大为8个byte,所以会导致空间使用增加,当然,如果内存够大,就没有问题,但是如果升级到64bit系统后,只是想让内存达到4G或者8G,那么就完全可以通过很多指针压缩为4byte就OK了,所以在提供以下参数(本参数于jdk 1.6u23后使用,并自动开启,所以也不需要你设置,知道就OK):-XX:+UseCompressedOops 请注意:这个参数默认在64bit的环境下默认启动,但是如果JVM的内存达到32G后,这个参数就会默认为不启动,因为32G内存后,压缩就没有多大必要了,要管理那么大的内存指针也需要很大的宽度了。后台JIT编译优化启动-XX:+BackgroundCompilation如果你要输出GC的日志以及时间戳,相关的参数有:-XX:+PrintGCDetails 输出GC的日志详情,包含了时间戳-XX:+PrintGCTimeStamps 输出GC的时间戳信息,按照启动JVM后相对时间的每次GC的相对秒值(毫秒在小数点后面),也就是每次GC相对启动JVM启动了多少秒后发生了这次GC-XX:+PrintGCDateStamps输出GC的时间信息,会按照系统格式的日期输出每次GC的时间-XX:+PrintGCTaskTimeStamps输出任务的时间戳信息,这个细节上比较复杂,后续有文章来探讨。-XX:-TraceClassLoading 跟踪类的装载-XX:-TraceClassUnloading 跟踪类的卸载-XX:+PrintHeapAtGC 输出GC后各个堆板块的大小。将常量信息GC信息输出到日志文件:-Xloggc:/home/xieyu/logs/gc.log现在面对大内存比较流行是是CMS GC(最少1.5才支持),首先明白CMS的全称是什么,不是传统意义上的内容管理系统(Content Management System)哈,第一次我也没看懂,它的全称是:Concurrent Mark Sweep,三个单词分别代表并发、标记、清扫(主意这里没有compact操作,其实CMS GC的确没有compact操作),也就是在程序运行的同时进行标记和清扫工作,至于它的原理前面有提及过,只是有不同的厂商在上面做了一些特殊的优化,比如一些厂商在标记根节点的过程中,标记完当前的根,那么这个根下面的内容就不会被暂停恢复运行了,而移动过程中,通过读屏障来看这个内存是不是发生移动,如果在移动稍微停一下,移动过去后再使用,hotspot还没这么厉害,暂停时间还是挺长的,只是相对其他的GC策略在面对大内存来讲是不错的选择。下面看一些CMS的策略(并发GC总时间会比常规的并行GC长,因为它是在运行时去做GC,很多资源征用都会影响其GC的效率,而总体的暂停时间会短暂很多很多,其并行线程数默认为:(上面设置的并行线程数 + 3)/ 4付:CMS是目前Hotspot管理大内存最好的JVM,如果是常规的JVM,最佳选择为ParallelOldGC,如果必须要以响应时间为准,则选择CMS,不过CMS有两个隐藏的隐患:1、CMS GC虽然是并发且并行运行的GC,但是初始化的时候如果采用默认值92%(JVM 1.5的白皮书上描述为68%其实是错误的,1.6是正确的),就很容易出现问题,因为CMS GC仅仅针对Old区域,Yong区域使用ParNew算法,也就是Old的CMS回收和Yong的回收可以同时进行,也就是回收过程中Yong有可能会晋升对象Old,并且业务也可以同时运行,所以92%基本开始启动CMS GC很有可能old的内存就不够用了,当内存不够用的时候,就启动Full GC,并且这个Full GC是串行的,所以如果弄的不好,CMS会比并行GC更加慢,为什么要启用串行是因为CMS GC、并行GC、串行GC的继承关系决定的,简单说就是它没办法去调用并行GC的代码,细节说后续有文章来细节说明),建议这个值设置为70%左右吧,不过具体时间还是自己决定。2、CMS GC另一个大的隐患,其实不看也差不多应该清楚,看名字就知道,就是不会做Compact操作,它最恶心的地方也在这里,所以上面才说一般的应用都不使用它,它只有内存垃圾非常多,多得无法分配晋升的空间的时候才会出现一次compact,但是这个是Full GC,也就是上面的串行,很恐怖的,所以内存不是很大的,不要考虑使用它,而且它的算法十分复杂。还有一些小的隐患是:和应用一起征用CPU(不过这个不是大问题,增加CPU即可)、整个运行过程中时间比并行GC长(这个也不是大问题,因为我们更加关心暂停时间而不是运行时间,因为暂停会影响非常多的业务)。启动CMS为全局GC方法(注意这个参数也不能上面的并行GC进行混淆,Yong默认是并行的,上面已经说过-XX:+UseConcMarkSweepGC在并发GC下启动增量模式,只能在CMS GC下这个参数才有效。-XX:+CMSIncrementalMode启动自动调节duty cycle,即在CMS GC中发生的时间比率设置,也就是说这段时间内最大允许发生多长时间的GC工作是可以调整的。-XX:+CMSIncrementalPacing在上面这个参数设定后可以分别设置以下两个参数(参数设置的比率,范围为0-100):-XX:CMSIncrementalDutyCycleMin=0-XX:CMSIncrementalDutyCycle=10增量GC上还有一个保护因子(CMSIncrementalSafetyFactor),不太常用;CMSIncrementalOffset提供增量GC连续时间比率的设置;CMSExpAvgFactor为增量并发的GC增加权重计算。-XX:CMSIncrementalSafetyFactor=-XX:CMSIncrementalOffset= -XX:CMSExpAvgFactor=是否启动并行CMS GC(默认也是开启的)-XX:+CMSParallelRemarkEnabled要单独对CMS GC设置并行线程数就设置(默认也不需要设置):-XX:ParallelCMSThreads对PernGen进行垃圾回收:JDK 1.5在CMS GC基础上需要设置参数(也就是前提是CMS GC才有):-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled1.6以后的版本无需设置:-XX:+CMSPermGenSweepingEnabled,注意,其实一直以来Full GC都会触发对Perm的回收过程,CMS GC需要有一些特殊照顾,虽然VM会对这块区域回收,但是Perm回收的条件几乎不太可能实现,首先需要这个类的classloader必须死掉,才可以将该classloader下所有的class干掉,也就是要么全部死掉,要么全部活着;另外,这个classloader下的class没有任何object在使用,这个也太苛刻了吧,因为常规的对象申请都是通过系统默认的,应用服务器也有自己默认的classloader,要让它死掉可能性不大,如果这都死掉了,系统也应该快挂了。CMS GC因为是在程序运行时进行GC,不会暂停,所以不能等到不够用的时候才去开启GC,官方说法是他们的默认值是68%,但是可惜的是文档写错了,经过很多测试和源码验证这个参数应该是在92%的时候被启动,虽然还有8%的空间,但是还是很可怜了,当CMS发现内存实在不够的时候又回到常规的并行GC,所以很多人在没有设置这个参数的时候发现CMS GC并没有神马优势嘛,和并行GC一个鸟样子甚至于更加慢,所以这个时候需要设置参数(这个参数在上面已经说过,启动CMS一定要设置这个参数):-XX:CMSInitiatingOccupancyFraction=70这样保证Old的内存在使用到70%的时候,就开始启动CMS了;如果你真的想看看默认值,那么就使用参数:-XX:+PrintCMSInitiationStatistics 这个变量只有JDK 1.6可以使用 1.5不可以,查看实际值-XX:+PrintCMSStatistics;另外,还可以设置参数-XX:CMSInitiatingPermOccupancyFraction来设置Perm空间达到多少时启动CMS GC,不过意义不大。JDK 1.6以后有些时候启动CMS GC是根据计算代价进行启动,也就是不一定按照你指定的参数来设置的,如果你不想让它按照所谓的成本来计算GC的话,那么你就使用一个参数:-XX:+UseCMSInitiatingOccupancyOnly,默认是false,它就只会按照你设置的比率来启动CMS GC了。如果你的程序中有System.gc以及设置了ExplicitGCInvokesConcurrent在jdk 1.6中,这种情况使用NIO是有可能产生问题的。启动CMS GC的compation操作,也就是发生多少次后做一次全局的compaction:-XX:+UseCMSCompactAtFullCollection-XX:CMSFullGCsBeforeCompaction:发生多少次CMS Full GC,这个参数最好不要设置,因为要做compaction的话,也就是真正的Full GC是串行的,非常慢,让它自己去决定什么时候需要做compaction。-XX:CMSMaxAbortablePrecleanTime=5000 设置preclean步骤的超时时间,单位为毫秒,preclean为cms gc其中一个步骤,关于cms gc步骤比较多,本文就不细节探讨了。并行GC在mark阶段,可能会同时发生minor GC,old区域也可能发生改变,于是并发GC会对发生了改变的内容进行remark操作,这个触发的条件是:-XX:CMSScheduleRemarkEdenSizeThreshold-XX:CMSScheduleRemarkEdenPenetration即Eden区域多大的时候开始触发,和eden使用量超过百分比多少的时候触发,前者默认是2M,后者默认是50%。但是如果长期不做remark导致old做不了,可以设置超时,这个超时默认是5秒,可以通过参数:-XX:CMSMaxAbortablePrecleanTime-XX:+ExplicitGCInvokesConcurrent 在显示发生GC的时候,允许进行并行GC。-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses 几乎和上面一样,只不过多一个对Perm区域的回收而已。补充:其实JVM还有很多的版本,很多的厂商,与其优化的原则,随便举两个例子hotspot在GC中做的一些优化(这里不说代码的编译时优化或运行时优化):Eden申请的空间对象由Old区域的某个对象的一个属性指向(也就是Old区域的这个空间不回收,Eden这块就没有必要考虑回收),所以Hotspot在CPU写上面,做了一个屏障,当发生赋值语句的时候(对内存来讲赋值就是一种写操作),如果发现是一个新的对象由Old指向Eden,那么就会将这个对象记录在一个卡片机里面,这个卡片机是有很多512字节的卡片组成,当在YGC过程中,就基本不会去移动或者管理这块对象(付:这种卡片机会在CMS GC的算法中使用,不过和这个卡片不是放在同一个地方的,也是CMS GC的关键,对于CMS GC的算法细节描述,后续文章我们单独说明)。Old区域对于一些比较大的对象,JVM就不会去管理个对象,也就是compact过程中不会去移动这块对象的区域等等吧。以上大部分参数为hotspot的自带关于性能的参数,参考版本为JDK 1.5和1.6的版本,很多为个人经验说明,不足以说明所有问题,如果有问题,欢迎探讨;另外,JDK的参数是不是就只有这些呢,肯定并不是,我知道的也不止这些,但是有些觉得没必要说出来的参数和一些数学运算的参数我就不想给出来了,比如像禁用掉GC的参数有神马意义,我们的服务器要是把这个禁用掉干个屁啊,呵呵,做测试还可以用这玩玩,让它不做GC直接溢出;还有一些什么计算因子啥的,还有很多复杂的数学运算规则,要是把这个配置明白了,就太那个了,而且一般情况下也没那个必要,JDK到现在的配置参数多达上500个以上,要知道完的话慢慢看吧,不过意义不大,而且要知道默认值最靠谱的是看源码而不是看文档,官方文档也只能保证绝大部是正确的,不能保证所有的是正确的。本文最后追加在jdk 1.6u 24后通过上面说明的-XX:+PrintFlagsFinal输出的参数以及默认值(还是那句话,在不同的平台上是不一样的),输出的参数如下,可以看看JVM的参数是相当的多,参数如此之多,你只需要掌握关键即可,参数还有很多有冲突的,不要纠结于每一个参数的细节:$java -XX:+PrintFlagsFinaluintx AdaptivePermSizeWeight = 20 {product}uintx AdaptiveSizeDecrementScaleFactor = 4 {product}uintx AdaptiveSizeMajorGCDecayTimeScale = 10 {product}uintx AdaptiveSizePausePolicy = 0 {product}uintx AdaptiveSizePolicyCollectionCostMargin = 50 {product}uintx AdaptiveSizePolicyInitializingSteps = 20 {product}uintx AdaptiveSizePolicyOutputInterval = 0 {product}uintx AdaptiveSizePolicyWeight = 10 {product}uintx AdaptiveSizeThroughPutPolicy = 0 {product}uintx AdaptiveTimeWeight = 25 {product}bool AdjustConcurrency = false {product}bool AggressiveOpts = false {product}intx AliasLevel = 3 {product}intx AllocatePrefetchDistance = -1 {product}intx AllocatePrefetchInstr = 0 {product}intx AllocatePrefetchLines = 1 {product}intx AllocatePrefetchStepSize = 16 {product}intx AllocatePrefetchStyle = 1 {product}bool AllowJNIEnvProxy = false {product}bool AllowParallelDefineClass = false {product}bool AllowUserSignalHandlers = false {product}bool AlwaysActAsServerClassMachine = false {product}bool AlwaysCompileLoopMethods = false {product}intx AlwaysInflate = 0 {product}bool AlwaysLockClassLoader = false {product}bool AlwaysPreTouch = false {product}bool AlwaysRestoreFPU = false {product}bool AlwaysTenure = false {product}bool AnonymousClasses = false {product}bool AssertOnSuspendWaitFailure = false {product}intx Atomics = 0 {product}uintx AutoGCSelectPauseMillis = 5000 {product}intx BCEATraceLevel = 0 {product}intx BackEdgeThreshold = 100000 {pd product}bool BackgroundCompilation = true {pd product}uintx BaseFootPrintEstimate =
{product}intx BiasedLockingBulkRebiasThreshold = 20 {product}intx BiasedLockingBulkRevokeThreshold = 40 {product}intx BiasedLockingDecayTime = 25000 {product}intx BiasedLockingStartupDelay = 4000 {product}bool BindGCTaskThreadsToCPUs = false {product}bool BlockOffsetArrayUseUnallocatedBlock = false {product}bool BytecodeVerificationLocal = false {product}bool BytecodeVerificationRemote = true {product}intx CICompilerCount = 1 {product}bool CICompilerCountPerCPU = false {product}bool CITime = false {product}bool CMSAbortSemantics = false {product}uintx CMSAbortablePrecleanMinWorkPerIteration = 100 {product}intx CMSAbortablePrecleanWaitMillis = 100 {product}uintx CMSBitMapYieldQuantum =
{product}uintx CMSBootstrapOccupancy = 50 {product}bool CMSClassUnloadingEnabled = false {product}uintx CMSClassUnloadingMaxInterval = 0 {product}bool CMSCleanOnEnter = true {product}bool CMSCompactWhenClearAllSoftRefs = true {product}uintx CMSConcMarkMultiple = 32 {product}bool CMSConcurrentMTEnabled = true {product}uintx CMSCoordinatorYieldSleepCount = 10 {product}bool CMSDumpAtPromotionFailure = false {product}uintx CMSExpAvgFactor = 50 {product}bool CMSExtrapolateSweep = false {product}uintx CMSFullGCsBeforeCompaction = 0 {product}uintx CMSIncrementalDutyCycle = 10 {product}uintx CMSIncrementalDutyCycleMin = 0 {product}bool CMSIncrementalMode = false {product}uintx CMSIncrementalOffset = 0 {product}bool CMSIncrementalPacing = true {product}uintx CMSIncrementalSafetyFactor = 10 {product}uintx CMSIndexedFreeListReplenish = 4 {product}intx CMSInitiatingOccupancyFraction = -1 {product}intx CMSInitiatingPermOccupancyFraction = -1 {product}intx CMSIsTooFullPercentage = 98 {product}double CMSLargeCoalSurplusPercent = {product}double CMSLargeSplitSurplusPercent = {product}bool CMSLoopWarn = false {product}uintx CMSMaxAbortablePrecleanLoops = 0 {product}intx CMSMaxAbortablePrecleanTime = 5000 {product}uintx CMSOldPLABMax = 1024 {product}uintx CMSOldPLABMin = 16 {product}uintx CMSOldPLABNumRefills = 4 {product}uintx CMSOldPLABReactivityCeiling = 10 {product}uintx CMSOldPLABReactivityFactor = 2 {product}bool CMSOldPLABResizeQuicker = false {product}uintx CMSOldPLABToleranceFactor = 4 {product}bool CMSPLABRecordAlways = true {product}uintx CMSParPromoteBlocksToClaim = 16 {product}bool CMSParallelRemarkEnabled = true {product}bool CMSParallelSurvivorRemarkEnabled = true {product}bool CMSPermGenPrecleaningEnabled = true {product}uintx CMSPrecleanDenominator = 3 {product}uintx CMSPrecleanIter = 3 {product}uintx CMSPrecleanNumerator = 2 {product}bool CMSPrecleanRefLists1 = true {product}bool CMSPrecleanRefLists2 = false {product}bool CMSPrecleanSurvivors1 = false {product}bool CMSPrecleanSurvivors2 = true {product}uintx CMSPrecleanThreshold = 1000 {product}bool CMSPrecleaningEnabled = true {product}bool CMSPrintChunksInDump = false {product}bool CMSPrintObjectsInDump = false {product}uintx CMSRemarkVerifyVariant = 1 {product}bool CMSReplenishIntermediate = true {product}uintx CMSRescanMultiple = 32 {product}uintx CMSRevisitStackSize = 1048576 {product}uintx CMSSamplingGrain = 16384 {product}bool CMSScavengeBeforeRemark = false {product}uintx CMSScheduleRemarkEdenPenetration = 50 {product}uintx CMSScheduleRemarkEdenSizeThreshold = 2097152 {product}uintx CMSScheduleRemarkSamplingRatio = 5 {product}double CMSSmallCoalSurplusPercent = {product}double CMSSmallSplitSurplusPercent = {product}bool CMSSplitIndexedFreeListBlocks = true {product}intx CMSTriggerPermRatio = 80 {product}intx CMSTriggerRatio = 80 {product}bool CMSUseOldDefaults = false {product}intx CMSWaitDuration = 2000 {product}uintx CMSWorkQueueDrainThreshold = 10 {product}bool CMSYield = true {product}uintx CMSYieldSleepCount = 0 {product}intx CMSYoungGenPerWorker =
{product}uintx CMS_FLSPadding = 1 {product}uintx CMS_FLSWeight = 75 {product}uintx CMS_SweepPadding = 1 {product}uintx CMS_SweepTimerThresholdMillis = 10 {product}uintx CMS_SweepWeight = 75 {product}bool CheckJNICalls = false {product}bool ClassUnloading = true {product}intx ClearFPUAtPark = 0 {product}bool ClipInlining = true {product}uintx CodeCacheExpansionSize = 32768 {pd product}uintx CodeCacheFlushingMinimumFreeSpace = 1536000 {product}uintx CodeCacheMinimumFreeSpace = 512000 {product}bool CollectGen0First = false {product}bool CompactFields = true {product}intx CompilationPolicyChoice = 0 {product}intx CompilationRepeat = 0 {C1 product}ccstrlist CompileCommand = {product}ccstr CompileCommandFile = {product}ccstrlist CompileOnly = {product}intx CompileThreshold = 1500 {pd product}bool CompilerThreadHintNoPreempt = true {product}intx CompilerThreadPriority = -1 {product}intx CompilerThreadStackSize = 0 {pd product}uintx ConcGCThreads = 0 {product}bool ConvertSleepToYield = true {pd product}bool ConvertYieldToSleep = false {product}bool DTraceAllocProbes = false {product}bool DTraceMethodProbes = false {product}bool DTraceMonitorProbes = false {product}uintx DefaultMaxRAMFraction = 4 {product}intx DefaultThreadPriority = -1 {product}intx DeferPollingPageLoopCount = -1 {product}intx DeferThrSuspendLoopCount = 4000 {product}bool DeoptimizeRandom = false {product}bool DisableAttachMechanism = false {product}bool DisableExplicitGC = false {product}bool DisplayVMOutputToStderr = false {product}bool DisplayVMOutputToStdout = false {product}bool DontCompileHugeMethods = true {product}bool DontYieldALot = false {pd product}bool DumpSharedSpaces = false {product}bool EagerXrunInit = false {product}intx EmitSync = 0 {product}uintx ErgoHeapSizeLimit = 0 {product}ccstr ErrorFile = {product}bool EstimateArgEscape = true {product}intx EventLogLength = 2000 {product}bool ExplicitGCInvokesConcurrent = false {product}bool ExplicitGCInvokesConcurrentAndUnloadsClasses = false {produbool ExtendedDTraceProbes = false {product}bool FLSAlwaysCoalesceLarge = false {product}uintx FLSCoalescePolicy = 2 {product}double FLSLargestBlockCoalesceProximity = {product}bool FailOverToOldVerifier = true {product}bool FastTLABRefill = true {product}intx FenceInstruction = 0 {product}intx FieldsAllocationStyle = 1 {product}bool FilterSpuriousWakeups = true {product}bool ForceFullGCJVMTIEpilogues = false {product}bool ForceNUMA = false {product}bool ForceSharedSpaces = false {product}bool ForceTimeHighResolution = false {product}intx FreqInlineSize = 325 {pd product}intx G1ConcRefinementGreenZone = 0 {product}intx G1ConcRefinementRedZone = 0 {product}intx G1ConcRefinementServiceIntervalMillis = 300 {product}uintx G1ConcRefinementThreads = 0 {product}intx G1ConcRefinementThresholdStep = 0 {product}intx G1ConcRefinementYellowZone = 0 {product}intx G1ConfidencePercent = 50 {product}uintx G1HeapRegionSize = 0 {product}intx G1MarkRegionStackSize = 1048576 {product}intx G1RSetRegionEntries = 0 {product}uintx G1RSetScanBlockSize = 64 {product}intx G1RSetSparseRegionEntries = 0 {product}intx G1RSetUpdatingPauseTimePercent = 10 {product}intx G1ReservePercent = 10 {product}intx G1SATBBufferSize = 1024 {product}intx G1UpdateBufferSize = 256 {product}bool G1UseAdaptiveConcRefinement = true {product}bool G1UseFixedWindowMMUTracker = false {product}uintx GCDrainStackTargetSize = 64 {product}uintx GCHeapFreeLimit = 2 {product}bool GCLockerInvokesConcurrent = false {product}bool GCOverheadReporting = false {product}intx GCOverheadReportingPeriodMS = 100 {product}intx GCPauseIntervalMillis = 500 {product}uintx GCTaskTimeStampEntries = 200 {product}uintx GCTimeLimit = 98 {product}uintx GCTimeRatio = 99 {product}ccstr HPILibPath = {product}bool HandlePromotionFailure = true {product}uintx HeapBaseMinAddress =
{pd product}bool HeapDumpAfterFullGC = false {manageable}bool HeapDumpBeforeFullGC = false {manageable}bool HeapDumpOnOutOfMemoryError = false {manageable}ccstr HeapDumpPath = {manageable}uintx HeapFirstMaximumCompactionCount = 3 {product}uintx HeapMaximumCompactionInterval = 20 {product}bool IgnoreUnrecognizedVMOptions = false {product}uintx InitialCodeCacheSize = 163840 {pd product}uintx InitialHeapSize :=
{product}uintx InitialRAMFraction = 64 {product}uintx InitialSurvivorRatio = 8 {product}intx InitialTenuringThreshold = 7 {product}uintx InitiatingHeapOccupancyPercent = 45 {product}bool Inline = true {product}intx InlineSmallCode = 1000 {pd product}intx InterpreterProfilePercentage = 33 {product}bool JNIDetachReleasesMonitors = true {product}bool JavaMonitorsInStackTrace = true {product}intx JavaPriority10_To_OSPriority = -1 {product}intx JavaPriority1_To_OSPriority = -1 {product}intx JavaPriority2_To_OSPriority = -1 {product}intx JavaPriority3_To_OSPriority = -1 {product}intx JavaPriority4_To_OSPriority = -1 {product}intx JavaPriority5_To_OSPriority = -1 {product}intx JavaPriority6_To_OSPriority = -1 {product}intx JavaPriority7_To_OSPriority = -1 {product}intx JavaPriority8_To_OSPriority = -1 {product}intx JavaPriority9_To_OSPriority = -1 {product}bool LIRFillDelaySlots = false {C1 pd product}uintx LargePageHeapSizeThreshold =
{product}uintx LargePageSizeInBytes = 0 {product}bool LazyBootClassLoader = true {product}bool ManagementServer = false {product}uintx MarkStackSize = 32768 {product}uintx MarkStackSizeMax = 4194304 {product}intx MarkSweepAlwaysCompactCount = 4 {product}uintx MarkSweepDeadRatio = 5 {product}intx MaxBCEAEstimateLevel = 5 {product}intx MaxBCEAEstimateSize = 150 {product}intx MaxDirectMemorySize = -1 {product}bool MaxFDLimit = true {product}uintx MaxGCMinorPauseMillis =
{product}uintx MaxGCPauseMillis =
{product}uintx MaxHeapFreeRatio = 70 {product}uintx MaxHeapSize :=
{product}intx MaxInlineLevel = 9 {product}intx MaxInlineSize = 35 {product}intx MaxJavaStackTraceDepth = 1024 {product}uintx MaxLiveObjectEvacuationRatio = 100 {product}uintx MaxNewSize =
{product}uintx MaxPermHeapExpansion = 4194304 {product}uintx MaxPermSize =
{pd product}uint64_t MaxRAM =
{pd product}uintx MaxRAMFraction = 4 {product}intx MaxRecursiveInlineLevel = 1 {product}intx MaxTenuringThreshold = 15 {product}intx MaxTrivialSize = 6 {product}bool MethodFlushing = true {product}intx MinCodeCacheFlushingInterval = 30 {product}uintx MinHeapDeltaBytes = 131072 {product}uintx MinHeapFreeRatio = 40 {product}intx MinInliningThreshold = 250 {product}uintx MinPermHeapExpansion = 262144 {product}uintx MinRAMFraction = 2 {product}uintx MinSurvivorRatio = 3 {product}uintx MinTLABSize = 2048 {product}intx MonitorBound = 0 {product}bool MonitorInUseLists = false {product}bool MustCallLoadClassInternal = false {product}intx NUMAChunkResizeWeight = 20 {product}intx NUMAPageScanRate = 256 {product}intx NUMASpaceResizeRate =
{product}bool NUMAStats = false {product}intx NativeMonitorFlags = 0 {product}intx NativeMonitorSpinLimit = 20 {product}intx NativeMonitorTimeout = -1 {product}bool NeedsDeoptSuspend = false {pd product}bool NeverActAsServerClassMachine = true {pd product}bool NeverTenure = false {product}intx NewRatio = 2 {product}uintx NewSize = 1048576 {product}uintx NewSizeThreadIncrease = 4096 {pd product}intx NmethodSweepFraction = 4 {product}uintx OldPLABSize = 1024 {product}uintx OldPLABWeight = 50 {product}uintx OldSize = 4194304 {product}bool OmitStackTraceInFastThrow = true {product}ccstrlist OnError = {product}ccstrlist OnOutOfMemoryError = {product}intx OnStackReplacePercentage = 933 {pd product}uintx PLABWeight = 75 {product}bool PSChunkLargeArrays = true {product}intx ParGCArrayScanChunk = 50 {product}uintx ParGCDesiredObjsFromOverflowList = 20 {product}bool ParGCTrimOverflow = true {product}bool ParGCUseLocalOverflow = false {product}intx ParallelGCBufferWastePct = 10 {product}bool ParallelGCRetainPLAB = true {product}uintx ParallelGCThreads = 0 {product}bool ParallelGCVerbose = false {product}uintx ParallelOldDeadWoodLimiterMean = 50 {product}uintx ParallelOldDeadWoodLimiterStdDev = 80 {product}bool ParallelRefProcBalancingEnabled = true {product}bool ParallelRefProcEnabled = false {product}uintx PausePadding = 1 {product}intx PerBytecodeRecompilationCutoff = 200 {product}intx PerBytecodeTrapLimit = 4 {product}intx PerMethodRecompilationCutoff = 400 {product}intx PerMethodTrapLimit = 100 {product}bool PerfAllowAtExitRegistration = false {product}bool PerfBypassFileSystemCheck = false {product}intx PerfDataMemorySize = 32768 {product}intx PerfDataSamplingInterval = 50 {product}ccstr PerfDataSaveFile = {product}bool PerfDataSaveToFile = false {product}bool PerfDisableSharedMem = false {product}intx PerfMaxStringConstLength = 1024 {product}uintx PermGenPadding = 3 {product}uintx PermMarkSweepDeadRatio = 20 {product}uintx PermSize =
{pd product}bool PostSpinYield = true {product}intx PreBlockSpin = 10 {product}intx PreInflateSpin = 10 {pd product}bool PreSpinYield = false {product}bool PreferInterpreterNativeStubs = false {pd product}intx PrefetchCopyIntervalInBytes = -1 {product}intx PrefetchFieldsAhead = -1 {product}intx PrefetchScanIntervalInBytes = -1 {product}bool PreserveAllAnnotations = false {product}uintx PreserveMarkStackSize = 1024 {product}uintx PretenureSizeThreshold = 0 {product}bool PrintAdaptiveSizePolicy = false {product}bool PrintCMSInitiationStatistics = false {product}intx PrintCMSStatistics = 0 {product}bool PrintClassHistogram = false {manageable}bool PrintClassHistogramAfterFullGC = false {manageable}bool PrintClassHistogramBeforeFullGC = false {manageable}bool PrintCommandLineFlags = false {product}bool PrintCompilation = false {product}bool PrintConcurrentLocks = false {manageable}intx PrintFLSCensus = 0 {product}intx PrintFLSStatistics = 0 {product}bool PrintFlagsFinal := true {product}bool PrintFlagsInitial = false {product}bool PrintGC = false {manageable}bool PrintGCApplicationConcurrentTime = false {product}bool PrintGCApplicationStoppedTime = false {product}bool PrintGCDateStamps = false {manageable}bool PrintGCDetails = false {manageable}bool PrintGCTaskTimeStamps = false {product}bool PrintGCTimeStamps = false {manageable}bool PrintHeapAtGC = false {product rw}bool PrintHeapAtGCExtended = false {product rw}bool PrintHeapAtSIGBREAK = true {product}bool PrintJNIGCStalls = false {product}bool PrintJNIResolving = false {product}bool PrintOldPLAB = false {product}bool PrintPLAB = false {product}bool PrintParallelOldGCPhaseTimes = false {product}bool PrintPromotionFailure = false {product}bool PrintReferenceGC = false {product}bool PrintRevisitStats = false {product}bool PrintSafepointStatistics = false {product}intx PrintSafepointStatisticsCount = 300 {product}intx PrintSafepointStatisticsTimeout = -1 {product}bool PrintSharedSpaces = false {product}bool PrintTLAB = false {product}bool PrintTenuringDistribution = false {product}bool PrintVMOptions = false {product}bool PrintVMQWaitTime = false {product}uintx ProcessDistributionStride = 4 {product}bool ProfileInterpreter = false {pd product}bool ProfileIntervals = false {product}intx ProfileIntervalsTicks = 100 {product}intx ProfileMaturityPercentage = 20 {product}bool ProfileVM = false {product}bool ProfilerPrintByteCodeStatistics = false {product}bool ProfilerRecordPC = false {product}uintx PromotedPadding = 3 {product}intx QueuedAllocationWarningCount = 0 {product}bool RangeCheckElimination = true {product}intx ReadPrefetchInstr = 0 {product}intx ReadSpinIterations = 100 {product}bool ReduceSignalUsage = false {product}intx RefDiscoveryPolicy = 0 {product}bool ReflectionWrapResolutionErrors = true {product}bool RegisterFinalizersAtInit = true {product}bool RelaxAccessControlCheck = false {product}bool RequireSharedSpaces = false {product}uintx ReservedCodeCacheSize =
{pd product}bool ResizeOldPLAB = true {product}bool ResizePLAB = true {product}bool ResizeTLAB = true {pd product}bool RestoreMXCSROnJNICalls = false {product}bool RewriteBytecodes = false {pd product}bool RewriteFrequentPairs = false {pd product}intx SafepointPollOffset = 256 {C1 pd product}intx SafepointSpinBeforeYield = 2000 {product}bool SafepointTimeout = false {product}intx SafepointTimeoutDelay = 10000 {product}bool ScavengeBeforeFullGC = true {product}intx SelfDestructTimer = 0 {product}uintx SharedDummyBlockSize =
{product}uintx SharedMiscCodeSize = 4194304 {product}uintx SharedMiscDataSize = 4194304 {product}uintx SharedReadOnlySize =
{product}uintx SharedReadWriteSize =
{product}bool ShowMessageBoxOnError = false {product}intx SoftRefLRUPolicyMSPerMB = 1000 {product}bool SplitIfBlocks = true {product}intx StackRedPages = 1 {pd product}intx StackShadowPages = 3 {pd product}bool StackTraceInThrowable = true {product}intx StackYellowPages = 2 {pd product}bool StartAttachListener = false {product}intx StarvationMonitorInterval = 200 {product}bool StressLdcRewrite = false {product}bool StressTieredRuntime = false {product}bool SuppressFatalErrorMessage = false {product}uintx SurvivorPadding = 3 {product}intx SurvivorRatio = 8 {product}intx SuspendRetryCount = 50 {product}intx SuspendRetryDelay = 5 {product}intx SyncFlags = 0 {product}ccstr SyncKnobs = {product}intx SyncVerbose = 0 {product}uintx TLABAllocationWeight = 35 {product}uintx TLABRefillWasteFraction = 64 {product}uintx TLABSize = 0 {product}bool TLABStats = true {product}uintx TLABWasteIncrement = 4 {product}uintx TLABWasteTargetPercent = 1 {product}bool TaggedStackInterpreter = false {product}intx TargetPLABWastePct = 10 {product}intx TargetSurvivorRatio = 50 {product}uintx TenuredGenerationSizeIncrement = 20 {product}uintx TenuredGenerationSizeSupplement = 80 {product}uintx TenuredGenerationSizeSupplementDecay = 2 {product}intx ThreadPriorityPolicy = 0 {product}bool ThreadPriorityVerbose = false {product}uintx ThreadSafetyMargin =
{product}intx ThreadStackSize = 0 {pd product}uintx ThresholdTolerance = 10 {product}intx Tier1BytecodeLimit = 10 {product}bool Tier1OptimizeVirtualCallProfiling = true {C1 product}bool Tier1ProfileBranches = true {C1 product}bool Tier1ProfileCalls = true {C1 product}bool Tier1ProfileCheckcasts =

我要回帖

更多关于 青少年如何提高智力 的文章

 

随机推荐