jvm相关内容
我们有一个使用 JNI 的桌面应用程序,它偶尔会导致 JVM 崩溃.幸运的是,JVM 生成了一个 hs_err_pidXXXX.log 文件,该文件在调试此类错误时非常有用.但是,它似乎总是进入当前工作目录,从那里挖掘它很烦人,因为我们的其他日志文件都转到特定的“日志文件位置". 是否可以为这些“故障转储"文件指定不同的位置?怎么样? 解决方案 Joonas, 虽然 HeapD
..
我有 7 个不同的 Java 守护程序,我在 3 个不同的服务器上运行(全部 7 个).java命令行有-Xmx2048m和-Xss1024k.在这 3 台服务器上,所有 21 个进程的顶部和顶部的 VIRT 大小均显示为略低于 2.5 GB.RES 大小从 300 GB 到 1.9 GB 不等,具体取决于它是哪个守护进程. 一切都应该如此. 输入新服务器.更快的 CPU,更多的 RA
..
如何在 Java 中设置断点?它只是基于源文件名和行号吗?类名或方法名是否也包含在内? 如果我的调试器中有旧版本的源代码并设置了断点,则当我单步执行时光标会关闭.能走多远?它会进入错误的方法(如果该文件中有多个类,甚至是错误的类)? 当 JVM 中有多个同名的类时会发生什么(如果您有多个类加载器可能会发生)?他们都得到断点了吗? 在 Web 应用程序容器中,我可以只为一个 Web
..
作为一个对 Java 越来越熟悉的 C++ 程序员,看到语言级别支持锁定任意对象而没有任何类型的对象支持这种锁定的声明,这对我来说有点奇怪.为每个对象创建互斥锁似乎是自动选择加入的沉重代价.除了内存使用之外,互斥锁在某些平台上是操作系统受限的资源.如果互斥锁不可用,您可以自旋锁,但其性能特征明显不同,我预计这会损害可预测性. JVM 是否在所有情况下都足够聪明,可以识别特定对象永远不会成为同
..
我开发了一个 Java 控制台应用程序,当启动时,打开一个控制台窗口并保持在前台,我想在后台启动该应用程序. 现在我通过这个命令行启动应用程序: java -jar myapp.jar 有没有办法实现这种行为?更改命令行参数就足够了,或者我需要对我的代码进行一些更改? 解决方案 答案取决于操作系统. *nix: &Windows:(打开一个新控制台):开始
..
我一直在弄清楚口译员的确切工作方式,在谷歌上搜索并得出了一些结论,只是希望能够让我更好地了解口译员工作的人来纠正它. 所以我的理解是: 解释器是一种将高级代码转换为语言转机器格式. 具体来说java解释器,它获取二进制格式的代码(之前被 java 编译器从源代码翻译成字节码). 现在 Java 解释器的平台是运行它的 JVM,所以基本上它会生成可以被 JVM 运行的代码. 所以它
..
在 Java 8 之前,我们有 5 个主要的运行时数据区: 方法区 堆 JVM 堆栈 PC 寄存器 本机方法堆栈 在 Java 8 中,没有 Perm Gen,这意味着没有更多“java.lang.OutOfMemoryError: PermGen" 这很好,但我也读过 方法区是 Perm Gen 中空间的一部分 但我似乎找不到任何明确说明 Java 8 中不
..
字节码如何在 JVM 中得到验证? 解决方案 Oracle 自己有一个关于其工作原理的小片段页面 这里. 基本上,JRE 不信任 JDK.那是因为它不知道哪个 JDK 编译器创建了类文件.在验证之前,它将类文件视为敌对文件. 在此基础上,字节码验证是防止 Sun 所谓的“恶意编译器"的必要步骤.Sun 自己的 Java 编译器确保 Java 源代码不违反安全规则,但是,当应
..
当一个对象在 Java 中被实例化时,真正进入内存的是什么? 是否包含父构造函数的副本? 为什么隐藏数据成员在强制转换时的行为与被覆盖的方法不同? 我理解通常用于让您正确使用这些东西的抽象解释,但 JVM 是如何真正做到这一点的. 解决方案 当一个对象被实例化时,实际上只有非静态数据被“创建",以及对创建它的对象类型的引用.p> 没有任何方法被复制. 对创建它的类的“引用
..
当然,.dex文件是针对Android的Dalvik VM的,.class文件是针对JVM的.但我想知道它们是否有相似的布局(常量池、字段、方法、属性……)?字节码不同,但是否存在与 JVM 中的字节码等效的 Dalvik 特定操作码? 解决方案 Java jar 文件有很多类文件,而每个 APK 文件只有一个classes.dex 文件,如下所示.根据谷歌,APK 格式出于性能和安全原因
..
我知道 BEA 正在开发不需要底层操作系统的 LiquidVM,但想知道开源社区中是否有人正在开发类似的东西. 理想情况下,我想找到一个虚拟机直接由操作系统引导加载程序加载的实现. 解决方案 你需要什么? 也许 Sanos 可以在硬件和 JVM 之间为您提供一小段代码供您使用? http://www.jbox.dk/sanos/
..
我正在尝试为不断崩溃的 weka 增加 Java 中的堆大小.我使用了建议的行: >java -Xmx500m -类路径 但我收到以下错误: -classpath 需要类路径规范 我不确定这意味着什么.有什么建议吗? 解决方案 我发现实际问题出在 '\Program Files (x86)\Weka-3-6'.我用记事本打开它,文件中间有一行'maxheap = 512m'.
..
我想知道两者在性能上是否存在差异 检查一个值是否大于/小于另一个值 for(int x = 0; x X 和 检查一个值是否不等于另一个 for(int x = 0; x != y; x++);//对于 y >X 为什么? 另外:如果我比较为零,是否还有进一步的区别? 如果答案也考虑对代码的组装视图,那就太好了. 编辑:正如
..
是否有 Java 语言或 JVM 中的软件预取指令,例如 __builtin_prefetch 在 GCC 中可用 解决方案 Hotspot JVM 实际上确实支持预取! 它将 Unsafe.prefetchRead() 和 Unsafe.prefetchWrite() 方法视为内在函数,并将它们编译为相应的 CPU 指令. 很遗憾,sun.misc.Unsafe 没有声明此类方法
..
我正在使用 Jconsole 来监控 Java 应用程序.内存选项卡显示不同的堆和非堆内存,例如 堆内存使用情况 非堆内存使用情况 内存池“CMS Old Gen" 内存池“Par Eden Space" 内存池“Par Survivor Space" 内存池“代码缓存" 内存池“CMS Perm Gen" 这些术语之间有什么区别.还请提供一些关于 - 如何通过监控这些参数
..
我在具有 4 GB RAM 的 32 位 Windows XP 上使用 32 位 Intellij. 我正在尝试将 intellij xxx 增加到 1.5GB:-Xmx1500m 所以我知道 JVM 在 32 位系统中支持 1.5GB 的 RAM. 但是这个错误是从 JVM 抛出的: JVM 无法启动.最大堆大小 (-Xmx) 可能太大... 我无法将 intellij Xmx 增
..
是否可以指定调用“java jar jar_name.jar"时使用的JVM.我的机器上安装了两个 JVM.我无法更改 JAVA_HOME,因为它可能会破坏已准备好运行的代码. 亲切的问候 斯蒂芬 解决方案 是的 - 只需明确提供 java.exe 的路径.例如: c:\Users\Jon\Test>"c:\Program Files\java\jdk1.6.0_03\bin
..
Java 8/9 带来了对 -XX:+UseCGroupMemoryLimitForHeap 的支持(使用 -XX:+UnlockExperimentalVMOptions).这会将 -XX:MaxRAM 设置为 cgroup 内存限制.默认情况下,JVM 分配大约 25% 的最大 RAM,因为 -XX:MaxRAMFraction 默认为 4. 例子: MaxRAM = 1gMaxRAM
..
与其他运行时(如 CPython)相比,究竟是什么让 JVM(尤其是 Sun 的实现)运行缓慢?我的印象是,这主要与加载大量库有关,无论它们是否需要,但这似乎不需要 10 年的时间来解决. 想一想,JVM 启动时间与 Windows 上的 CLR 相比如何?Mono 的 CLR 怎么样? 更新:我特别关注 Unix 中常见的链接在一起的小型实用程序的用例.Java 现在适合这种风格吗?
..
我正在尝试使用 这篇文章. 它似乎可以通过 open-jdk (https://wikis.oracle.com/display/HotSpotInternals/PrintAssembly). 如何在 oracle JDK7 和 JVM HotSpot 中使用这些选项(或类似选项)? 解决方案 这些说明适用于 Linux (Ubuntu 10.04.4 LTS),但应该适用于
..