java - 关于进口声明

标签 java import classloader heap-memory

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

Map m = new HashMap(); //only these two classes loaded???

如果我们写这样的 import 语句会怎样

java.util.*;

类加载器会加载java.util包下的所有类吗? java中有没有类的卸载过程?

最佳答案

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

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 ();
}

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

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

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

关于java - 关于进口声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15378479/

相关文章:

Javascript:从另一个文件调用 D3 中的函数

java - Tomcat:Tomcat内部是如何卸载类的?

java - 使用 lockCanvas() 的 Android TextureView 硬件加速

java - PrintStreams 的计时问题

Java AWT Window实现不运行paint()函数

python - Python 中的 imp.load_source()

java - 从名称冲突的包导入

java - 通过 bootstrapclassloader 进行类加载

java - Parent Last Classloader解决Java Class路径 hell ?

java - 了解媒体扫描仪何时完成工作