Tag: jvm

嘲弄JVM的压缩哎呀

所以我理解现在默认情况下在HotSpot VM中启用了压缩的oops。 从Java SE 6u23开始,它通过VM选项-XX:+UseCompressedOops支持此-XX:+UseCompressedOops 。 我知道它允许有效的CPU缓存利用率,因为CPU缓存可以容纳更多数量的引用,而不是它们必须处理64位大小的引用。 但我不明白的是,如何只使用32位JVM可以处理多达2 64个地址。 为了简化问题,我们如何仅使用2位来处理最多2个4个存储器地址? 这种地址方案可能的编码/解码是什么?

运行多个JVM

如何在一台机器上运行多个JVM? 如何在不同的JVM中调用方法?

为什么64位JVM比32位JVM更快?

最近我一直在对我公司的数据库产品的写入性能进行一些基准测试,我发现只需切换到64位JVM就可以实现20-30%的一致性能提升。 我不允许详细介绍我们的产品,但基本上它是一个面向列的数据库,针对存储日志进行了优化。 该基准测试涉及为其提供几千兆字节的原始日志,并计算分析它们并将其作为结构化数据存储在数据库中所需的时间。 CPU和I / O的处理非常繁重,但很难说它的比例是多少。 关于设置的一些注意事项: Processor: Xeon E5640 2.66GHz (4 core) x 2 RAM: 24GB Disk: 7200rpm, no RAID OS: RHEL 6 64bit Filesystem: Ext4 JVMs: 1.6.0_21 (32bit), 1.6.0_23 (64bit) Max heap size (-Xmx): 512 MB (for both 32bit and 64bit JVMs) 两个JVM的常量: 相同的操作系统(64位RHEL) 相同的硬件(64位CPU) 最大堆大小固定为512 MB(因此速度增加不是由于64位JVM使用更大的堆) 为简单起见,我已经关闭了产品中的所有multithreading选项,因此几乎所有处理都以单线程方式进行。 (当我打开multithreading时,当然系统变得更快,但32位和64位性能之间的比率保持不变。) 所以,我的问题是……为什么我在使用64位JVM时会看到20-30%的速度提升? 以前有人见过类似的结果吗? 直到现在我的直觉如下: 64位指针更大,因此L1和L2缓存更容易溢出,因此64位JVM上的性能更差。 […]

Java进程内存使用情况(jcmd vs pmap)

我在一个docker容器内的Java 8上运行了一个java应用程序。 该过程启动Jetty 9服务器并部署Web应用程序。 传递以下JVM选项: -Xms768m -Xmx768m 。 最近我注意到这个过程耗费了大量的内存: $ ps aux 1 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND app 1 0.1 48.9 5268992 2989492 ? Ssl Sep23 4:47 java -server … $ pmap -x 1 Address Kbytes RSS Dirty Mode Mapping … total kB 5280504 2994384 2980776 $ jcmd […]

分析JIT在volatile上下文中生成的x86输出

我正在写这篇文章与深入理解Java中的volatile有关 public class Main { private int x; private volatile int g; public void actor1(){ x = 1; g = 1; } public void actor2(){ put_on_screen_without_sync(g); put_on_screen_without_sync(x); } } 现在,我正在分析JIT为上面的代码生成了什么。 根据我在上一篇文章中的讨论,我们知道输出1, 0是不可能的,因为: 写入volatile v会导致v每个操作都会导致a在v可见之前可见(将被刷新到内存中)。 ……………..(I removed not important body of method)….. 0x00007f42307d9d5e: c7460c01000000 (1) mov dword ptr [rsi+0ch],1h ;*putfield x ; – package.Main::actor1@2 (line 14) […]

与java.exe完全混淆

JDK是JRE的超集。 JDK具有必要的工具,如javac java.exe调试器等+ JRE。 但是JRE有一个特定的JVM实现。 我的假设是java.exe或java应用程序启动器是解释器(如果我错了,请纠正我)。 此外,JVM也进行了解释。 最后是JVM的解释器部分还是JDK工具的一部分? 请解释。

Ant可以同时启动两个java应用程序吗?

我目前正在开发一个“调试器”java应用程序,它使用JDI连接到已经运行的“目标”java应用程序。 有没有办法让Ant启动我的目标应用程序然后启动我的“调试器”,而第一个应用程序仍在运行? 是的我知道我可以开发JDI应用程序来启动目标程序,但这不是我现在想要的。

Java(JVM)如何为每个线程分配堆栈

Java应用程序启动时,所有线程都有一个堆。 每个线程都有自己的堆栈。 启动Java应用程序时,我们使用JVM选项-Xms和-Xmx来控制堆的大小,使用-Xss来控制堆栈大小。 我的理解是,正在创建的堆成为JVM的“托管”内存,所有正在创建的对象都放在那里。 但堆栈创建如何工作? Java是否在创建每个线程时为其创建堆栈? 如果是这样,堆栈在内存上的确切位置? 它肯定不在“托管”堆中。 JVM是否从本机内存创建堆栈,还是为堆栈预先分配了一部分托管内存区域? 如果是这样,JVM如何知道如何创建线程?

Java似乎忽略了-Xms和-Xmx选项

我想在我的VPS上运行一个用java编写的非常简单的bot。 我想限制jvm内存让我们说10MB(我怀疑它还需要更多)。 我正在使用以下命令运行bot: java -Xms5M -Xmx10M -server -jar IrcBot.jar“/ home / jbot” 但top显示为java保留的实际内存为144m (或者我在这里解释错误了?)。 13614 jbot 17 0 144m 16m 6740 S 0.0 3.2 0:00.20 java 任何想法在这里可能是错的? Java版“1.6.0_20”Java(TM)SE运行时环境(版本1.6.0_20-b02)Java HotSpot(TM)客户端VM(版本16.3-b01,混合模式) BTW。 我正在运行CentOS – 如果重要的话。 编辑:谢谢你的回答。 我不能真正接受它们中的任何一个,因为事实certificate问题在于我选择编写程序的语言,而不是JVM本身。

哪个实时(RTSJ)JVM最受欢迎?

似乎只有少数JVM是Java实时规范(RTSJ)的实现 。 Sun / Oracle Java实时系统超过6000美元,IBM的实时WebSphere超过7000美元,因此许多Java开发人员可能永远不会有机会使用它们中的任何一个。 Oracle的JRockit似乎是一个免费的实时Java实现,具有可预测的,确定性的行为,虽然我不确定,因为他们的文档在营销语言上相当沉重。 由于小型组织开发并具有较小的用户群,其他较小的实时JVM似乎存在风险。 哪些实时JVM更受欢迎? 开发人员最常使用,信任和喜爱哪些?