真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java8新特性之再見(jiàn)Permgen_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理-創(chuàng)新互聯(lián)

很多開(kāi)發(fā)者都在其系統(tǒng)中見(jiàn)過(guò)“java.lang.OutOfMemoryError: PermGen space”這一問(wèn)題。這往往是由類加載器相關(guān)的內(nèi)存泄漏以及新類加載器的創(chuàng)建導(dǎo)致的,通常出現(xiàn)于代碼熱部署時(shí)。相對(duì)于正式產(chǎn)品,該問(wèn)題在開(kāi)發(fā)機(jī)上出現(xiàn)的頻率更高,在產(chǎn)品中最常見(jiàn)的“問(wèn)題”是默認(rèn)值太低了。常用的解決方法是將其設(shè)置為256MB或更高。

創(chuàng)新互聯(lián)公司專注于湄潭企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),商城網(wǎng)站建設(shè)。湄潭網(wǎng)站建設(shè)公司,為湄潭等地區(qū)提供建站服務(wù)。全流程定制設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

PermGen space簡(jiǎn)單介紹

PermGen space的全稱是Permanent Generation space,是指內(nèi)存的永久保存區(qū)域,說(shuō)說(shuō)為什么會(huì)內(nèi)存益出:這一部分用于存放Class和Meta的信息,Class在被 Load的時(shí)候被放入PermGen space區(qū)域,它和和存放Instance的Heap區(qū)域不同,所以如果你的APP會(huì)LOAD很多CLASS的話,就很可能出現(xiàn)PermGen space錯(cuò)誤。這種錯(cuò)誤常見(jiàn)在web服務(wù)器對(duì)JSP進(jìn)行pre compile的時(shí)候。

JVM 種類有很多,比如 Oralce-Sun Hotspot, Oralce JRockit, IBM J9, Taobao JVM(淘寶好樣的!)等等。當(dāng)然武林盟主是Hotspot了,這個(gè)毫無(wú)爭(zhēng)議。需要注意的是,PermGen space是Oracle-Sun Hotspot才有,JRockit以及J9是沒(méi)有這個(gè)區(qū)域。

元空間(MetaSpace)一種新的內(nèi)存空間誕生

JDK8 HotSpot JVM 將移除永久區(qū),使用本地內(nèi)存來(lái)存儲(chǔ)類元數(shù)據(jù)信息并稱之為:元空間(Metaspace);這與Oracle JRockit 和IBM JVM's很相似,如下圖所示

這意味著不會(huì)再有java.lang.OutOfMemoryError: PermGen問(wèn)題,也不再需要你進(jìn)行調(diào)優(yōu)及監(jiān)控內(nèi)存空間的使用……但請(qǐng)等等,這么說(shuō)還為時(shí)過(guò)早。在默認(rèn)情況下,這些改變是透明的,接下來(lái)我們的展示將使你知道仍然要關(guān)注類元數(shù)據(jù)內(nèi)存的占用。請(qǐng)一定要牢記,這個(gè)新特性也不能神奇地消除類和類加載器導(dǎo)致的內(nèi)存泄漏。

java8中metaspace總結(jié)如下:

PermGen 空間的狀況

這部分內(nèi)存空間將全部移除。

JVM的參數(shù):PermSize 和 MaxPermSize 會(huì)被忽略并給出警告(如果在啟用時(shí)設(shè)置了這兩個(gè)參數(shù))。

Metaspace 內(nèi)存分配模型

大部分類元數(shù)據(jù)都在本地內(nèi)存中分配。

用于描述類元數(shù)據(jù)的“klasses”已經(jīng)被移除。

Metaspace 容量

默認(rèn)情況下,類元數(shù)據(jù)只受可用的本地內(nèi)存限制(容量取決于是32位或是64位操作系統(tǒng)的可用虛擬內(nèi)存大?。?。

新參數(shù)(MaxMetaspaceSize)用于限制本地內(nèi)存分配給類元數(shù)據(jù)的大小。如果沒(méi)有指定這個(gè)參數(shù),元空間會(huì)在運(yùn)行時(shí)根據(jù)需要?jiǎng)討B(tài)調(diào)整。

Metaspace 垃圾回收

對(duì)于僵死的類及類加載器的垃圾回收將在元數(shù)據(jù)使用達(dá)到“MaxMetaspaceSize”參數(shù)的設(shè)定值時(shí)進(jìn)行。

適時(shí)地監(jiān)控和調(diào)整元空間對(duì)于減小垃圾回收頻率和減少延時(shí)是很有必要的。持續(xù)的元空間垃圾回收說(shuō)明,可能存在類、類加載器導(dǎo)致的內(nèi)存泄漏或是大小設(shè)置不合適。

Java 堆內(nèi)存的影響

一些雜項(xiàng)數(shù)據(jù)已經(jīng)移到Java堆空間中。升級(jí)到JDK8之后,會(huì)發(fā)現(xiàn)Java堆 空間有所增長(zhǎng)。

Metaspace 監(jiān)控

元空間的使用情況可以從HotSpot1.8的詳細(xì)GC日志輸出中得到。

Jstat 和 JVisualVM兩個(gè)工具,在使用b75版本進(jìn)行測(cè)試時(shí),已經(jīng)更新了,但是還是能看到老的PermGen空間的出現(xiàn)。

前面已經(jīng)從理論上充分說(shuō)明,下面讓我們通過(guò)“泄漏”程序進(jìn)行新內(nèi)存空間的觀察……

PermGen vs. Metaspace 運(yùn)行時(shí)比較

    為了更好地理解Metaspace內(nèi)存空間的運(yùn)行時(shí)行為,

    將進(jìn)行以下幾種場(chǎng)景的測(cè)試:

1.使用JDK1.7運(yùn)行Java程序,監(jiān)控并耗盡默認(rèn)設(shè)定的85MB大小的PermGen內(nèi)存空間。

2.使用JDK1.8運(yùn)行Java程序,監(jiān)控新Metaspace內(nèi)存空間的動(dòng)態(tài)增長(zhǎng)和垃圾回收過(guò)程。

3.使用JDK1.8運(yùn)行Java程序,模擬耗盡通過(guò)“MaxMetaspaceSize”參數(shù)設(shè)定的128MB大小的Metaspace內(nèi)存空間。

首先建立了一個(gè)模擬PermGen OOM的代碼

public class ClassA {
 public void method(String name) {
 // do nothing
 }
}

網(wǎng)站名稱:Java8新特性之再見(jiàn)Permgen_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理-創(chuàng)新互聯(lián)
本文來(lái)源:http://weahome.cn/article/jsspp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部