Breakpoint命中Hashmap.put()一个简单的Hello World程序

Flo*_* Li 17 java debugging breakpoints

程序很简单:

public class HelloWorld {
    public static void main(String args[]){
       System.out.println("Hello World");
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我put(K key, V value)在HashMap.class 中将断点设置为函数

public V put(K key, V value) {
    if (table == EMPTY_TABLE) {
        inflateTable(threshold);
    }
    if (key == null)
        return putForNullKey(value);
    int hash = hash(key);
Run Code Online (Sandbox Code Playgroud)

然后我开始调试HelloWorld.class,它将运行到HashMap中的断点.我很奇怪它put()在HashMap中会遇到什么问题?
我尝试过HashMap,Hashtable,它们都是一样的.

VAn*_*rei 17

这是我在重现场景时获得的堆栈跟踪.

当Eclipse启动应用程序时,它不会简单地进入Main函数.在创建实例之前,需要将类加载到JVM中.为此,将使用类加载器.

在您的情况下,URLClassLoader具有使用HashMap对象的URLClassPath类型的成员.

在此输入图像描述


Ger*_*cso 9

这是因为Eclipse启动应用程序的方式.

LauncherHelper运行应用程序的Eclipse 类(HelloWorld)调用了一大堆URLClassLoader其他东西.该URLClassLoader的使用HashMaps,HashTables等等.