- 博客(111)
- 收藏
- 关注
原创 【JVM】第三章:类加载与字节码技术
而我们自定义的类加载器的实例是可以被回收的,所以使用我们自定义加载器加载的类是可以被卸载掉的。如果程序运行的全部代码(包括自己编写的、第三方包中的、从外部加载的、动态生成的等所有代码)都已经被反复使用和验证过,在生产环境的实施阶段就可以关闭大部分的类验证措施,以缩短虚拟机类加载的时间。双亲委派模型保证了 Java 程序的稳定运行,可以避免类的重复加载(JVM 区分不同类的方式不仅仅根据类名,相同的类文件被不同的类加载器加载产生的是两个不同的类),也保证了 Java 的核心 API 不被篡改。
2023-12-31 21:48:44 1034 1
原创 【JVM】第一章:内存结构
在 JDK 7 及之前的版本,字符串池是通过 PermGen(永久代)来实现的,而在 JDK 8 及之后的版本,随着永久代的移除,字符串池被移到了堆中的一部分,具体说是放在了 Metaspace(元数据区)。当Java程序中遇到字符串字面量时,JVM会首先检查字符串池,如果字符串已经存在与池中,就直接返回池中的引用,而不会创建新的对象。如果在程序的其他地方创建相同内容的字符串穿常量,Java会检查字符串池,如果已经存在相同内容的字符串,就会重用池中的字符串对象,而不会创建新的对象。
2023-12-11 20:57:33 308
原创 【MIT 6.824 分布式系统】Lecture2中的 crawler.go 代码及解析
【代码】【MIT 6.824 分布式系统】Lecture2中的 crawler.go 代码及解析。
2023-10-17 16:46:26 166
原创 【计组】第七章:输入输出系统
这个输入语句具体是如何执行的呢?首先CPU会通过控制总线发送一个读命令,告诉键盘我要读一个数据,然后通过地址总线指明要使用哪个I/O设备。键盘接受到数据后,会将数据放到数据寄存器中。但是CPU怎么知道键盘是否已经工作结束了呢,键盘输入结束后会将结束信号卸载状态寄存器中,表明自己已经输入完成了,然后CPU去查询这个状态寄存器,就能够知道结束了没,然后就去数据寄存器中取数据然后赋值给c这个变量。CPU如何控制键盘I/O的完成?程序查询方式。
2023-07-21 17:28:27 332 1
原创 【MySQL】慢查询+SQL语句优化 (内容源自ChatGPT)
慢查询是指执行SQL查询语句所需要的时间较长,超过了一定阀值,从而导致服务器性能下降。通常情况下,当SQL查询语句执行时间超过1秒以上时就会被任务是慢查询。未使用索引:如果查询没有使用索引或者使用的索引不合理,那么MySQL就不得不全表扫描,这将降低查询速度和对系统资源的占用率。对于大型数据库的操作、尤其是 left join/ left outer join 操作,也可能使查询缓慢甚至崩溃。数据量太大:如果返回的结果集非常大,即时查询本身很快,也很占用大量系统资源,降低服务器性能。
2023-04-28 15:03:48 1473
原创 【Redis】分布式锁的应用以及Redission看门狗机制和MultiLock的源码深入解析
利用 「set nx ex」 获取锁,并设置过期时间,保存线程标识释放锁时先判断线程标识是否与自己一致,一致则删除锁特性:利用 「set nx」 满足互斥性利用 「set ex」设置过期时间,保证故障时锁依然能释放,避免死锁,提高安全性利用 Redis 集群保证高可用和高并发特性。
2023-03-23 22:34:42 2213
原创 【设计模式】 单例设计模式 (二)
枚举类实现单例模式是极力推荐的单例实现模式,因为枚举类型是线程安全的,并且只会装载一次,设计者充分的利用了枚举的这个特性来实现单例模式,枚举的写法非常简单,而且枚举类型是所用单例实现中唯一一种不会被破坏的单例实现模式。双重检查锁模式是一种非常好的单例实现模式,解决了单例、性能、线程安全问题,上面的双重检测锁模式看上去完美无缺,其实是存在问题,在多线程的情况下,可能会出现空指针问题,出现问题的原因是JVM在实例化对象的时候会进行。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
2022-12-13 20:58:50 384
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人