日韩综合有无码综合网创建一个对象的前提是有对应的类信息

  • 首页
  • 免费观 看成人网站
  • 将粗大挺进邻居人妻
  • 亚洲国产成人AV线
  • 伊人狼人大蕉香AV
  • 行房时间短怎么治
  • 日韩综合有无码综合网创建一个对象的前提是有对应的类信息
    发布日期:2022-09-23 05:46    点击次数:124
    北京学萨克斯成人班日韩综合有无码综合网

    谎话少说,径直开整:

    第1组:JDK、JRE、JVM的关系

    JDK中包含JRE,也包括JDK,而JRE也包括JDK。

    限制关系:JDK>JRE>JVM。

    具体见下图:

     

    第2组:.java文献与.class文献的关系

    这两者的关系需要两张图智商说显然:

     

    第3组:class文献与JVM的关系

    JVM通过类加载机制,把class文献装载进JVM中,然后JVM默契class文献的本色,于是就有了类加载过中的调和、开动化等。

    第4组:类加载器关系

    一张图来评释:

     

    第5组:举止区、堆、栈之间到底有什么关系

    径直上图:

     

    栈指向堆

    如若在栈帧中有一个变量,类型为援用类型,比如:

    package com.tian.my_code.test;  public class JvmCodeDemo {     public  Object testGC(){         int op1 = 10;         int op2 = 3;         Object obj = new Object();         Object result=obj;         return result;     } } 

    这时候便是典型的栈中元素obj指向堆中的Object对象,result的指向和obj的指向为消亡个对象。

     

    使用敕令

    javac -g:vars JvmCodeDemo.java 

    进行编译,然后再使用

    javap -v JvmCodeDemo.class >log.txt 

    然后掀开log.txt文献

     

    举止区指向堆

    举止区中会存放静态变量,常量等数据。

    如若是底下这种情况,便是典型的举止区中元素指向堆中的对象。

     

    堆指向举止区

    举止区中会包含类的信息,对象保存再堆中,创建一个对象的前提是有对应的类信息,这个类信息就在举止区中。

     

    第6组:Minor、Major、Full GC的关系

    Minor GC:发生在年青代的 GC。

    Minor GC是指从年青代空间(包括 Eden 和 Survivor 区域)回收内存。当 JVM 无法为一个新的对象分拨空间时会触发Minor GC,比如当 Eden 区满了。 Eden区满了触发MinorGC,这时会把Eden区存活的对象复制到Survivor区,当对象在Survivor区熬过一定次数的MinorGC之后,就会提高到老年代(天然并不是系数的对象都是这么提高的到老年代的),当老年代满了,就会报OutofMemory特别。 系数的MinorGC都会触发全全国的暂停(stop-the-world),住手利用举止的线程,不外这个经过止境顷然。

    Major GC:发生在老年代的 GC。

    Major GC清算Tenured区(老年代)。

    Full GC:更生代+老年代,比如 举止区引起年青代和老年代的回收。

    第7组:Survivor与Eden的关系

    关于这两者,最遑急的是要显然为什么需要Survivor区?只消Eden不成吗?

    如若莫得Survivor,Eden区每进行一次Minor GC ,况兼莫得年齿限度的话, 存活的对象就会被送到老年代。这么一来,老年代很快被填满,触发Major GC(因为Major GC一般伴跟着Minor GC,也不错看做触发了Full GC)。老年代的内存空间弘大于更生代,进行一次Full GC破费的时辰比Minor GC长得多。

    引申时辰长有什么坏处?

    频发的Full GC破费的时辰很长,会影响大型举止的引申和反馈速率。

    可能你会说,那就对老年代的空间进行增多或者较少咯。

    假如增多老年代空间,更多存活对象智商填满老年代。天然裁汰Full GC频率,关联词跟着老年代空间加大,99re热最新地址一朝发生Full GC,引申所需要的时辰更长。

    假如减少老年代空间,天然Full GC所需时辰减少,关联词老年代很快被存活对象填满,Full GC频率增多。

    是以Survivor的存在真谛,便是减少被送到老年代的对象,进而减少Full GC的发生,Survivor的预筛选保证,只消阅历16 次Minor GC还能在更生代中存活的对象,才会被送到老年代。

    第8组:援用计数法和可达性共享算法的关系

    援用计数法

    给对象添加一个援用计数器,每当一个场合援用它object经常刻加1,援用失去以后就减1,计数为0评释不再援用

    优点:竣事浅易,判定末端高 污点:无法处分对象相互轮回援用的问题,对象A中援用了对象B,对象B中援用对象A。

    public class A {     public B b;  } public class B {     public C c;  } public class C {     public A a;  } public class Test{          private void test(){         A a = new A();         B b = new B();         C c = new C();                  a.b=b;         b.c=c;         c.a=a;     } } 

    可达性分析算法

    当一个对象到GC Roots莫得援用链衔接,即便是GC Roots到这个对象不可达时,解释对象不可用。

     

    GC Roots种类:

    Java 线程中,现时系数正在被调用的举止的援用类型参数、局部变量、临时值等。也便是与咱们栈帧干系的多样援用。系数现时被加载的 Java 类。Java 类的援用类型静态变量。运行经常量池里的援用类型常量(String 或 Class 类型)。JVM 里面数据结构的一些援用,国产成人综合美国十次比如 sun.jvm.hotspot.memory.Universe 类。用于同步的监控对象,比如调用了对象的 wait() 举止。

    第9组:对象的援用类型的关系

    强援用:User user=new User();咱们设置中使用最多的对象援用姿首。

    特质:咱们泛泛典型编码Object obj = new Object()中的obj便是强援用。

    通过枢纽字new创建的对象所关联的援用便是强援用。

    当JVM内存空间不及,JVM愿意抛出OutOfMemoryError运行时荒唐(OOM),使举止特别停止,也不会靠大略回收具有强援用的“存活”对象来处安分存不及的问题。

    关于一个肤浅的对象,如若莫得其他的援用关系,只消逾越了援用的作用域或者显式地将相应(强)援用赋值为 null,便是不错被垃圾网罗的了,具体回收时机照旧要看垃圾网罗计策。

    软援用:SoftReference object=new SoftReference(new Object());

    特质:软援用通过SoftReference类竣事。软援用的人命周期比强援用短一些。只消当 JVM 以为内存不实时,才会去试图回收软援用指向的对象:即JVM 会确保在抛出 OutOfMemoryError 之前,清算软援用指向的对象。软援用不错和一个援用部队(ReferenceQueue)调和使用,如若软援用所援用的对象被垃圾回收器回收,Java捏造机就会把这个软援用加入到与之关联的援用部队中。后续,咱们不错调用ReferenceQueue的poll()举止来查抄是否有它所柔和的对象被回收。如若部队为空,将复返一个null,不然该举止复返部队中前边的一个Reference对象。

    利用场景:软援用经常用来竣事内存明锐的缓存。如若还有欢然内存,就不错暂时保留缓存,当内存不实时清算掉,这么就保证了使用缓存的同期,不会耗尽内存

    弱援用:WeakReference object=new WeakReference (new Object();ThreadLocal中有使用.

    弱援用通过WeakReference类竣事。弱援用的人命周期比软援用短。在垃圾回收器线程扫描它所统辖的内存区域的经过中,一朝发现了具有弱援用的对象,岂论现时内存空间敷裕与否,都会回收它的内存。由于垃圾回收器是一个优先级很低的线程,因此不一定会很快回收弱援用的对象。

    弱援用不错和一个援用部队(ReferenceQueue)调和使用,如若弱援用所援用的对象被垃圾回收,Java捏造机就会把这个弱援用加入到与之关联的援用部队中。利用场景:弱利用相同可用于内存明锐的缓存。

    虚援用:确实没见过使用, ReferenceQueue 、PhantomReference。

    第10组:垃圾回收算法的关系

    标志-撤消算法

    第一步:便是找出活跃的对象。咱们反复强调 GC 经过是逆向的, 把柄 GC Roots 遍历系数的可达对象,这个经过,就叫作标志。

    第二部:除了上头标志出来的对象除外,其余的都了了掉。

    污点:标志和撤消末端不高,标志和撤消之后会产生多数不连气儿的内存碎屑

     

    复制算法

    更生代使用,更生代分中Eden:S0:S1= 8:1:1,其中背面的1:1便是用来复制的。

    当其中一块内存使用结束,就将还存活的对象复制到另外一块上头,然后把一经使用过的内存空间一次 根撤回。

     

    一般对象分拨都是参加更生代的eden区,如若Minor GC还存活则参加S0区,S0和S1束缚对象进行复制。对象存活年齿最大默许是15,大对象进来可能因为更生代不存在连气儿空间,是以会径直接入老年代。任何使用都有更生代的10%是空着的。

    污点:对象存活率高时,复制末端会较低,销耗内存。

    标志整理算法

    它的主要眉目,便是转移系数存活的对象,且按照内存地址规章纪律罗列,然后将末端内存地址以后的内存一路回收。 关联词需要按捺,这仅仅一个逸想景色。对象的援用关系一般都口舌常复杂的,咱们这里差别具体的算法进行刻画。咱们只需要了解,从末端上来说,一般整理算法是要低于复制算法的。这个算法是逃避了内存碎屑和内存销耗。

    让系数存活的对象都向一端转移,然后径直清算掉端范畴除外的内存。

     

    从上头的三个算法来看,其实莫得齐全最佳的回收算法,只消最合适的算法。

    第11组:垃圾网罗器之间有什么关系

    「更生代网罗器」:Serial、ParNew、Parallel Scavenge「老年代网罗器」:CMS、Serial Old、Parallel Old

    「整堆网罗器」:G1,ZGC(因为不涉年代不在图中)

    本文转载自微信公众号「 Java后端时刻全栈」,不错通过以下二维码关注。转载本文请算计 Java后端时刻全栈公众号。