• 关于GC的一些算法


    0-----------------------------------
    -Xms4m -Xmx4m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/Test03.dump  为虚拟机设置初始化堆的大小(-Xms4m )
    设置最大堆大小( -Xmx4m) -XX:+HeapDumpOnOutOfMemoryError堆溢出虚拟机参数
    -Xss 10m 为虚拟机 设置栈调用的深度
    ----------------------------------------------------
    方法区:和堆一样,方法区是一块所有线程共享的内存区域,他用于保存系统的类信息。方法区可以保存多少信息可以对其进行配置。在默认的情况下,-XX:PerSize=64M,如果系统运行时产生大量的类,就需要设置一个相对合适的方法区,以免出现永久区内存溢出的问题。
    -XX:PermSize=64M -XX:MaxPermSize=64M
    -------------------------------------------------------
    垃圾回收的概念和其算法(GC Garbage Coolection)
             GC中的垃圾,特指存于内存中、不再被使用对象,而回收就相当于把垃圾倒掉:如引用计数法、标记压缩法、复制算法、分代、分区的思想。
    引用计数法:无法处理循环引用,及迭代,api级别的调用。
    标记清除法:回收被标记的内存,不可能完全清除内存空间,可能存在空间碎片,内存使用率低。
    *******************
    复制算法:其核心思想就是把内存空间分为两块,每次只是用其中一块,在垃圾回收时,将正在使用的内存中存留的对象复制到未使用的内存中去,之后去清除之前正在使用的内存中的所有对象,反复去交替两个内存的角色。完成垃圾收集(java中新生代的from和to空间就是使用这个算法);
    *******************
    标记压缩法:在标记清除法基础之上作了优化,把存活的对象压缩到内存的另一端,而后进行垃圾清除,把标记的对象全部清除,就不会产生空间碎片的问题。(java中老年代使用的就是标记压缩法)
    ************************
    考虑一个问题:为什么新生代和老年代使用不同的垃圾回收算法?
    答:新生代的对象回收频率高,但是每次回收耗时都很短。而老年代的对象存活概率要高,采用标记压缩法是为了给jvm节约内存。提高jvm性能。
    ------------------------------------------------------------------
    分代算法:就是根据对象的特点把内存分为N块,而后根据每个内存的特点使用不同的算法。
    分区算法:将内存分为N个小的独立的空间。每个小空间都可以独立使用。这样细粒度的控制一次回收多少个小空间和那些个小空间,而不是对整个空间进行GC,从而提升性能,并减少GC的停顿时间
    ---------------------------------------------------------------------
    对象如何进入老年代?
    一般而言对象首次创建会被放置在eden区,如果没有GC的介入,对象会一直停留在eden区。一般而言,只要对象达到一定年龄之后就会进入老年代,对象的年龄是由经历过GC的次数。java虚拟机提供一个一个参数来控制新生代对象的最大年龄,当超过这个年龄之后对象就会由新生代晋升为老年代。
    -XX:MaxTenuringThreshold 默认情况下为15

  • 相关阅读:
    .NET: 如何在宿主中动态加载所有的服务
    SharePoint : 自定义权限设置中可能遇到的问题
    在javascript中进行cookie的读写操作
    .NET : 如何读取数据库中的bmp图片数据
    Microsoft Security Essential
    利用ashx和ajax实现表格的异步填充
    IPV6
    Windows 7 : 开发人员资源
    SQL Server : 使用SQL Express的User Instance特性
    .NET : 如何在Windows Forms中使用DataRepeater控件
  • 原文地址:https://www.cnblogs.com/133261c/p/9610747.html
Copyright © 2020-2023  润新知