【JVM源码探秘】JVM线程模型概览


HotSpot中的线程模型是Java线程(java.lang.Thread)与本地操作系统线程一一映射,本地线程在Java线程启动(调用start())时创建, 并在终止时回收。操作系统负责调度本地线程给可用的CPU来执行。Java线程优先级和操作系统优先级之间的关系是相当复杂的,并且因操作系统而异。

Read More>>


【JVM源码探秘】细说Class.forName()底层实现


JVM允许在运行时动态装载类,这为开发者提供了极大方便,使用Class.forName("com.xxx.Xxx"), 装载完成后可以通过调用其newInstance()完成对象的创建,然后便可以正常操作该类。

接下来我们就细说说Class.forName()在JVM层面所做的事情。

Read More>>

【JVM源码探秘】深入registerNatives()底层实现


在Java的系统包下如:

  • java.lang.System
  • java.lang.Object
  • java.lang.Class

等类中均有一个静态块用来执行一个叫做registerNatives()的native方法,

    private static native void registerNatives();
    static {
        registerNatives();
    }

这个native方法里究竟都做了啥?我们进去瞧瞧。

Read More>>

【JVM源码探秘】深入System.gc()底层实现


对于Java语言来说是不用手动释放内存的,并且不需要手动干预JVM的GC行为,但在一些监控和agent工具里却是必要的。

Hotspot为我们开放了Java语言级别的GC手动触发入口System.gc(),本文将深入介绍JVM底层实现。

Read More>>


【JVM源码探秘】Java对象模型OOP-Klass


一个Java类在JVM中是如何描述的?创建一个Java对象在JVM中数据又是如何存储的?

在Hotspot VM中,设计者设计了OOP-Klass模型用来描述class的属性和行为,这里的OOP并不是面向对象编程(Object-oriented programming), 而是Ordinary Object Pointer(普通对象指针),之所以设计为OOP和Klass两部分是因为不希望每个对象都有一个C ++ vtbl指针, 因此,普通的oops没有任何虚拟功能。 相反,他们将所有“虚拟”函数转发到它们的klass,它具有vtbl并根据对象的实际类型执行C ++调度。

Read More>>