java8新特性探究(九)跟oom:permgen说再见吧-java开发java经验技巧

java8新特性探究(九)跟oom:permgen说再见吧-java开发java经验技巧

ID:30777468

大小:401.53 KB

页数:8页

时间:2019-01-03

java8新特性探究(九)跟oom:permgen说再见吧-java开发java经验技巧_第1页
java8新特性探究(九)跟oom:permgen说再见吧-java开发java经验技巧_第2页
java8新特性探究(九)跟oom:permgen说再见吧-java开发java经验技巧_第3页
java8新特性探究(九)跟oom:permgen说再见吧-java开发java经验技巧_第4页
java8新特性探究(九)跟oom:permgen说再见吧-java开发java经验技巧_第5页
资源描述:

《java8新特性探究(九)跟oom:permgen说再见吧-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Java8新特性探究(九)跟OOM:Pcrmgcn说再见吧-编程开发技术Java8新特性探究(九)跟OOM:Permgen说再见吧原文出处:成熟的毛毛虫的博客很多开发者都在其系统屮见过java.lang.OutOfMemoryError:PermGenspace”这一问题。这往往是由类加载器相关的内存泄漏以及新类加载器的创建导致的,通常出现于代码热部署时。相对于正式产品,该问题在开发机上出现的频率更高,在产品中最常见的“问题”是默认值太低了。常用的解决方法是将其设置为256MB或更高。PermGenspace简单介绍PermGenspace的全称是PermanentGene

2、rationspace,是指内存的永久保存区域,说说为什么会内存益出:这一部分用于存放Class和Meta■的信息,Class在被Load的时候被放入PermGenspace区域,它和和存放Instance的Heap区域不同,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGenspace错误。这种错误常见在web服务器对JSP进行precompile的时候。JVM种类有很多,比如Oralce-SunHotspot,OralceJRockit,IBMJ9,TaobaoJVM(淘宝好样的!)等等。当然武林盟主是Hotspot了,这个毫无争议。需要注意的是,

3、PermGenspace是Oracle-SunHotspot才有,JRockit以及J9是没冇这个区威。元空间(MetaSpace)—种新的内存空间诞生JDK8HotSpotJVM将移除永久区,使用本地内存来存储类元数据信息并称之为:元空间(Metaspace);这与OracleJRockit和IBMJVM's很相似,如卜图所示Eden»Survivor^SurvivorOldGenerationforolderobjects这意味着不会再有java.lang.OutOfMcmoryError:PermGen问题,也不再需耍你进行调优及监控内存空间的使用……但请等等,这么说

4、还为时过早。在默认情况下,这些改变是透明的,接下來我们的展示将使你知道仍然要关注类元数据内存的占用。请一定要牢记,这个新特性也不能神奇地消除类和类加载器导致的内存泄漏。java8中metaspacc总结如卜:PermGen空间的状况这部分内存空间将全部移除。JVM的参数:PermSize和MaxPermSize会被忽略并给出警告(如果在启用时设置了这两个参数)。Metaspace内存分配模型大部分类元数据都在本地内存小分配。用于描述类元数据的“klasses”已经被移除。Metaspace容量默认情况下,类元数据只受可用的木地内存限制(容量取决于是32位或是64位操作系统的

5、可用虚拟内存大小)。新参数(MaxMetaspaceSize)用于限制本地内存分配给类元数据的大小。如果没有指定这个参数,元空间会在运行时根据需要动态调整。Metaspace垃圾回收对于僵死的类及类加载器的垃圾回收将在元数据使用达到uMaxMctaspaccSizc参数的设定值时进行。适时地监控和调整元空间对于减小垃圾回收频率和减少延时是很冇必要的。持续的元空间垃圾冋收说明,可能存在类、类加载器导致的内存泄漏或是大小设置不合适。Java堆内存的影响一些朵项数据已经移到Java堆空间中。升级到JDK8ZAS,会发现Java堆空间冇所增长。Metaspace监控元空间的使用情况

6、可以从HotSpotl.8的详细GC日志输岀中得到。Jstat和JVisualVM两个工具,在使用b75版本进行测试时,已经更新了,但是还是能看到老的PcrmGen空间的出现。前而已经从理论上充分说明,下而让我们通过“泄漏”程序进行新内存空间的观察……PermGenvs.Metaspace运行时比较为了更好地理解Metaspace内存空间的运行时行为,将进行以卜•几种场景的测试:1.使用JDK1.7运行Java程序,监控并耗尽默认设定的85MB人小的PermGen内存空间。2.使用JDK1.8运行Java程序,监控新Metaspace内存空间的动态增长和垃圾回收过程。3.使

7、用JDK1.8运行Java程序,模拟耗尽通过“MaxMetaspaceSize”参数设定的128MB人小的Metaspace内存空间。首先建立了一个模拟PermGen00M的代码publicclassClassA{publicvoidmethod(Stringname){//donothing上面是一个简单的ClassA,把他编译成class字节码放到D:/classes下面,测试代码中用URLClassLoader來加载此类型上面类编译成class/***模拟PermGen00M*©authorbenhail*/

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。