JVM
JVM学习笔记
黄子何
爱好篮球。
展开
-
JVM异常处理小分析
可能平时朋友们都好奇,为什么没有进行try catch的处理,当我们抛出异常时还是能打印出异常堆栈信息: public static void main(String[] args) throws Exception { throw new RuntimeException("error"); }其实通过debug,可以发现线程会执行如下方法, 通过注释可以知道,当异常未被代码捕获时,jvm会调用该方法来对异常进行处理。 /** * Dispatch a原创 2021-04-04 22:45:00 · 83 阅读 · 1 评论 -
垃圾回收器
理论低延迟和高吞吐量的理解高吞吐量意味着垃圾回收的频率很低,但是垃圾回收需要的时间很长,对于终端用户来说,在操作时如果发生垃圾回收STW,则会影响用户的体验。低延迟则是垃圾回收的频率很高,但是由于线程切换等的开销,使得系统的效率或者说吞吐量下降...原创 2021-03-17 22:24:02 · 48 阅读 · 0 评论 -
弱引用实现的WeakHashMap
待定原创 2021-02-28 22:18:46 · 183 阅读 · 0 评论 -
为什么垃圾回收时需要stop the world
什么是stop the world在gc事件发生过程中,会产生应用的停顿,停顿产生时整个应用程序线程都会被暂停,没有任何响应,有点像卡死的感觉,这个停顿称为STW为什么需要stop the world可达性分析算法中,枚举根节点(GC ROOT)会导致所有java程序执行线程停顿。分析工作必须在一个能确保一致性的快照中进行一致性指整个分析期间整个执行系统像被冻结在某个时间点上如果出现分析过程中对象引用关系还在不断地变化,则分析结果的准确性无法保证。举个例子,如果分析时判断该对象已经没有引用原创 2021-02-28 11:08:33 · 1785 阅读 · 1 评论 -
重写和重载
https://blog.51cto.com/14687333/2537239相关概念静态类型和实际类型Animal jack = new Dog()jack的静态类型为Animal, 实际类型为Dog虚方法和非虚方法非虚方法:方法在编译器就确定了具体的调用版本,则这个版本在运行时是不可变的,这样的方法称为非虚方法。如静态方法、私有方法、final方法、实例构造器、父类方法都是非虚方法。其他方法为虚方法方法调用指令invokestatic 调用静态方法,解析阶段(类加载的链原创 2021-02-15 00:03:04 · 78 阅读 · 0 评论 -
i++和++i
基础public static void main(String[] args) throws Exception { int i = 5; int a = ++i; int j = 6; int b = j++; }编译为字节码指令: 0: iconst_5 1: istore_1 // 将5存放到【局部变量表】下标为1的位置 2: iinc 1, 1 // 将下标为1的位置的原创 2021-02-14 21:00:17 · 84 阅读 · 0 评论 -
双亲委派机制的优势
优势避免类的重复加载通过向上委托的方式,如果一个类已经被父加载器加载了,就不会再重复被子类加载器所加载。保护程序安全,避免核心API被篡改 (沙箱安全机制)比如自定义一个包叫 java.lang,里面有String类,这时就相当于是去篡改了java的核心类库。而双亲委派机制就实现了核心api的保护,因为在加载自定义String类时会往上委派给bootstrap引导类加载器加载,而引导类加载器在加载的时候会jkd自带的rt.jar包中的String类。这样就可以保证java核心源代码的保护。举例原创 2021-02-14 17:44:26 · 674 阅读 · 0 评论