草庐IT

JVM 概述

全部标签

java - 为什么 JVM 总分配内存大于 -Xmx?

JVM选项:-Xms20M-Xmx20M-Xmn10M-XX:+PrintGCDetails-XX:SurvivorRatio=8正如预期的那样,JVM将为JVM堆分配近20MB的内存。但是请看下面的GC细节:PSYoungGentotal9216K,used4612K[0x00000000ff600000,0x0000000100000000,0x0000000100000000)edenspace8192K,56%used[0x00000000ff600000,0x00000000ffa812d8,0x00000000ffe00000)fromspace1024K,0%used[0

java - 在其他项目中重用 Cucumber-JVM 步骤定义

如何在其他项目中重用Cucumber-JVM步骤定义来测试一些典型的Web操作。重点是我创建了一些java项目,只是使用典型场景操作的步骤定义实现,例如:WhenIfollowthelink"*some_link*"ThenIshouldseefollowingcontent"*some_content*"onpage而且我想在其他项目中重用这些定义(包括在类路径中),只是为了编写自己的简单场景。但是当我运行场景(作为JUnit测试)时,Cucumber无法找到步骤定义。当我尝试扩展StepDefinitions类时,它给了我一个错误,我无法扩展StepDefinition类。那么,是

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

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

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 - 对于桌面和企业开发,是否有 Sun JVM 的可靠替代品?

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

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上

java - 为什么 JVM 返回退出状态代码 143?

在Windows2003上作为计划任务运行的Java应用程序崩溃,没有日志或任何有助于查明发生了什么的信息。唯一可用的信息是应用程序返回代码143(8F)。该错误代码是从计划任务日志中检索到的。有谁知道错误代码(143)代表什么?用户注销是否可能导致应用程序终止?谢谢, 最佳答案 143通常意味着应用程序因SIGTERM命令而终止。另见https://unix.stackexchange.com/questions/10231/when-does-the-system-send-a-sigterm-to-a-process但是,请注

java - 当 jvm 进程被杀死时,有什么方法可以执行一些 java 代码?

我们希望在JVM被手动终止时退出之前执行一些java代码或shell代码。我们的应用程序没有在容器中运行。我们需要使用Java代码本身或一些命令行工具自动监控它。 最佳答案 您可以使用Runtime.getRuntime().addShutdownHook()添加关闭Hook.一旦JVM的进程终止,这样的关闭Hook由JVM运行。但是,请注意,情况并非总是如此。JVM可能会在有机会触发其关闭Hook之前被杀死。这在javadoc中提到:Inrarecircumstancesthevirtualmachinemayabort,that