最近中文字幕完整视频高清1第十一课只须个人成长了、累积了、沉淀了

  • 首页
  • 免费观 看成人网站
  • 将粗大挺进邻居人妻
  • 亚洲国产成人AV线
  • 伊人狼人大蕉香AV
  • 行房时间短怎么治
  • 最近中文字幕完整视频高清1第十一课只须个人成长了、累积了、沉淀了
    发布日期:2022-09-23 06:54    点击次数:143
    欧美性freeHD最近中文字幕完整视频高清1第十一课

     

    本文转载自微信公众号「 bugstack虫洞栈」,作家小傅哥  。转载本文请关连 bugstack虫洞栈公众号。

    目次

    一、绪言 二、口试题 三、先起首考证垃圾回收 四、JVM 垃圾回收常识框架 1. 判断对象已死 2. 垃圾回收算法 3. 垃圾回收器 五、转头 六、系列保举

    一、绪言

    擢升自身价值有多紧迫?

    经过了风风雨雨,看过了男男女女。时刻经过的岁月就莫得不灭不变的!

    在这趟车上有人下、有人上,外皮他人给你点评的标签、留住的烙迹,都只是这趟车上的故事。只须个人成长了、累积了、沉淀了,才有契机当我方的司机。

    可能某个年齿段的你还看不懂,但如果某天你不那么忙了,要思考思考我方的路、我方的脚步。望望这些是不是你想要的,如果都是你想要的,为什么你看起来不欢乐?

    好!加油,走向你想成为的我方!

    二、口试题

    谢飞机,小记!,中午吃饱了运转怔住,何如就学不来这些常识呢,它也不进脑子!

    「谢飞机」:喂,口试官老迈,我想问个问题。

    「口试官」:什么?

    「谢飞机」:即是这常识它不进脑子呀!

    「口试官」:这....

    「谢飞机」:即是看了忘,忘了看的!

    「口试官」:是不是莫得现实?只是看了就认为会了,储藏了就暗示懂了?哪哪都不深远!?

    「谢飞机」:好像是!那有什么看法?

    「口试官」:也莫得太好的看法,学习自己即是一件无聊的事情。减少碎屑化的时刻糜掷,多用在系统化的学习上会更好一些。哪怕你写写博客记载下,考证下亦然好的。

    三、先起首考证垃圾回收

    说是垃圾回收,我不援用了它就回收了?什么时候回收的?咋回收的?

    莫得看到本色的例子,每每就很难让理科生领受这类常识。我我方也雷同,最佳是让我看得见。代码是对数学逻辑的具体终了,莫得终了经过只看谜底是莫承诺思的。

    「测试代码」

    public class ReferenceCountingGC {      public Object instance = null;     private static final int _1MB = 1024 * 1024;     /**      * 这个成员属性的唯独意思即是占点内存, 以便能在GC日记中看显现是否有回收过      */     private byte[] bigSize = new byte[2 * _1MB];      public static void main(String[] args) {         testGC();     }      public static void testGC() {         ReferenceCountingGC objA = new ReferenceCountingGC();         ReferenceCountingGC objB = new ReferenceCountingGC();         objA.instance = objB;         objB.instance = objA;         objA = null;         objB = null;         // 假定在这行发生GC, objA和objB是否能被回收?         System.gc();     }  } 

    例子来自于《深远理会Java虚构机》中援用计数算法章节。

    例子要说明的边界是,相互援用下却仍是置为null的两个对象,是否会被GC回收。如果只是按照援用计数器算法来看,那么这两个对象的计数标记不会为0,也就不成被回收。但到底有莫得被回收呢?

    这里咱们先选拔 jvm 用具教唆,jstat来监控。因为监控的经过需要我手敲代码,比拟耗时,是以咱们在调用testGC()前,睡觉会 Thread.sleep(55000);。启动代码后推论如下教唆。

    E:\itstack\git\github.com\interview>jps -l 10656 88464 38372 org.itstack.interview.ReferenceCountingGC 26552 sun.tools.jps.Jps 110056 org.jetbrains.jps.cmdline.Launcher  E:\itstack\git\github.com\interview>jstat -gc 38372 2000  S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT 10752.0 10752.0  0.0    0.0   65536.0   6561.4   175104.0     0.0     4480.0 770.9  384.0   75.9       0    0.000   0      0.000    0.000 10752.0 10752.0  0.0    0.0   65536.0   6561.4   175104.0     0.0     4480.0 770.9  384.0   75.9       0    0.000   0      0.000    0.000 10752.0 10752.0  0.0    0.0   65536.0   6561.4   175104.0     0.0     4480.0 770.9  384.0   75.9       0    0.000   0      0.000    0.000 10752.0 10752.0  0.0    0.0   65536.0   6561.4   175104.0     0.0     4480.0 770.9  384.0   75.9       0    0.000   0      0.000    0.000 10752.0 10752.0  0.0    0.0   65536.0   6561.4   175104.0     0.0     4480.0 770.9  384.0   75.9       0    0.000   0      0.000    0.000 10752.0 10752.0  0.0    0.0   65536.0   6561.4   175104.0     0.0     4480.0 770.9  384.0   75.9       0    0.000   0      0.000    0.000 10752.0 10752.0  0.0    0.0   65536.0   6561.4   175104.0     0.0     4480.0 770.9  384.0   75.9       0    0.000   0      0.000    0.000 10752.0 10752.0  0.0   1288.0 65536.0    0.0     175104.0     8.0     4864.0 3982.6 512.0  440.5       1    0.003   1      0.000    0.003 10752.0 10752.0  0.0    0.0   65536.0   437.3    175104.0    1125.5   4864.0 3982.6 512.0  440.5       1    0.003   1      0.012    0.015 10752.0 10752.0  0.0    0.0   65536.0   437.3    175104.0    1125.5   4864.0 3982.6 512.0  440.5     
    S0C、S1C,第一个和第二个幸存区大小 S0U、S1U,第一个和第二个幸存区使用大小 EC、EU,伊甸园的大小和使用 OC、OU,老年代的大小和使用 MC、MU,门径区的大小和使用 CCSC、CCSU,压缩类空间大小和使用 YGC、YGCT,年青代垃圾回收次数和耗时 FGC、FGCT,老年代垃圾回收次数和耗时 GCT,垃圾回收总耗时

    「防备」:洞悉背面三行,S1U = 1288.0、GCT = 0.003,说明仍是在推论垃圾回收。

    接下来,咱们再换种形势测试。在启动的圭表中,加入GC打印参数,99re热最新地址洞悉GC变化边界。

    -XX:+PrintGCDetails  打印每次gc的回收情况 圭表运行收尾后打印堆空间内存信息(包含内存溢出的情况) -XX:+PrintHeapAtGC  打印每次gc前后的内存情况 -XX:+PrintGCTimeStamps 打印每次gc的终止的时刻戳 full gc为每次对更生代老年代以及所有空间做和谐的回收 系统中应该尽量幸免 -XX:+TraceClassLoading  打印类加载情况 -XX:+PrintClassHistogram 打印每个类的实例的内存占用情况 -Xloggc:/Users/xiaofuge/Desktop/logs/log.log  合作上头的使用将上头的日记打印到指定文献 -XX:HeapDumpOnOutOfMemoryError 发生内存溢出将堆信息转存起来 以便分析 

    这回就可以把睡觉去掉了,并添加参数 -XX:+PrintGCDetails,如下:

    「测试边界」

    [GC (System.gc()) [PSYoungGen: 9346K->936K(76288K)] 9346K->944K(251392K), 0.0008518 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]  [Full GC (System.gc()) [PSYoungGen: 936K->0K(76288K)] [ParOldGen: 8K->764K(175104K)] 944K->764K(251392K), [Metaspace: 3405K->3405K(1056768K)], 0.0040034 secs] [Times: user=0.08 sys=0.00, real=0.00 secs]  Heap  PSYoungGen      total 76288K, used 1966K [0x000000076b500000, 0x0000000770a00000, 0x00000007c0000000)   eden space 65536K, 3% used [0x000000076b500000,0x000000076b6eb9e0,0x000000076f500000)   from space 10752K, 0% used [0x000000076f500000,0x000000076f500000,0x000000076ff80000)   to   space 10752K, 0% used [0x000000076ff80000,0x000000076ff80000,0x0000000770a00000)  ParOldGen       total 175104K, used 764K [0x00000006c1e00000, 0x00000006cc900000, 0x000000076b500000)   object space 175104K, 0% used [0x00000006c1e00000,0x00000006c1ebf100,国产成人综合美国十次0x00000006cc900000)  Metaspace       used 3449K, capacity 4496K, committed 4864K, reserved 1056768K   class space    used 376K, capacity 388K, committed 512K, reserved 1048576K 
    从运行边界可以看出内存回收日记,Full GC 进行了回收。 也可以看出JVM并不是依赖援用计数器的形势,判断对象是否存活。不然他们就不会被回收啦

    「有了这个例子,咱们再接着望望JVM垃圾回收的常识框架!」

    四、JVM 垃圾回收常识框架

    垃圾集中(Garbage Collection,简称GC),最早于1960年出生于麻省理工学院的Lisp是第一门运转使用内存动态分拨和垃圾集中时候的谈话。

    垃圾集中器主要做的三件事:哪些内存需要回收、什么时候回收、何如回收。

    而从垃圾集中器的出生到当前有半个世纪的发展,当前的内存动态分拨和内存回收时候仍是绝顶老到,一切看起来都参加了“自动化”。但在某些时候照旧需要咱们去监测在高并发的场景下,是否有内存溢出、涌现、GC时刻经过等问题。是以在了解和清楚垃圾集中的关联常识对于高档圭表员的成长就绝顶紧迫。

    垃圾集中器的中枢常识项主要包括:判断对象是否存活、垃圾集中算法、种种垃圾集中器以及垃圾回收经过。如下图;

    图 27-1 垃圾集中器常识框架

    原图下载邻接:http://book.bugstack.cn/#s/6jJp2icA

    1. 判断对象已死

    1.1 援用计数器

    为每一个对象添加一个援用计数器,统计指向该对象的援用次数。 当一个对象有相应的援用更新操作时,则对方针对象的援用计数器进行增减。 一朝当某个对象的援用计数器为0时,则暗示此对象仍是圆寂,可以被垃圾回收。

    从终了来看,援用计数器法(Reference Counting)诚然占用了一些特别的内存空间来进行计数,可是它的终了决策圣洁,判断遵循高,是一个可以的算法。

    也有一些比拟出名的援用案例,比如:微软COM(Component Object Model) 时候、使用ActionScript 3的FlashPlayer、 Python谈话等。

    「可是」,在主流的Java虚构机中并莫得采取援用时候算法来守护内存,主如果因为这个圣洁的计数形势在处理一些相互依赖、轮回援用等就会绝顶复杂。可能会存在不再使用但又不成回收的内存,形成内存涌现

    1.2 可达性分析法

    Java、C#等主流谈话的内存守护子系统,都是通过可达性分析(Reachability Analysis)算法来判定对象是否存活的。

    它的算法脉络是通过界说一系列称为 GC Roots 根对象手脚肇始节点集,从这些节点启程,穷举该集结援用到的全部对象填充到该集结中(live set)。这个经过教过标记,只标记那些存活的对象 好,那么当前未被标记的对象即是可以被回收的对象了。

    GC Roots 包括;

    全局性援用,对门径区的静态对象、常量对象的援用 推论高下文,对 Java门径栈帧中的局部对象援用、对 JNI handles 对象援用 已启动且未罢手的 Java 线程

    「两大问题」

    误报:已圆寂对象被标记为存活,垃圾集中不到。多占用一会内存,影响较小。

    漏报:援用的对象(正在使用的)莫得被标记为存活,被垃圾回收了。那么成功导致的即是JVM奔溃。(STW可以确保可达性分析法的准确性,幸免漏报)

    2. 垃圾回收算法

    2.1 标记-打消算法(mark-sweep)

    标记-打消算法(mark-sweep)

    标记无援用的圆寂对象所占据的自在内存,并记载到自在列表中(free list)。 当需要创建新对象时,内存守护模块会从 free list 中寻找自在内存,分拨给新建的对象。 这种清算形势其实绝顶圣洁高效,可是也有一个问题内存碎屑化太严重了。 「Java 虚构机的堆中对象」,必须是一语气散播的,是以顶点的情况下可能即使总剩余内存迷漫,但寻找一语气内存分拨遵循低,或者严重到无法分拨内存。重启汤姆猫! 在CMS中有此类算法的使用,GC暂停时刻短,但存在算法劣势。

    2.2 标记-复制算法(mark-copy)

    标记-复制算法(mark-copy)

    从图上看这回做完垃圾清算后一语气的内存空间就大了。 这种形势是把内存区域分红两份,分歧用两个指针 from 和 to 宝贵,而且只使用 from 指针指向的内存区域分拨内存。 当发生垃圾回收时,则把存活对象复制到 to 指针指向的内存区域,并交换 from 与 to 指针。 它的平正很明显,即是处置内存碎屑化问题。但也带来了其他问题,堆空间糜掷了一半。

    2.3 标记-压缩算法(mark-compact)

    标记-压缩算法(mark-compact)

    1974年,Edward Lueders 提议了标记-压缩算法,标记的经过和标记打消算法雷同,但在后续对象清算法子中,先把存活对象都向内存空间一端转移,然后在清算掉其他内存空间。 这种算法好像处置内存碎屑化问题,但压缩算法的性能支出也不小。

    3. 垃圾回收器

    3.1 更生代

    1.Serial

    算法:标记-复制算法

    说明:圣洁高效的单核机器,Client格局下默许更生代集中器;

    2.Parallel ParNew

    算法:标记-复制算法

    说明:GC线程并行版块,在单CPU场景成果不特出。常用于Client格局下的JVM

    3.Parallel Scavenge

    算法:标记-复制算法

    说明:方针在于达到可控糊涂量(糊涂量=用户代码运行时刻/(用户代码运行时刻+垃圾回收时刻));

    3.2 老年代

    1.Serial Old

    算法:标记-压缩算法

    说明:性能一般,单线程版块。1.5之前与Parallel Scavenge合作使用;手脚CMS的后备预案。

    2.Parallel Old

    算法:标记-压缩算法

    说明:GC多线程并行,为了替代Serial Old与Parallel Scavenge合作使用。

    3.CMS

    算法:标记-打消算法

    说明:对CPU资源明锐、停顿时刻长。标记-打消算法,会产生内存碎屑,可以通过参数开启碎屑的并吞整理。基本已被G1取代

    3.3 G1

    算法:标记-压缩算法

    说明:适用于多核大内存机器、GC多线程并行推论,低停顿、高回奏遵循。

    五、转头

    JVM 的对于自动内存守护的常识盛大,包括本文还没提到的 HotSpot 终了算法细节的关联常识,包括:安全节点、安全区域、卡表、写樊篱等。每一项内容都值得深远学习。

    如果不单是是为了口试背题,最佳的形势是现实考证学习。不然这类常识就像3分以下的过电影雷同,很难记取它的内容。

    所有的内容亦然小傅哥学习整理的一个经过,后续还会不停的不竭深挖和共享。感兴致的小伙伴可以沿路盘问学习。