1.Java 中是值传递还是引用传递?传引用的错觉是【南充培训学校】如何造成的呢?在运行栈中,基本类型和引用的处理是一样的,都是传值,所以,如果是传引用的方法调用,也同时可以理解为“传引用值”的传值调用,即引用的处理跟基本类型是完全一样的。但是当进入被调用方法时,被传递的这个引用的值,被程序解释(或者查找)到堆中的对象,这个时候才对应到真正的对象。如果此时进行修改,修改的是引用对应的对象,而不是引用本身,即:修改的是堆中的数据。所以这个修改是可以保持的了。
对象,从某种意义上说,是由基本类型组成的。可以把一个对象看作为一棵树,对象的属性如果还是对象,则还是一颗树(即非叶子节点),基本类型则为树的叶子节点。程序参数传递时,被传递的值本身都是不能进行修改的,但是,如果这个值是一个非叶子节点(即一个对象引用),则可以修改这个节点下面的所有内容。2.引用类型对象引用类型分为强引用、软引用、弱引用和虚引用。
强引用:就是我们一般声明对象是时虚拟机生成的引用,强引用环境下,垃圾回收时需要严格判断当前对象是否被强引用,如果被强引用,则不会被垃圾回收
软引用:软引用一般被做为缓存来使用。与强引用的区别是,软引用在垃圾回收时,虚拟机会根据当前系统的剩余内存来决定是否对软引用进行回收。如果剩余内存比较紧张,则虚拟机会回收软引【南充会计培训班】用所引用的空间;如果剩余内存相对富裕,则不会进行回收。换句话说,虚拟机在发生 OutOfMemory 时,肯定是没有软引用存在的。
弱引用:弱引用与软引用类似,都是作为缓存来使用。但与软引用不同,弱引用在进行垃圾回收时,是一定会被回收掉的,因此其生命周期只存在于一个垃圾回收周期内。强引用不用说,我们系统一般在使用时都是用的强引用。而“软引用”和“弱引用”比较少见。
他们一般被作为缓存使用,而且一般是在内存大小比较受限的情况下做为缓存。因为如果内存足够大的话,可以直接使用强引用作为缓存即可,同时可控性更高。因而,他们常见的是被使用在桌面应用系统的缓存。3.基本垃圾回收算法3.1 按照基本回收策略分
3.1【南充会计培训中心】.1 引用计数(Reference Counting):
比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为 0 的对象。此算法较致命的是无法处理循环引用的问题。
3.1.2 可达性分析清理
标记-清除(Mark-Sweep):此算法执行分两阶段。**阶段从引用根节点开始标记所有被引用的对象,第二阶段遍历整个堆,把未标记的对象清除。此算法需要暂停整个应用,同时,会产生内存碎片。
复制(Copying):?此算法把内存空间划为两个相等的区域,每次只使用其中一个区域。垃圾回收时,遍历当前使用区域,把正在使用中的对象复制到另外一个区域中。次算法每次只处理正在使用中的对象,因此复制成本比较小,同时复制过去以后还能进行相应的内存整理,不会出现“碎片”问题。当然,此算法的缺点也是很明显的,就是需要两倍内存空间。
标记-整理(Mark-Compact):此算法结合了“标记-清除”和“复制”两个算法的优点。也是分两阶段,**阶段从根节点开始标记所有被引用对象,第二阶段遍历整个堆,清除标记对 象,并未标记对象并且把存活对象“压缩”到堆的其中一块,按顺序排放。此算法避免了“标 记-清除”的碎片问题,同时也避免了“复制”算法的空间问题。
3.2 按分区对待的方式分
3.2.1 增量收集(Incremental Collecting):实时垃圾回收算法,即:在应用进行的同时进行垃圾回收。不知道什么原因 JDK5.0 中的收集器没有使用这种算法的。
3.2.2 分代收集(Generational Collecting):基于对对象生命周期分析后得出的垃圾回收算法。把对象分为年青代、年老代、持久代,对不同生命周期的对象使用不同的算法(上述方式中的一个)进行回收。现在的垃圾回收器(从 J2SE1.2 开始)都是使用此算法的。
3.3 按系统线程分
3.3.1 串行收集:串行收集使用单线程处理所有【清大软舰室内设计培训】垃圾回收工作,因为无需多线程交互,实现容易,而且效率比较高。但是,其局限性也比较明显,即无法使用多处理器的优势,所以此收集适合单处理器机器。当然,此收集器也可以用在小数据量(100M 左右)情况下的多处理器机器上。
3.3.2 并行收集:并行收集使用多线程处理垃圾回收工作,因而速度快,效率高。而且理论上 CPU 数目越多,越能体现出并行收集器的优势。
3.3.3 并发收集:相对于串行收集和并行收集而言,前面两个在进行垃圾回收工作时,需要暂停整个运行环境,而只有垃圾回收程序在运行,因此,系统在垃圾回收时会有明显的暂停,而且暂停时间会因为堆越大而越长。
总结:本文主要是解答【Java程序员必须了解的JVM性能调优知识,全都【南充培训学校】在这】南充清大软舰设计师培训学校【0817-2694333】★★零基础小班教学,学会为止专注于Java培训、大数据开发培训、Python人工智能培训、安卓开发培训、室内设计培训、UI设计培训等。南充电脑培训,南充电脑学校,南充电脑培训学校,南充电脑培训班,南充计算机培训,南充计算机学校,南充计算机培训学校,南充电脑短期培训班,南充会计培训,南充会计学校,南充会计培训学校10余年专业培训,双校区,教学设备一流,师资强大,技能+学历模式,0基础0首付,项目实战+带薪实训。
说明:(www.qdrj1999.com)清大软舰-西南IT培训知名教育品牌[清大软舰教育-清华北大精英创立]南充清大软舰计算机IT培训_南充电脑培训学校_南充清大软舰电脑培训_南充IT培训_南充清大软舰IT培训南充电脑培训班哪家好?多少钱?清大软舰IT培训,清大软舰设计师培训,南充电脑培训,南充电脑学校,南充电脑培训学校,南充电脑培训班,南充计算机培训,南充计算机学校,南充计算机培训学校,南充电脑短期培训班,南充会计培训,南充会计学校,南充会计培训学校,南充会计培训班,南充会计证培训,南充会计培训机构,南充会计培训中心,南充室内设计培训,南充室内设计培训班,南充室内设计培训机构,南充室内设计培训学校,南充平面设计培训,南充平面设计培训班,南充平面设计培训机构,南充平面设计培训学校,南充网页设计培训,清大软舰,南充清大软舰,南充清大软舰教育,清大软舰教育培训中心,清大软舰电脑学院,清大软舰电脑学校,清大软舰JAVA培训,清大软舰设计培训,清大软舰平面设计培训,清大软舰室内设计培训,南充网页培训,南充Photoshop培训,南充CorelDRAW培训,南充CAD培训,南充3DMAX培训,南充IT教育,南充软件工程师培训,南充软件开发培训,南充java培训,南充.NET培训,南充网络营销培训,南充UI设计培训,南充android培训,南充安卓培训,南充IOS培训,南充百度营销培训,南充电商培训, 南充电脑培训哪家好?南充电脑培训班多少钱? 南充计算机培训哪家好?南充计算机培训班多少钱? 南充平面设计师培训哪家好?南充平面设计师培训班多少钱? 南充PS培训哪家好?南充PS培训班多少钱? 南充CAD培训哪家好?南充CAD培训班多少钱? 南充室内设计师培训哪家好?南充室内设计师培训班多少钱? 南充网页设计师培训哪家好?南充网页设计师培训班多少钱? 南充UI设计师培训哪家好?南充UI设计师培训班多少钱? 南充软件开发工程师培训哪家好?南充软件开发工程师培训班多少钱? 南充JAVA软件开发工程师培训哪家好?南充JAVA软件开发工程师培训班多少钱? 南充电商培训哪家好?南充电子商务培训班多少钱? 详情请咨询客服!
联系电话:147-8171-7777(微信同号),180-8035-3433(微信同号),173-8367-1520(微信同号),173-8367-5520(微信同号),173-8367-7520(微信同号)
转载注明出处:/news/1807.html
