Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAR文件,don';他们不是在膨胀,让Java慢下来吗?_Java_Spring - Fatal编程技术网

JAR文件,don';他们不是在膨胀,让Java慢下来吗?

JAR文件,don';他们不是在膨胀,让Java慢下来吗?,java,spring,Java,Spring,好吧,这个问题可能看起来很愚蠢,但我还是要问 为了让Spring+BlazeDS项目启动并运行,我苦苦挣扎了几个小时之后,发现我的项目出现了问题,因为没有包括Spring的正确依赖项等。我的WEB-INF/lib文件夹中缺少了.jar,是的,我真傻 过了一段时间,我设法把所有的.jar文件都放在它们所属的地方,它的容量达到了惊人的12.5MB,而且超过了30个!这让我很担心,但我很可能也希望不应该担心 Java如何操作这些JAR文件,它们确实占用了相当多的硬盘空间,考虑到它是压缩和编译的源代码。

好吧,这个问题可能看起来很愚蠢,但我还是要问

为了让Spring+BlazeDS项目启动并运行,我苦苦挣扎了几个小时之后,发现我的项目出现了问题,因为没有包括Spring的正确依赖项等。我的WEB-INF/lib文件夹中缺少了.jar,是的,我真傻

过了一段时间,我设法把所有的.jar文件都放在它们所属的地方,它的容量达到了惊人的12.5MB,而且超过了30个!这让我很担心,但我很可能也希望不应该担心

Java如何操作这些JAR文件,它们确实占用了相当多的硬盘空间,考虑到它是压缩和编译的源代码。这样就可以在瞬间快速填充大量RAM

我的问题是:

例如,当.jar中的一个类被实例化时,Java是否将整个.jar文件加载到内存中?那么.jar中那些永远不会被使用的东西呢

为了优化应用程序性能,是否会以某种方式缓存.jar

当加载一个.jar时,我知道它位于内存中,并且可以跨多个HTTP请求使用(即在服务器实例运行的生命周期内),这与PHP不同,PHP在每次请求时都会动态创建对象,这一假设正确吗

我在想,当使用Spring时,我必须包含所有那些fiddly.jar,如果使用本机Java,比如说至少使用Hibernate之类的ORM解决方案,我不是会更好吗

到目前为止,Spring只是花了额外的时间进行配置,额外的硬盘空间,额外的内存,cpu消耗,所以我担心这个框架会花费太多的应用程序性能,例如,我的BlazeDS服务器实现了IoC

仍然需要ORM,一个单元测试框架和一些零碎的东西。快速而不负责任地完成一个项目是很容易的


我应该在哪里划清界限?

类加载器应该只加载它需要的类,并且它们保持内存驻留。不要担心12MB。RAM很便宜。您创建的对象(在大型应用程序中)将使用比加载的类多得多的内存

简言之,别担心

IBMdeveloperWorks上有一篇很好的文章,标题是“消除类加载问题的神秘性,第1部分:类加载和调试工具简介”

另外一点——当谈到成本时,开发人员的时间成本比硬件要高,因此,如果Spring/Hibernate/WhateverTool可以帮助开发人员更快、更容易地构建应用程序,那么无论使用何种RAM,其成本都是值得的

“Java是否加载整个.jar文件 例如,当说一个 .jar中的类被实例化了吗? 罐子里的东西呢 这永远不会被使用。”

不,类加载器根据需要加载每个.class文件

“是的,罐子会被缓存起来,因为 优化的应用程序性能?”

JAR就像DLL(除了链接和类加载的细节):它们只是.class文件的压缩库。未缓存它们:。类文件将根据需要加载到perm空间

“加载单个.jar时,我 要明白这东西在里面 内存和可跨 多个HTTP请求(即针对 服务器实例的生存期 与PHP不同,PHP中的对象是 随每个请求动态创建, 这个假设正确吗?”

当应用程序服务器将.class加载到perm空间时,只要服务器启动并运行,它就可用

“使用Spring时,我在想 必须包括所有那些精致的罐子, 难道我不应该就这样过得更好吗 使用本机Java,至少 还有像Hibernate这样的ORM解决方案?”

如果你认为使用Spring是在给你买东西,那就不需要了。如果您认为成本/收益分析不利于您,请务必不要使用Spring。但是,如果依赖性阻碍了你,那么听起来你没有做一个好的分析

“到目前为止,春天只是花了额外的时间 配置额外的硬盘空间, 额外的内存,cpu消耗,所以我 关注该框架正在运行 花费太多的应用程序 性能只是为了获得例如, 国际奥委会用我的BlazeDS实施 服务器。“

您不知道使用Spring的性能损失是多少。如果你认为这是一个问题,请测量它。我敢打赌,应用程序代码或数据库模式将是最大的问题

“还是要来ORM,一个单位 测试框架和细节 到处都是,很容易找到 迅速而迅速地完成一个项目 不负责任地容易。”

为什么不负责任

“我在哪里划界?”

无论如何,写你自己的。从头做起。您将更好地了解框架为您购买了什么以及完成后的实际成本

我要补充一点:Spring的工作人员编写了一些最好的代码。比你我写的任何东西都好。您选择任何框架都是因为您相信,使用经过严格设计、拥有更广泛受众、经过更彻底测试的代码,您将获得提升。事实上,从各个方面来看,它都比你自己写的要好。我不会让(无可否认)大量的依赖性阻止我使用它。当我在应用服务器上部署并为JVM分配256MB的RAM时,我当然不太关心perm空间是否占总空间的10%——直到我发现这是一个问题

我认为真正的情况是,你宁愿编写PHP而不是Java。这是一个公平的想法,因为很多人认为使用动态语言比Java更有价值。大多数网站仍然是用英文写的