欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java垃圾回收之復制算法詳解

 更新時間:2018年10月26日 16:02:08   作者:Sam哥哥  
今天小編就為大家分享一篇關(guān)于Java垃圾回收之復制算法詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

之前的Java垃圾回收之標記清除算法詳解 會導致內(nèi)存碎片。下文的介紹的coping算法可以解決內(nèi)存碎片問題。

概述

如果jvm使用了coping算法,一開始就會將可用內(nèi)存分為兩塊,from域和to域, 每次只是使用from域,to域則空閑著。當from域內(nèi)存不夠了,開始執(zhí)行GC操作,這個時候,會把from域存活的對象拷貝到to域,然后直接把from域進行內(nèi)存清理。

應用場景

coping算法一般是使用在新生代中,因為新生代中的對象一般都是朝生夕死的,存活對象的數(shù)量并不多,這樣使用coping算法進行拷貝時效率比較高。

jvm將Heap 內(nèi)存劃分為新生代與老年代,又將新生代劃分為Eden(伊甸園) 與2塊Survivor Space(幸存者區(qū)) ,然后在Eden –>Survivor Space 以及From Survivor Space 與To Survivor Space 之間實行Copying 算法。

不過jvm在應用coping算法時,并不是把內(nèi)存按照1:1來劃分的,這樣太浪費內(nèi)存空間了。一般的jvm都是8:1。也即是說,Eden區(qū):From區(qū):To區(qū)域的比例是8:1:1

始終有90%的空間是可以用來創(chuàng)建對象的,而剩下的10%用來存放回收后存活的對象。

1、當Eden區(qū)滿的時候,會觸發(fā)第一次young gc,把還活著的對象拷貝到Survivor From區(qū);當Eden區(qū)再次觸發(fā)young gc的時候,會掃描Eden區(qū)和From區(qū)域,對兩個區(qū)域進行垃圾回收,經(jīng)過這次回收后還存活的對象,則直接復制到To區(qū)域,并將Eden和From區(qū)域清空。

2、當后續(xù)Eden又發(fā)生young gc的時候,會對Eden和To區(qū)域進行垃圾回收,存活的對象復制到From區(qū)域,并將Eden和To區(qū)域清空。

3、可見部分對象會在From和To區(qū)域中復制來復制去,如此交換15次(由JVM參數(shù)MaxTenuringThreshold決定,這個參數(shù)默認是15),最終如果還是存活,就存入到老年代

注意:

  • 萬一存活對象數(shù)量比較多,那么To域的內(nèi)存可能不夠存放,這個時候會借助老年代的空間。

優(yōu)點

在存活對象不多的情況下,性能高,能解決內(nèi)存碎片和Java垃圾回收之標記清除算法詳解 中導致的引用更新問題。

缺點

  • 會造成一部分的內(nèi)存浪費。不過可以根據(jù)實際情況,將內(nèi)存塊大小比例適當調(diào)整;
  • 如果存活對象的數(shù)量比較大,coping的性能會變得很差。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • 在Jpa框架下拼接原生sql 并執(zhí)行的操作

    在Jpa框架下拼接原生sql 并執(zhí)行的操作

    這篇文章主要介紹了在Jpa框架下拼接原生sql 并執(zhí)行的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 詳解Java TCC分布式事務實現(xiàn)原理

    詳解Java TCC分布式事務實現(xiàn)原理

    這篇文章主要介紹了詳解Java TCC分布式事務實現(xiàn)原理,對分布式事務感興趣的同學,一定要看一下
    2021-04-04
  • 用SpringMVC編寫一個HelloWorld的詳細過程

    用SpringMVC編寫一個HelloWorld的詳細過程

    SpringMVC是Spring的一個后續(xù)產(chǎn)品,是Spring的一個子項目<BR>SpringMVC?是?Spring?為表述層開發(fā)提供的一整套完備的解決方案,本文我們將用SpringMVC編寫一個HelloWorld,文中有詳細的編寫過程,需要的朋友可以參考下
    2023-08-08
  • spring boot 配置freemarker及如何使用freemarker渲染頁面

    spring boot 配置freemarker及如何使用freemarker渲染頁面

    springboot中自帶的頁面渲染工具為thymeleaf 還有freemarker這兩種模板引擎,本文重點給大家介紹spring boot 配置freemarker及如何使用freemarker渲染頁面,感興趣的朋友一起看看吧
    2023-10-10
  • Java 23種設計模型詳解

    Java 23種設計模型詳解

    本文主要介紹Java 23種設計模型,這里整理了詳細的資料,及實現(xiàn)各種設計模型的示例代碼,有需要的小伙伴可以參考下
    2016-09-09
  • SpringBoot集成DJL實現(xiàn)圖片分類功能

    SpringBoot集成DJL實現(xiàn)圖片分類功能

    DJL是一個使用Java?API簡化模型訓練、測試、部署和使用深度學習模型進行推理的開源庫深度學習工具包,開源的許可協(xié)議是Apache-2.0,本文給大家介紹了SpringBoot集成DJL實現(xiàn)圖片分類功能,需要的朋友可以參考下
    2024-10-10
  • Java實現(xiàn)單人信息管理程序

    Java實現(xiàn)單人信息管理程序

    這篇文章主要為大家詳細介紹了Java實現(xiàn)單人信息管理程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Java算法之BFS,DFS,動態(tài)規(guī)劃和貪心算法的實現(xiàn)

    Java算法之BFS,DFS,動態(tài)規(guī)劃和貪心算法的實現(xiàn)

    廣度優(yōu)先搜索(BFS)和深度優(yōu)先搜索(DFS)是圖遍歷算法中最常見的兩種算法,主要用于解決搜索和遍歷問題。動態(tài)規(guī)劃和貪心算法則用來解決優(yōu)化問題。本文就來看看這些算法的具體實現(xiàn)吧
    2023-04-04
  • 解決spring項目找不到Aspect依賴注解的問題

    解決spring項目找不到Aspect依賴注解的問題

    這篇文章主要介紹了解決spring項目找不到Aspect依賴注解的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • logback的使用和logback.xml詳解(小結(jié))

    logback的使用和logback.xml詳解(小結(jié))

    Logback是由log4j創(chuàng)始人設計的另一個開源日志組件,這篇文章主要介紹了logback的使用和logback.xml詳解(小結(jié)),非常具有實用價值,需要的朋友可以參考下
    2018-11-11

最新評論