Java 关于进口声明

Java 关于进口声明,java,import,classloader,heap-memory,Java,Import,Classloader,Heap Memory,我想知道在哪里可以检查类加载器加载了多少个类。 我想知道,带有*标记的类中的import语句是否会加载堆的perm区域中的那么多类?或者仅当我们声明特定类型的引用时 那么将加载以下两个类? 前 如果我们像这样写import语句呢 java.util.*; 类加载器会加载java.util包下的所有类吗? java中是否有任何类卸载过程?此工具将帮助您。imported类(或通配符)实际上不是由类加载器加载的。import语句只是一个“alias”语句(或者在导入通配符时类似于“implicit

我想知道在哪里可以检查类加载器加载了多少个类。 我想知道,带有
*
标记的类中的
import
语句是否会加载堆的perm区域中的那么多类?或者仅当我们声明特定类型的引用时 那么将加载以下两个类?

如果我们像这样写import语句呢

java.util.*;
类加载器会加载
java.util
包下的所有类吗?
java中是否有任何类卸载过程?

此工具将帮助您。

import
ed类(或通配符)实际上不是由类加载器加载的。import语句只是一个“alias”语句(或者在导入通配符时类似于“implicit prefix”语句)。

否,import与类加载无关。这只是语法糖。以下两个程序将产生完全相同的字节码:

import java.util.Map;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
import java.util.prefs.*;

public class Foo
{
    private Map map = new HashMap ();
}

类的加载时间由JVM决定。Java规范只保证类在首次使用之前被加载和初始化


例如,一个JVM可能会决定在应用程序启动之前,以递归方式加载主类直接或间接引用的所有类。对于需要避免类加载导致的程序执行中的非确定性暂停的实时应用程序,这种行为可能非常方便。另一个JVM可能会推迟类加载,直到实际使用该类,并在不再使用该类后立即卸载该类。这在涉及内存占用的嵌入式应用程序中可能很方便。

如果您想查看在运行时加载的类,请尝试以下操作:

java -verbose:class

您应该看看问题

我认为这个答案也应该适用于您的问题:import语句与运行时的类加载无关。这回答了你的问题吗?@EJP:-是的。谢谢大家。下课怎么样?是否有此类卸货流程?或者所有类都位于“perm”堆区域,直到JVM关闭。
public class Foo
{
    private java.util.Map map = new java.util.HashMap ();
}
java -verbose:class