jvm相关

参考《深入理解JVM&G1CG》---周明耀,这本书讲的比较浅,如果需要深入了解,还得增加资料。

类加载遵循“双亲委派”一般由父加载器ClassLoader进行加载,父加载器加载不了的才让子加载器加载。不然不同的加载器加载的类,是不一样的,使用equals方法可能会得到false。比如String使用ClassLoader,若使用自己定的加载器加载,可能可以做一点手脚,大家都会中招。还是用父类加载器比较安全。

加载器包括

  1. 启动类加载器(Bootstrap ClassLoader):C++实现,在java里无法获取,负责加载/lib下的类。
  2. 扩展类加载器(Extension ClassLoader): Java实现,可以在java里获取,负责加载/lib/ext下的类。
  3. 系统类加载器/应用程序类加载器(Application ClassLoader):是与我们接触对多的类加载器,我们写的代码默认就是由它来加载,ClassLoader.getSystemClassLoader返回的就是它。
  4. 自定义加载器。1 - 4  ,父 - 子。

加载、验证、准备、解析、初始化、使用、销毁。

解析:由符号引用变为直接引用。https://blog.csdn.net/chenge_j/article/details/72677766

 

java对象的引用方式有以下四种:

强引用,变量=值 这种方式,GC不会回收,宁愿选择OOM,也不回收这个对象。

    String str = "hello java";

    Object object = new Object();
    因为GC算法是,从root能索引到的对象就不会被回收。但是当这个对象用完了,如一个线程结束了,就不会被root索引到,可进行回收了。


软引用,可以避免强引用带来的OOM,GC的时候,如果空间足,不会回收这个对象,如果不足,进行回收。

    SoftReference<String> sr = new SoftReference<String>(new String("hello"));

    System.out.println(sr.get()); System.gc(); //通知JVM的gc进行垃圾回收

    System.out.println(sr.get()); 存在


弱引用,同样可以避免OOM,GC的时候,不论空间足不足,都会进行回收。

    WeakReference<String> wr = new WeakReference<String>(new String("hello"));

    System.out.println(wr.get());

    System.gc(); //通知JVM的gc进行垃圾回收

    System.out.println(wr.get()); 不存在


虚引用,通过PhantomReference,幽灵引用,没有存在感,不晓得有什么卵用。

    ReferenceQueue<String> queue = new ReferenceQueue<String>();

    PhantomReference<String> pr = new PhantomReference<String>(new String("hello"), queue);

    System.out.println(pr.get()); 不存在

判断对象是否存活:引用计数、可达性分析

垃圾回收算法:标记-清除、标记-压缩、复制、分代回收。

-XX:+HeapDumpOnOutOfMemoryError系统出现oom的时候,生产dump文件。也可以用jmap命令。

jvm内存模型为:计数器、本地方法栈、栈、堆、方法区;堆中分为新生代、老年代;方法区以前成为永久代(jdk8被淘汰)

收集器名称 类型用途开启
Serial吞吐量优先Serial年轻代、复制算法、STW-XX: +UseSerialGC
Serial Old老年代、标记压缩、STW
ParNew吞吐量优先ParNewSerial的多线程版本

-XX:+UseParallelGC

-XX:+UseParNewGC(可以配合CMS)

年轻代使用并行收集器

老年代使用串行收集器 

Parallel吞吐量优先 

年轻代:标记复制

老年代:标记压缩

 

吞吐量优先

-XX:+UseParallelOldGC
年轻代、老年代都使并行收集器
CMS

低延时优先

设置停顿时间

 

老年代专用:标记清除

初始标记、

并发标记、

再次标记、

并发清除

-XX:+UseConcMarkSweepG
G1

低延时优先

设置停顿时间

   

Serial、ParNew都是GC利用单核或者多核,全占CPU,与应用无关。

Parallel可以关注吞吐量,与应用并行进行。

CMS处理GC的方法可以视为Parallel的进化版

CMS相关老年代专用回收器。它的初始标记会带来短暂STW,因为只是一个初步的标记,不会暂停太久。由于要处理第二阶段并发标记中业务线程创建的无用对象,接下来的再次标记这个阶段会STW时间长一点。还有碎片产生。为了应对碎片的产生,配置一个参数-XX:+UseCMS-CompactAtFullCollection用来在每次FullGC之后进行碎片整理,但是会带来较大的停顿,则可以配置另一个参数-XX:CMSFullGCs-BeforeCompaction限制多少次FullGC之后进行一次碎片整理。

CMS提供-XX:CMSlnitiatingOccupanyFraction参数来决定老年代已用空间占到老年代多少比例(68%jdk6>Verson, 92%jdk6<Verson)之后进行回收操作。其他的收集器(除了G1),似乎没有这个选项。也就是,这个参数可以减少FullGC的触发次数(未雨绸缪)。但没有设置停留时间的选项。

G1相关:jdk1.7正式投入,jdk9默认。很重视老年代,如果老年代占到了整个堆大小的百分之多少,就会进行回收。Region大小为1M-32M大小之间,2的倍数,这样在堆大小既定的情况下,就可以计算出Region数量了。如果来了大对象,计算x个连续的Region可以放下对象即可,如果没有这个连续的x个,则进行一次FullGC。

串行收集器并行收集器(吞吐量优先,最短的暂停时间处理完GC)、并发收集器(响应时间优先,与程序并发同行CMS)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值