国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

java 8新特性探究-跟OOM:Permgen說再見吧

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

PermGen space簡單介紹

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

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

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

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

Java 8新特性探究(九)跟OOM:Permgen說再見吧

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

java8中metaspace總結如下:

PermGen 空間的狀況

這部分內存空間將全部移除。

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

Metaspace 內存分配模型

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

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

Metaspace 容量

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

新參數(shù)(MaxMetaspaceSize)用于限制本地內存分配給類元數(shù)據(jù)的大小。如果沒有指定這個參數(shù),元空間會在運行時根據(jù)需要動態(tài)調整。

Metaspace 垃圾回收

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

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

Java 堆內存的影響

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

Metaspace 監(jiān)控

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

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

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

#p#

PermGen vs. Metaspace 運行時比較

    為了更好地理解Metaspace內存空間的運行時行為,

    將進行以下幾種場景的測試:

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

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

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

首先建立了一個模擬PermGen OOM的代碼

1 public class ClassA {
2  public void method(String name) {
3   // do nothing
4  }
5 }

上面是一個簡單的ClassA,把他編譯成class字節(jié)碼放到D:/classes下面,測試代碼中用URLClassLoader來加載此類型上面類編譯成class

01 /**
02  * 模擬PermGen OOM
03  * @author benhail
04  */
05 public class OOMTest {
06     public static void main(String[] args) {
07         try {
08             //準備url
09             URL url = new File("D:/classes").toURI().toURL();
10             URL[] urls = {url};
11             //獲取有關類型加載的JMX接口
12             ClassLoadingMXBean loadingBean = ManagementFactory.getClassLoadingMXBean();
13             //用于緩存類加載器
14             List<ClassLoader> classLoaders = new ArrayList<ClassLoader>();
15             while (true) {
16                 //加載類型并緩存類加載器實例
17                 ClassLoader classLoader = new URLClassLoader(urls);
18                 classLoaders.add(classLoader);
19                 classLoader.loadClass("ClassA");
20                 //顯示數(shù)量信息(共加載過的類型數(shù)目,當前還有效的類型數(shù)目,已經(jīng)被卸載的類型數(shù)目)
21                 System.out.println("total: " + loadingBean.getTotalLoadedClassCount());
22                 System.out.println("active: " + loadingBean.getLoadedClassCount());
23                 System.out.println("unloaded: " + loadingBean.getUnloadedClassCount());
24             }
25         } catch (Exception e) {
26             e.printStackTrace();
27         }
28     }
29 }

虛擬機器參數(shù)設置如下:-verbose -verbose:gc

設置-verbose參數(shù)是為了獲取類型加載和卸載的信息

設置-verbose:gc是為了獲取垃圾收集的相關信息

JDK 1.7 @64-bit – PermGen 耗盡測試

Java1.7的PermGen默認空間為85 MB(或者可以通過-XX:MaxPermSize=XXXm指定)

Java 8新特性探究(九)跟OOM:Permgen說再見吧

可以從上面的JVisualVM的截圖看出:當加載超過6萬個類之后,PermGen被耗盡。我們也能通過程序和GC的輸出觀察耗盡的過程。

程序輸出(摘取了部分)

01 ......
02 [Loaded ClassA from file:/D:/classes/]
03 total: 64887
04 active: 64887
05 unloaded: 0
06 [GC 245041K->213978K(536768K), 0.0597188 secs]
07 [Full GC 213978K->211425K(644992K), 0.6456638 secs]
08 [GC 211425K->211425K(656448K), 0.0086696 secs]
09 [Full GC 211425K->211411K(731008K), 0.6924754 secs]
10 [GC 211411K->211411K(726528K), 0.0088992 secs]
11 ...............
12 java.lang.OutOfMemoryError: PermGen space

JDK 1.8 @64-bit – Metaspace大小動態(tài)調整測試

Java的Metaspace空間:不受限制 (默認)

Java 8新特性探究(九)跟OOM:Permgen說再見吧

從 上面的截圖可以看到,JVM Metaspace進行了動態(tài)擴展,本地內存的使用由20MB增長到646MB,以滿足程序中不斷增長的類數(shù)據(jù)內存占用需求。我們也能觀察到JVM的垃圾 回收事件—試圖銷毀僵死的類或類加載器對象。但是,由于我們程序的泄漏,JVM別無選擇只能動態(tài)擴展Metaspace內存空間。程序加載超過10萬個 類,而沒有出現(xiàn)OOM事件。

JDK 1.8 @64-bit – Metaspace 受限測試

Java的Metaspace空間:128MB(-XX:MaxMetaspaceSize=128m)

Java 8新特性探究(九)跟OOM:Permgen說再見吧

