JVM
文章平均质量分 61
黙谷
这个作者很懒,什么都没留下…
展开
-
对finalize的理解
它是Object中的一个方法,子类重写它,垃圾回收时此方法会被调用,可以在其中进行一些资源释放和清理工作,但将资源释放和清理放在finalize方法中非常不友好,非常影响性能,严重时甚至会引起OOM,从java9开始就被标注为@Deprecated,不建议被使用。为什么finalize方法非常不好,非常影响性能?1. 非常不好FinalizerThread是守护线程,代码很有可能没来得及执行完,线程就结束了,造成资源没有正确释放。 异常会被吞掉,不能判断有没有在释放资源时发生错误。2.原创 2022-03-05 18:58:12 · 524 阅读 · 0 评论 -
JVM类加载机制
类加载过程1. 加载 通过一个类的全限定名来获取定义此类的二进制字节流。 将这个字节流所代表的的静态存储结构转化为方法区的运行时数据结构。 在内存中生成一个代表这个类的java.lang.Class的对象,作为方法区这个类的各种数据的访问入口。 加载是懒惰执行2. 链接验证:验证类是否符合Class规范,合法性,安全性检查。 准备:为static变量分配空间,设置初始值。 解析:将常量池符号引用解析为直接引用。3.初始化 初始化阶段就是执行类构造器<clinit>.原创 2022-03-05 18:32:17 · 424 阅读 · 0 评论 -
JVM的异常处理机制
在Java程序中显式抛出异常的操作(throw语句)都由athrow指令来实现。而在Java虚拟机中,处理异常(catch语句)不是由字节码指令来实现的(很久之前曾今使用jsr和ret指令来实现,现在已经不用了),而是采用异常表来完成。Java虚拟机会产生一个Exception table的结构,[from,to)是前闭后开的检测范围。一旦这个范围内的字节码执行出现异常,则通过type匹配异常类型,如果一致,进入target所指示行号,然后会先将异常对象存入局部变量表中。为了保证fina原创 2022-03-05 14:43:11 · 284 阅读 · 0 评论