草庐IT

java - 谁提供了Java中的默认构造函数?编译器还是 JVM?

构造函数是在运行时添加的还是编译时添加的?(我猜是编译时)。请在JVM架构级别进行一些深入的解释。我阅读了各种文章..一些说编译器..还有一些说JVM。我想非常确定(证据会有很大帮助)。抱歉,如果这个问题很愚蠢(我还在消化术语)!!!提前致谢。 最佳答案 来自Oracle的Java教程:https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.htmlYoudon'thavetoprovideanyconstructorsforyourclass,butyoum

Java 出现挂起

我在自定义应用程序中使用Java服务包装器已经有一段时间了,它运行良好。自从最近几天将我们的应用程序更新到新版本后,JVM开始挂起,然后wrapper在日志中打印了这个:JVM出现挂起:WAITING来自JVM的信号超时。然后它会自动终止JVM并再次启动应用程序。这种情况会在运行大约10小时后发生,这只会让调试变得更加困难。当然,我会仔细查看我们所做的更改,但没有做出我怀疑会导致此类问题的重大更改。我可以在哪里查看以尝试弄清楚发生了什么?来自应用程序的调试消息没有显示任何有趣的信息。如果JVM刚刚崩溃,它通常会创建一个转储,这有助于调试它,但它挂起,所以它没有创建转储。如果我让它不自动

java - 智能 JVM 和 JIT 微优化

随着时间的推移,Sun的JVM和JIT变得非常智能。不再需要过去作为必要的微优化而成为常识的事情,因为它会为您处理。例如,过去的情况是您应该将所有可能的类标记为最终类,以便JVM内联尽可能多的代码。但是现在,JIT会根据运行时加载的类来知道您的类是否是最终类,如果您加载一个类以使原始类成为非最终类,它会取消内联方法并将其取消标记为final。JVM或JIT还为您做了哪些其他智能微优化?编辑:我将其设为社区维基;我想随着时间的推移收集这些。 最佳答案 这太令人印象深刻了。所有这些都是您在C++中不能做的事情(当然在Java中做不到)。

java - "modern JVMs"与旧版 JVM 有何不同?

这是我在高中和大学计算机科学类(class)中经常听到的一句话:"That'snotanissueformodernJVMs."通常这会出现在关于整体性能或优化策略的讨论中。然而,它总是被视为一种神奇的最终答案,好像它让问题不再值得思考。这让我想知道:原型(prototype)“现代JVM”和旧JVM之间到底有什么区别? 最佳答案 JVM技术最显着的改进是JIT:JustInTime编译器。JIT在运行时优化代码,从而产生巨大的性能提升,使Java(至少在某些领域)与C/C++程序竞争。有关动态优化(在代码运行时)与静态优化(在编译

java - Java 应用程序服务器是否能够销毁线程?如果是,如何?

销毁线程在Java中已被弃用(并且未根据javadoc实现),并且中断它只是一个建议,希望线程退出,但可能不会这样做。(不提供任何方法来终止JVM内的线程是一个令人不安的设计,但我的问题与设计无关。)Java应用服务器如何卸载应用程序?他们是否能够以某种方式破坏正在卸载的应用程序的线程?如果是,如何?如果不是,那么具有无限循环的已部署应用程序的单个线程可能会在没有任何干预可能性的情况下导致整个应用程序服务器崩溃?抱歉,我不是为此编写测试用例,但我想知道那里到底发生了什么。 最佳答案 Nottoprovideanywaytokilla

java - JDK 类中 java.lang.ref.WeakReference 对象的内存泄漏

下面的简单代码再现了java.lang.ref.WeakReference对象在堆中的增长:publicstaticvoidmain(String[]args)throwsException{while(true){java.util.logging.Logger.getAnonymousLogger();Thread.sleep(1);}}这是jmap命令在几秒内的输出:user@t1007:~>jmap-d64-histo:live29201|grepWeakReference8:224931079664java.lang.ref.WeakReference31:132144[Lj

java - 对于桌面和企业开发,是否有 Sun JVM 的可靠替代品?

根据Oracle方面最近的公告,我们已经开始制定一项计划,逐步停止从SunJVM迁移到我们最终会使用的任何可靠且免费的替代方案。OpenJDK显然会成为一个主要的选择,既然IBM已经宣布了它的重点,但就稳定性和可靠性而言,它要成为Sun现有JVM的替代品还需要一些时间。是否有任何JVM选项可以为现实生活中的关键任务应用程序提供支持?据我所知,IBM的JVM只能用于IBM硬件。如果您知道任何可以帮助我们描述JVM域的替代方案,我们将非常感谢您的反馈。我们在Eclipse生态系统方面做了大量工作,以jboss应用服务器为后盾,我们真的很想了解我们的选择,因为访问Oracle的JVM可能需要

java - 在java中的64位机器上运行32位dll

我正在尝试将第3方dll用于我用Java编写的程序。不幸的是,它只支持32位。当我尝试在64位VM中加载dll时,出现以下错误:Can'tloadIA32-bit.dllonaAMD64-bitplatform我试过在32位VM中运行,它在eclipse中运行,但是当我导出项目时,我得到了同样的错误。请帮忙!真诚的,本 最佳答案 您不能在64位热点JVM中使用32位DLL。它不会工作。而且我不知道有任何其他支持32位DLL的64位JVM。事实上,正如PeterLawrey所指出的,这不仅仅是JVM的限制。没有主流操作系统允许以64位

java - 使用序列化将对象传递给另一个 JVM - 相同的 Java 版本和 jars(都运行我们的应用程序)

更新:现在使用map。想要向其他实例发送内容的类发送对象,即路由字符串。使用对象流,使用Javaserializable将对象写入servlet。先写String再写对象接收servlet将输入流包装在一个ObjectInputStream周围。首先读取字符串,然后读取对象。路由字符串决定是否进行。更通用的方法可能是发送类名及其声明的方法或Springbean名称,但这对我们来说已经足够了。原始问题了解基本方法,但需要详细步骤。也知道我可以使用Jaxb或RMI或EJB...但想使用纯序列化到bytearray然后编码将其从jvm1中的servlet1发送到jvm2中的servlet2(

java - 我应该如何诊断和防止 JVM 崩溃?

当我遇到JVM崩溃时,我(作为一个对JVM内部结构一无所知的Java程序员)应该怎么办?特别是,您将如何生成可重现的测试用例?我应该在Sun(或IBM)的错误数据库中搜索什么?我可以从生成的日志文件中获取哪些信息(例如hs_err_pidXYZ.log)? 最佳答案 如果崩溃仅发生在一台特定机器上,请运行memtest.我只见过两次重复发生的JVM崩溃,在这两种情况下,罪魁祸首都是硬件问题,即RAM故障。 关于java-我应该如何诊断和防止JVM崩溃?,我们在StackOverflow上