成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JVM內存回收問題處理方法

開發 后端
上節我們介紹了JVM體系結構,這里和大家學習一下JVM內存回收問題,Sun的JVMGenerationalCollecting(垃圾回收)原理是這樣的:把對象分為年青代(Young)、年老代(Tenured)、持久代(Perm),對不同生命周期的對象使用不同的算法。

本文和大家重點討論一下JVM內存回收問題的解決方法,通常我們說的JVM內存回收總是在指堆內存回收,確實只有堆中的內容是動態申請分配的,所以以上對象的年輕代和年老代都是指的JVM的Heap空間,而持久代則是之前提到的MethodArea,不屬于Heap。

JVM內存回收

了解JVM的系統結構,再來看看JVM內存回收問題了——
Sun的JVMGenerationalCollecting(垃圾回收)原理是這樣的:把對象分為年青代(Young)、年老代(Tenured)、持久代(Perm),對不同生命周期的對象使用不同的算法。(基于對對象生命周期分析)

Java堆中的各代分布

如上圖所示,為Java堆中的各代分布。

1.Young(年輕代)

年輕代分三個區。一個Eden區,兩個Survivor區。大部分對象在Eden區中生成。當Eden區滿時,還存活的對象將被復制到Survivor區(兩個中的一個),當這個Survivor區滿時,此區的存活對象將被復制到另外一個Survivor區,當這個Survivor去也滿了的時候,從***個Survivor區復制過來的并且此時還存活的對象,將被復制年老區(Tenured。需要注意,Survivor的兩個區是對稱的,沒先后關系,所以同一個區中可能同時存在從Eden復制過來對象,和從前一個Survivor復制過來的對象,而復制到年老區的只有從***個Survivor去過來的對象。而且,Survivor區總有一個是空的。

2.Tenured(年老代)

年老代存放從年輕代存活的對象。一般來說年老代存放的都是生命期較長的對象。

3.Perm(持久代)

用于存放靜態文件,如今Java類、方法等。持久代對垃圾回收沒有顯著影響,但是有些應用可能動態生成或者調用一些class,例如Hibernate等,在這種時候需要設置一個比較大的持久代空間來存放這些運行過程中新增的類。持久代大小通過-XX:MaxPermSize=進行設置。

舉個例子:當在程序中生成對象時,正常對象會在年輕代中分配空間,如果是過大的對象也可能會直接在年老代生成(據觀測在運行某程序時候每次會生成一個十兆的空間用收發消息,這部分內存就會直接在年老代分配)。年輕代在空間被分配完的時候就會發起內存回收,大部分內存會被回收,一部分幸存的內存會被拷貝至Survivor的from區,經過多次回收以后如果from區內存也分配完畢,就會也發生內存回收然后將剩余的對象拷貝至to區。等到to區也滿的時候,就會再次發生內存回收然后把幸存的對象拷貝至年老區。

通常我們說的JVM內存回收總是在指堆內存回收,確實只有堆中的內容是動態申請分配的,所以以上對象的年輕代和年老代都是指的JVM的Heap空間,而持久代則是之前提到的MethodArea,不屬于Heap。

關于JVM內存管理的一些建議

1、手動將生成的無用對象,中間對象置為null,加快內存回收。

2、對象池技術如果生成的對象是可重用的對象,只是其中的屬性不同時,可以考慮采用對象池來較少對象的生成。如果有空閑的對象就從對象池中取出使用,沒有再生成新的對象,大大提高了對象的復用率。

3、JVM調優通過配置JVM的參數來提高垃圾回收的速度,如果在沒有出現內存泄露且上面兩種辦法都不能保證JVM內存回收時,可以考慮采用JVM調優的方式來解決,不過一定要經過實體機的長期測試,因為不同的參數可能引起不同的效果。如-Xnoclassgc參數等。

推薦的兩款JVM內存檢測工具

1、jconsoleJDK自帶的內存監測工具,路徑jdkbin目錄下jconsole.exe,雙擊可運行。連接方式有兩種,***種是本地方式如調試時運行的進程可以直接連,第二種是遠程方式,可以連接以服務形式啟動的進程。遠程連接方式是:在目標進程的jvm啟動參數中添加-Dcom.sun.management.jmxremote.port=1090-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false1090是監聽的端口號具體使用時要進行修改,然后使用IP加端口號連接即可。通過該工具可以監測到當時內存的大小,CPU的使用量以及類的加載,還提供了手動gc的功能。優點是效率高,速度快,在不影響進行運行的情況下監測產品的運行。缺點是無法看到類或者對象之類的具體信息。使用方式很簡單點擊幾下就可以知道功能如何了,確實有不明白之處可以上網查詢文檔。

2、JProfiler收費的工具,但是到處都有破解辦法。安裝好以后按照配置調試的方式配置好一個本地的session即可運行。可以監測當時的內存、CPU、線程等,能具體的列出內存的占用情況,還可以就某個類進行分析。優點很多,缺點太影響速度,而且有的類可能無法被織入方法,例如我使用jprofiler時一直沒有備份成功過,總會有一些類的錯誤。

【編輯推薦】

  1. 探索Java工作原理之JVM內存回收
  2. Tomcat配置JVM參數巧妙方法
  3. JVM基礎:解析JVM分代垃圾回收策略
  4. JVM for Linux JIT診斷技術簡介
  5. 巧解IBM JVM for Linux onPOWER性能調優

 

責任編輯:佚名 來源: tech.e800.com.cn
相關推薦

2010-09-26 16:42:04

JVM內存組成JVM垃圾回收

2009-12-30 10:14:29

JVM垃圾回收

2017-04-25 14:39:55

JVM內存Java

2010-09-25 15:19:01

2010-06-02 13:00:43

Linux 內存監控

2009-04-28 13:48:09

2012-01-09 17:06:16

JavaJVM

2013-10-11 17:32:18

Linux運維內存管理

2023-08-08 10:29:55

JVM優化垃圾回收

2010-09-25 09:56:46

JVM最大內存

2017-08-04 10:53:30

回收算法JVM垃圾回收器

2022-01-20 10:34:49

JVM垃圾回收算法

2019-09-04 15:31:04

JVM內存String

2010-09-27 09:01:26

JVM分代垃圾回收

2022-06-22 09:54:45

JVM垃圾回收Java

2025-03-26 00:00:05

2022-03-21 11:33:11

JVM垃圾回收器垃圾回收算法

2010-09-25 15:33:19

JVM垃圾回收

2010-09-26 15:38:33

JVM內存泄漏

2022-06-10 07:13:29

JVM垃圾回收
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品一区二区视频 | 99精品网| 久久久国产精品 | eeuss国产一区二区三区四区 | 欧美 日韩 国产 在线 | av一二三区 | 国产精品久久一区 | 国产性网 | 亚洲国产成人精品女人久久久 | 日韩免费一级 | 成年无码av片在线 | 一区二区视屏 | 日韩伦理一区二区 | 精品福利一区二区三区 | 午夜激情在线视频 | 久久久成人一区二区免费影院 | 成人做爰www免费看视频网站 | 国产精品久久亚洲 | 日韩精品视频在线播放 | 国产精品国产精品 | 国产成人精品a视频一区www | 国内精品久久久久久影视8 最新黄色在线观看 | 一级黄色毛片 | 欧美成年人视频在线观看 | 免费毛片网站在线观看 | 欧美一级片在线看 | 亚洲午夜精品一区二区三区 | 亚洲精品乱码久久久久久按摩观 | 91佛爷在线观看 | 欧美高清一区 | 亚洲精品美女 | 成人日韩| 久在线精品视频 | 狠狠艹| 国产精品久久久久久久久免费丝袜 | 999久久久久久久久6666 | 亚洲精彩视频在线观看 | 天天干,夜夜操 | 最新免费av网站 | 久热国产在线 | 久久久久亚洲精品国产 |