Tag: jvm

闲置时JVM锯齿模式? JVM在此期间做了什么?

我在想。 我有一个带有servlet的简单Java Web项目。 当没有用户使用它时(我在GlassFish上本地托管它)我仍然在进程的内存使用中看到一个锯齿模式。 我似乎无法理解JVM正在做什么? 我理解JVM使用的内存的正常流程。 堆正在填充应用程序正在创建的对象。 在某一点上,堆到达垃圾收集器进入的点,这将删除所有不再使用的“缓存”对象,以便可以创建新对象并填充堆大小。 我想知道的是,JVM在空闲时一直在做什么? 编辑: 就像我在评论中说的那样。 我在Eclipse中创建了一个非常简单的Java应用程序,它显示了一个Swing窗口,上面写着’hello world’。 当我在Java VisualVM中观察JVM的内存使用情况时,我看到了相同的锯齿模式。

Java for循环优化

我用java for循环做了一些运行时测试,并发现了一个奇怪的行为。 对于我的代码,我需要原始类型的包装器对象,如int,double等,以模拟io和输出参数,但这不是重点。 只需看我的代码。 具有字段访问权限的对象如何比原始类型更快? 具有prtimitive类型的for循环: public static void main(String[] args) { double max = 1000; for (int j = 1; j < 8; j++) { double i; max = max * 10; long start = System.nanoTime(); for (i = 0; i < max; i++) { } long end = System.nanoTime(); long microseconds = (end […]

什么是共享对象文件?

在详细模式下运行jvm时,它显示正在从共享对象文件加载文件,如下所示 [Loaded java.lang.Object from shared objects file] [Loaded java.io.Serializable from shared objects file] [Loaded java.lang.Comparable from shared objects file] [Loaded java.lang.CharSequence from shared objects file] 什么是共享对象文件? 我以为这些是rt.jar中的文件,它从那里开始加载; 但rt.jar在很长一段时间内开放了 [Loaded java.security.BasicPermissionCollection from shared objects file] [Opened C:\Program Files\Java\jre6\lib\rt.jar] [Loaded sun.misc.JavaSecurityProtectionDomainAccess from C:\Program Files\Java\jre6\lib\rt.jar] [Loaded java.security.ProtectionDomain$2 from C:\Program Files\Java\jre6\lib\rt.jar] 在提取rt.jar之后的任何方式我发现它具有从共享对象文件加载的所有类。

用于从运行JVM收集统计信息的API

对于一个类项目,我想实现一个连接到本地JVM的Java应用程序,并收集堆使用情况,线程数,加载的类等统计信息。我在网上搜索了一个API,内置的第三方,这将允许我这样做,但到目前为止我没有成功。 有没有人知道一个API,它允许我连接到正在运行的JVM并收集统计信息?

使用Java 7进行转义分析/堆栈分配的资格

我正在使用Java 7中的转义分析进行一些测试,以便更好地了解哪些对象有资格进行堆栈分配。 这是我编写的用于测试堆栈分配的代码: import java.util.ArrayList; import java.util.Iterator; public class EscapeAnalysis { private static final long TIME_TO_TEST = 10L * 1000L; // 10s static class Timestamp { private long millis; public Timestamp(long millis) { this.millis = millis; } public long getTime() { return millis; } public void setTime(long time) { millis = time; } } public […]

Java线程:是否可以从同一JVM上运行的不同java程序查看/暂停/终止特定线程?

我有一个运行不同线程的程序’foo’,fooT1,fooT2,… fooTn。 现在,如果我想写另一个程序’bar’,这可能会杀死线程fooTr,那可能吗? 原因:其中一个线程fooTr跟踪产品许可证。 如果这个线程被杀死; 一个人可以无限期地运行这个产品。 并且杀死’foo’本身是可以容忍的’foo’,因为这正是许可证到期时所做的。 系统:Linux的Fedora发行版 注意:启动JVM和程序foo的命令放在/etc/init.d中,任何对rc.1 / rc.2 / rc.3结构有相当了解的人都可以更改/添加起始参数。 我希望我的问题很清楚。 如果没有,我总是可以编辑它。

对象的地址在其生命周期中是否固定?

对象的地址在其生命周期中是不变的还是可以改变? 我只是觉得一个对象的地址永远不会改变。 它是JVM依赖的吗? 我没有找到任何明确的规格。

假设我知道我将在x64 cpu上运行,我可以忽略哪些JVM同步实践?

我知道JVM内存模型是为CPU的最小公分母而设计的,因此它必须假设JVM可以运行的最弱的cpu模型(例如ARM)。 现在,考虑到x64具有相当强大的内存模型,假设我知道我的程序只能在64位x86 CPU上运行,我可以忽略哪些同步实践? 当我的程序通过虚拟化运行时,这也适用吗? 例: 众所周知,JVM的内存模型需要同步对long和double的读/写访问,但可以假设其他32位原语(如int,float等)的读/写是primefaces的。 但是,如果我知道我在64位x86机器上运行,我是否可以忽略使用long / double上的锁定知道cpu将自动读取/写入64位值并保持它们不稳定(就像我对int / floats一样) )?

JVM可以提供快照持久性吗?

是否可以转储正在运行的JVM的映像,然后通过将映像加载到JVM中来恢复以前的状态? 我相当肯定答案是消极的,但我会喜欢错。 随着JVM可用的所有动态语言增加了交互性,能够保存编码会话将有助于节省手动将VM还原到先前会话的时间。

如何为Java 7中的现有国家/地区代码添加新的Currency到java.util.Currency?

例如,中国货币的ISO 4217代码为CNY 。 由于该货币的自由全球交易受到限制,因此存在第二个“离岸”货币等价物,称为CNH 。 维基百科对这一切有一点总结 。 在Java 7 ,有一种方法可以更新 JVM附带的三个字母ISO 4217代码集。 但是,它不能用于向现有国家/地区代码添加单独的货币代码:它会用CNH取代CNY ,这对我的目的不利。 如何在不覆盖CNY情况下将CNH (不在ISO 4217列表中)添加到Java 7的可用货币集中? 换句话说,如何为一个国家/地区获取多种货币代码? 请注意,这个问题: 如何将新货币代码添加到Java? 被问到并回答了Java 6 。 但是替换java.util.CurrencyData的策略不起作用,因为该文件不再存在。