JVM
文章平均质量分 95
了解Java程序运行的底层逻辑
机械可可尼
一个简单的IT宅男,在此记录一下我的所知所学!
展开
-
JVM内存结构
Program Counter Register 程序计数器(寄存器)作用,是记住下一条jvm指令的执行地址特点是线程私有的不会存在内存溢出每个线程运行需要的内存空间,称为虚拟机栈每个栈由多个栈帧(Frame)组成,对应着每次调用方法时所占用的内存每个线程只能有一个活动栈帧,对应着当前正在执行的方法Heap 堆:通过new关键字创建的对象都会被放在堆内存它是线程共享,堆内存中的对象都需要考虑线程安全问题有垃圾回收机制。原创 2024-02-02 14:37:11 · 334 阅读 · 0 评论 -
JVM垃圾回收
当一个对象被引用时,就当引用对象的值加一,当值为 0 时,就表示该对象不被引用,可以被垃圾收集器回收。但是这个引用计数法有一个弊端,如下图所示,循环引用时,两个对象的计数都为1,导致两个对象都无法被释放。CMS 收集器的内存回收过程是与用户线程一起并发执行的,可以搭配 ParNew 收集器(多线程,新生代,复制算法)与 Serial Old 收集器(单线程,老年代,标记-整理算法)使用。上面的代码中,当软引用引用的对象被回收了,但是软引用还存在,所以,一般软引用需要搭配一个引用队列一起使用。原创 2024-02-02 14:40:39 · 964 阅读 · 0 评论 -
JVM类加载器
使用场景想加载非 classpath 随意路径中的类文件通过接口来使用实现,希望解耦时,常用在框架设计这些类希望予以隔离,不同应用的同名类都可以加载,不冲突,常见于 tomcat 容器步骤继承 ClassLoader 父类要遵从双亲委派机制,重写 findClass 方法不是重写 loadClass 方法,否则不会走双亲委派机制读取类文件的字节码调用父类的 defineClass 方法来加载类使用者调用该类加载器的 loadClass 方法破坏双亲委派模式。原创 2024-02-02 14:39:44 · 922 阅读 · 0 评论