可 以從上面的JVisualVM的截圖看出:當加載超過2萬個類之后,Metaspace被耗盡;與JDK1.7運行時非常相似。我們也能通過程序和GC的 輸出觀察耗盡的過程。另一個有趣的現(xiàn)象是,保留的原生內存占用量是設定的***大小兩倍之多。這可能表明,如果可能的話,可微調元空間容量大小策略,來避免 本地內存的浪費。

從Java程序的輸出中看到如下異常。

1 [Loaded ClassA from file:/D:/classes/]
2 total: 21393
3 active: 21393
4 unloaded: 0
5 [GC (Metadata GC Threshold) 64306K->57010K(111616K), 0.0145502 secs]
6 [Full GC (Metadata GC Threshold) 57010K->56810K(122368K), 0.1068084 secs]
7 java.lang.OutOfMemoryError: Metaspace

在 設置了MaxMetaspaceSize的情況下,該空間的內存仍然會耗盡,進而引發(fā)“java.lang.OutOfMemoryError: Metadata space”錯誤。因為類加載器的泄漏仍然存在,而通常Java又不希望無限制地消耗本機內存,因此設置一個類似于MaxPermSize的限制看起來也 是合理的。

總結

  1. 之前不管是不是需要,JVM都會吃掉那塊空間……如果設置得太小,JVM會死掉;如果設置得太大,這塊內存就被JVM浪費了。理論上說,現(xiàn)在你完全可以不關注這個,因為JVM會在運行時自動調校為“合適的大小”;

  2. 提高Full GC的性能,在Full GC期間,Metadata到Metadata pointers之間不需要掃描了,別小看這幾納秒時間;

  3. 隱患就是如果程序存在內存泄露,像OOMTest那樣,不停的擴展metaspace的空間,會導致機器的內存不足,所以還是要有必要的調試和監(jiān)控。

本文鏈接:http://my.oschina.net/roll1987/blog/220412

責任編輯:chenqingxiang 來源: oschina
相關推薦

2014-04-16 07:48:56

Java 8Permgen

2014-07-15 14:48:26

Java8

2014-07-14 11:34:53

Java 8Nashorn

2014-04-15 15:45:22

Java8Java8教程

2014-10-20 13:57:59

JavaFX 8Java 8

2013-09-16 09:25:55

PureDiscoveDave Copp搜索

2014-03-24 09:46:32

Pythonweb開發(fā)

2014-04-16 07:43:31

Java 8JRE

2014-07-15 14:12:17

Java8

2014-04-15 09:53:54

Java8類型注解

2020-12-29 10:36:34

互聯(lián)網(wǎng)數(shù)據(jù)技術

2013-12-20 09:59:34

小米閃購模式雷軍

2014-04-15 16:01:00

Java8泛型

2021-02-22 11:51:15

Java開發(fā)代碼

2012-10-19 10:32:57

2014-05-14 10:02:17

Java 8StampedLock

2014-07-15 13:54:09

Java8

2014-03-25 10:20:37

Java 8新特性

2014-04-16 07:29:02

Java8Java日期

2018-09-11 10:43:19

深度學習GPU人工智能
點贊
收藏

51CTO技術棧公眾號

