
JVM
文章平均质量分 96
快乐麦肯
JAVA
展开
-
JVM4 内存模型(JMM)
未添加volatile关键字线程不会停止: t 线程要频繁从主内存中读取 run 的值,JIT 编译器会将 run 的值缓存至自己工作内存中的高速缓存中,减少对主存中 run 的访问,提高效率。1 秒之后,main 线程修改了 run 的值,并同步至主存,而 t 是从自己工作内存中的高速缓存中读取这个变量的值,结果永远是旧值。-如果一个对象虽然有多线程访问,但多线程访问的时间是错开的(也就是没有竞争),那么可以使用轻量级锁来优化。未加锁:i可能为正数或者负数,线程争夺。添加volatile:线程可以停止。原创 2022-10-31 12:02:01 · 212 阅读 · 0 评论 -
JVM3 类加载与字节码技术
适用情况想加载非 classpath 随意路径中的类文件都是通过接口来使用实现,希望解耦时,常用在框架设计这些类希望予以隔离,不同应用的同名类都可以加载,不冲突,常见于tomcat容器步骤继承 ClassLoader 父类要遵从双亲委派机制,重写findClass 方法注意不是重写 loadClass 方法,否则不会走双亲委派机制读取类文件的字节码调用父类的 defineClass 方法来加载类使用者调用该类加载器的 loadClass 方法案例Class原创 2022-10-29 22:48:33 · 462 阅读 · 0 评论 -
JVM2 垃圾回收(GC)
无需手动编码,但其内部配合引用队列使用,在垃圾回收时,终结器引用入队(被引用对象暂时没有被回收),再由 Finalizer 线程通过终结器引用找到被引用对象并调用它的finalize方法,实线箭头为强引用,后四种引用对象被垃圾回收的前提为该引用对象无强引用。新生代回收-》新生代+并发标记-》混合回收。当对象的引用计数变为零时,会被垃圾回收。跨代引用(老年代引用新生代):循环引用时无法被垃圾回收。原创 2022-10-28 14:09:43 · 545 阅读 · 0 评论 -
JVM1 内存结构
Program Counter Register 程序计数器(寄存器),程序计数器在物理上通过寄存器实现。原创 2022-10-24 12:42:31 · 419 阅读 · 0 评论