问题内容: jmap进行内存转储时,我的Java应用程序是否继续运行? 问题答案: 您的应用程序已停止。获得准确的堆转储的唯一实用方法是在创建转储时停止所有应用程序活动。 这是“简短”暂停还是“长时间”暂停取决于要转储多少。如果使用“ -dump”,则将转储整个堆,包括不可达的对象。如果使用“ -dump:live”,则只会转储可访问的对象……但这(至少)需要标记堆以找出可访问的对象。 但是,如果
问题内容: 关于我先前关于不完整构造的对象的问题,我有第二个问题。正如Jon Skeet所指出的那样,在构造函数的末尾有一个隐式的内存屏障,以确保字段对所有线程可见。但是,如果一个构造函数调用另一个构造函数,该怎么办?它们每个的末尾是否存在这样的存储障碍,或者仅在首先被调用的那个末尾存在?也就是说,当“错误”的解决方案是: 正确的是工厂方法版本: 以下工作也可以吗? 更新: 一个基本问题是,可以保
问题内容: 有没有办法从正在运行的Java程序中设置堆大小? 问题答案: 没有。 对于具有非常多的堆需求的应用程序,您可以做的是设置最大的堆大小-Xmx并进行调整,以使堆缩小时该应用程序不会挂在大量内存上(使用默认设置即可) )。 但是请注意,当应用程序实际使用的内存变化剧烈且快速时,这可能会导致性能问题-在这种情况下,最好将其挂在所有内存上,而不是仅将其退还给操作系统以声明使用它再过一秒钟。您可
问题内容: 我正在做一个Java项目,在这个项目中,我第一次尝试使用Kotlin。我开始使用Intellij Idea中提供的JavaToKoltin转换器将某些类转换为Kotlin。除其他外,我的自定义例外现在已转换为Kotlin。但是使用此异常处理不再正确。 如果我在Java代码中抛出了一个自定义异常(例如),则不会捕获该异常(请参见下面的代码)。 因此任何人都可以向我解释为什么没有捕获到异常
问题内容: 我可以运行多个JVM吗?如果是,那么我如何找到在哪个JVM上加载了特定的类? 问题答案: 您的意思尚不完全清楚,但是: 您可以在同一台计算机上安装多个VM(版本/品牌等) 您可以运行多个进程,无论是相同的JVM版本还是不同的JVM版本 除非您正在运行调试代理或类似的代理,否则我不知道有什么方法可以询问JVM进程是否加载了特定的类。似乎有点奇怪的要求-为什么要这样做?
问题内容: 我们有一个使用JNI的桌面应用程序,该应用程序有时会导致JVM崩溃。幸运的是,JVM产生了一个文件,该文件对于调试此类错误非常有用。但是,它似乎总是转到当前的工作目录,并且从那里进行挖掘很烦人,因为我们的其他日志文件都转到了特定的“日志文件位置”。 可以为那些“崩溃转储”文件指定不同的位置吗?怎么样? 问题答案: 乔纳斯 尽管HeapDumpPath适用于堆转储,但这并不是您所提问题的
问题内容: 字节码如何在JVM中得到验证? 问题答案: 甲骨文本身有它如何工作的一个小片段页面在这里。 基本上,JRE不信任JDK。那是因为它不知道哪个JDK编译器创建了类文件。它将类文件视为恶意文件,直到通过验证。 对此进行扩展,字节码验证是防止Sun称为“恶意编译器”的必要步骤。Sun自己的Java编译器可确保Java源代码不违反安全规则,但是,当应用程序导入代码片段时,它实际上并不 知道 该
问题内容: 所以我有一些第三方的本机库只能在Windows,OSX,Linux的32位JVM中工作,我需要始终强制Java应用程序以32位JVM模式运行。 如果目标系统仅安装了64位JVM,该如何强制其以32位模式运行Java应用程序呢? 问题答案: 没有。 您指定的前提条件禁止该应用程序在32位JRE中运行(好的,我排除了bundle-the-JVM解决方案和install-the- JVM解决
问题内容: 在Java 11中,不再支持与GC日志记录有关的许多JVM arg。如果我们仍然想使用GC日志记录,可以用什么替换它们?特别是,这与以下JVM参数有关: 谢谢。 问题答案: 您的清单如下: 注意 :和记录在相同的标签上,并且在新的记录中没有分开。 框架处理的位确实需要调整 参考 :我已 参考 该文档,并要求您遵循以获取此类迁移详细信息。
问题内容: 我正在http://www.cafeaulait.org/javafaq.html上阅读#6.10项,然后我开始怀疑大型企业如何创建自己的JVM实现。一个人会尝试(或可行)实验性的东西吗? 问题答案: 从技术上讲,创建该新JVM所需的所有信息都是该语言和目标平台的公共规范。即使字节码解释在很大程度上相同,JVM还是需要根据其是要在台式机还是手机上运行而有所不同。 一些开始寻找信息的地方
问题内容: 最近,我阅读了很多有关Java类加载过程的信息。我经常碰到一些文字,这些文字声称在运行时无法将类添加到类路径并在没有类加载器黑客(URLClassLoaders等)的情况下加载它们 据我所知,类是动态加载的。这意味着仅在需要时才将其字节码表示形式加载并转换为java.lang.Class对象。 因此,如果尚未启动JVM,是否应该在JVM启动后将JAR或 .class文件添加到类路径并加
问题内容: 我正在阅读 Java平台性能 (很遗憾,自从我最初提出这个问题以来,链接似乎已经从互联网上消失了),而A.3.3节使我感到担忧。 我一直在假设一个超出范围的变量将不再被视为GC的根,但是本文似乎与此矛盾。 最近的JVM(尤其是Sun的1.6.0_07版本)是否仍然有此限制?如果是这样,那么我有很多代码需要分析… 我问这个问题是因为该论文来自1999年-有时情况会发生变化,尤其是在GC领
问题内容: 是否有与Java世界等效的Ruby版本管理器? 我正在寻找可以让我轻松下载并安装新的JVM并在它们之间切换的工具。例如: 问题答案: 如果使用Ubuntu,则可以通过命令指定要使用的JVM(仅适用于从apt-get或aptitude安装的JVM) 或通过设置JAVA_HOME。这是一个很好的教程: http://vietpad.sourceforge.net/javaonlinux.h
问题内容: 通过Maven和Surefire插件运行它们时,我的JUnit测试失败(下面的版本信息)。我看到错误消息: FAQ页面指出了一些可能的原因,但是我看不到如何使用此信息来开始解决此问题: 通过直接在派生的JVM中写入本机流而损坏了STDOUT 如果您的测试使用打印到STDOUT的本机库,则会出现此警告消息,因为该库损坏了插件使用的通道,以便将具有测试状态的事件传输回Maven进程。如果您
问题内容: 是否有 JavaScript jvm实现 ? 如果没有,您能给我一些为什么它还没有意识到的原因吗?(可能不可能吗?)我试图了解创建一个缺少什么? 我问的原因是我想创建具有编译功能的Web浏览器ide,而无需在计算机上安装jdk或jre(仅在浏览器中)。 问题答案: 不确定jsJVM的成熟程度如何,但是您可能会对您感兴趣的东西看起来很像。如页面所示,它是用Javascript编写的JVM