国产一区在线观| 日本美女高清在线观看免费| 国产一区日韩一区| 欧美激情三级免费| 免费成人美女女| 91精品欧美综合在线观看最新| 免费视频二区| 国产精品久久毛片| 成年人午夜视频在线观看| 麻豆精品国产传媒mv男同| 国产日韩欧美综合精品| 午夜国产一区| 97国产超碰| 在线看片不卡| 国产精品网站视频| 精品日韩欧美一区| 国产精品美女久久久久av超清| 综合综合综合综合综合网| 欧美亚洲视频在线观看| 国产欧美三级电影| 奇米影视亚洲狠狠色| 国产调教精品| 国产97色在线|日韩| 国产欧美日韩免费观看| 欧美孕妇毛茸茸xxxx| 亚洲精品无吗| 国产精品日韩在线播放| 亚洲精品一区二区在线看| 91黄色国产视频| 亚洲国产裸拍裸体视频在线观看乱了中文| 亚洲伊人第一页| 狠狠88综合久久久久综合网| 国产99视频精品免费视频36| 在线免费观看欧美| 欧美日韩在线高清| 喷白浆一区二区| 久久99久久99精品| 国产精品色眯眯| 在线观看av影片| 欧美人体做爰大胆视频| 华人av在线| 久久伊人精品天天| 另类尿喷潮videofree| 国产成人精品999| 永久亚洲成a人片777777| 蜜桃导航-精品导航| 国产乱码字幕精品高清av | 久久综合一区二区三区| 理论片日本一区| a级黄色一级片| 国产精品青草久久| 日韩a在线观看| 欧美精品一区二区三区视频| 欧美视频免费看| 日本韩国在线不卡| 亚洲综合二区| 男人天堂1024| 亚洲成人一二三| 啊啊啊久久久| 欧美在线亚洲在线| 国产精品永久| 爱情岛论坛vip永久入口| 精品国产乱码久久久久久虫虫漫画 | 波多野结衣在线一区二区| 国产精品久久久久久久电影| 伊人久久婷婷| 97中文字幕在线| 依依成人综合视频| 成人女同在线观看| 97婷婷大伊香蕉精品视频| 一区二区亚洲精品| 欧美在线观看成人| 欧美视频一区二区| 欧美国产视频| 鬼打鬼之黄金道士1992林正英| 国产一区二区三区四区五区入口| av美女在线| 欧美va天堂va视频va在线| 加勒比视频一区| 日本不卡一区二区三区在线观看| 97精品国产露脸对白| 成人av毛片| 欧美国产亚洲精品久久久8v| 亚洲欧美日韩一区在线观看| av电影资源| 国产丝袜精品第一页| 婷婷激情图片久久| 国产激情在线观看视频| 6080国产精品一区二区| 巨人精品**| 精品视频在线观看一区二区| 色欧美88888久久久久久影院| 国产一区二区三区视频在线| 久久综合一区二区三区| 伊人夜夜躁av伊人久久| 高清在线一区| 日韩av高清在线播放| 亚洲成国产人片在线观看| 激情久久99| 日本高清不卡三区| 疯狂做受xxxx欧美肥白少妇| 8x国产一区二区三区精品推荐| 亚洲a∨一区二区三区| 午夜免费久久看| 中文字幕一区二区三区日韩精品| 一级日韩一区在线观看| 欧美日韩亚洲国产综合| 91麻豆精品国产91久久久平台 | 首页欧美精品中文字幕| 在线免费色视频| 久久免费成人精品视频| 国产精选一区二区三区| 激情在线视频播放| 精品国产乱码久久久久久88av | 精品国产sm最大网站免费看| 中文字幕日韩一区二区不卡 | 手机在线免费观看av| 国产成人精品日本亚洲| 国产精品专区在线| 伊人久久大香线蕉av超碰演员| 男人揉女人奶房视频60分| 欧美一级一区二区| 我不卡手机影院| 黄色春季福利在线看| 欧美成人第一页| 成人永久aaa| 免费成人动漫| 少妇熟女一区二区| 亚洲福利视频在线| 日本午夜精品视频在线观看| 动漫一区在线| 欧美资源一区| 狠狠干狠狠久久| 欧美肥老太太性生活| 在线电影av| 亚洲最大激情中文字幕| 91久久精品国产91性色tv| 国产精品草草| 岛国成人毛片| 婷婷久久伊人| 亚洲人午夜色婷婷| 国产+成+人+亚洲欧洲自线| 久久xxx视频| 黄在线观看网站| 7777kkkk成人观看| 亚洲一区二区美女| 午夜性色一区二区三区免费视频| 九色视频在线观看免费播放| 精品国产一区二区三区免费| 91精品在线麻豆| 国产在线精品一区二区夜色| 精品176极品一区| 孩娇小videos精品| 国产精品久久久久免费a∨大胸| 亚洲综合在线第一页| 国产精品久久久久久麻豆一区软件 | 亚洲福利av在线| 亚洲精品在线观看视频| 国产精品综合网| 国产一区精品二区| 成人au免费视频影院| 91久久精品一区| 51久久夜色精品国产麻豆| 久久狠狠亚洲综合| 欧美特黄色片| 视频在线91| 日韩一区不卡| 久久国产精品影片| 欧美性猛交99久久久久99按摩| 亚洲综合丁香| 成人日韩视频| 日本高清中文字幕二区在线| 亚洲精品中字| 97精品伊人久久久大香线蕉| 色妹子一区二区| 国产成人在线视频网址| 国产不卡一区| 2021天堂中文幕一二区在线观| 色哟哟精品视频| 国产欧美精品一区二区三区| 一本色道久久综合狠狠躁篇怎么玩 | 国产精品theporn88| 亚洲码在线观看| 18欧美亚洲精品| 久久国产一二区| 99久久人爽人人添人人澡 | 婷婷四房综合激情五月| 久久久视频在线| 3d动漫精品啪啪一区二区竹菊 | 久久久久久久久久伊人| 国产精品视频xxxx| 亚洲人成毛片在线播放| 一区2区3区在线看| 国内成人精品2018免费看| 色爱综合网欧美| 欧美一级做a| 永久免费网站在线| 97影视大全免费追剧大全在线观看| 国产欧美123| 精品久久精品久久|