java中的默认类加载器是将所有内容保留在内存中还是保留在文件系统中?

java中的默认类加载器是将所有内容保留在内存中还是保留在文件系统中?,java,jar,classloader,dynamic-loading,dynamic-class-loaders,Java,Jar,Classloader,Dynamic Loading,Dynamic Class Loaders,我想知道,当您在运行的程序中动态加载jar时,jar中的所有内容(类、资源)是否都存储在VM内存中的某个位置 因此,每当您需要访问类或文本资源文件(例如,通过getClass().getResourceAsStream)时,它都可以从内存中快速提取,而不是再次访问文件系统中的jar?i、 你可以在那之后删除这个罐子 很抱歉,如果我问了一个错误的问题,请将我的问题改为解释类加载器过程,因为我可能会误解它,特别是对于打包在jar中的资源。谢谢。不,在您访问资源之前,通常不会从磁盘加载资源 类被加载到

我想知道,当您在运行的程序中动态加载jar时,jar中的所有内容(类、资源)是否都存储在VM内存中的某个位置

因此,每当您需要访问类或文本资源文件(例如,通过getClass().getResourceAsStream)时,它都可以从内存中快速提取,而不是再次访问文件系统中的jar?i、 你可以在那之后删除这个罐子


很抱歉,如果我问了一个错误的问题,请将我的问题改为解释类加载器过程,因为我可能会误解它,特别是对于打包在jar中的资源。谢谢。

不,在您访问资源之前,通常不会从磁盘加载资源


类被加载到内存中,并在第一次使用后保留在内存中。资源不是在JVM或JRE级别缓存的-每次调用
getResourceAsStream
时,您都会从磁盘获得一个新的流。

它可能是特定于实现的,因此有些JVM可以这样做,有些JVM则不这样做,但理论上没有规则阻止JVM同时预加载多个类文件,是吗?(我说的是缓存文件内容,而不是加载和解析类本身)至于您的“在访问资源之前不会从磁盘加载资源”,您是否建议一旦访问资源就可以将其缓存在内存中?@user1589188不,只有类在加载一次后才保留在内存中。资源永远不会被显式缓存,但由于硬盘缓存,它们当然可能仍在内存中。@:JVM可以自由地预加载类;原则上,规范允许均匀加载和分解。实际上,HotSpot实现使用内存映射作为JRE实现的基础,因此底层系统将(预)在块/内存段的基础上加载它们。