- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
下面是程序,
public class Dummy {
public static void main(String[] args) throws Exception {
final int LENGTH = Integer.MAX_VALUE / 8;
Object[] values = new Object[LENGTH];
int count = 0;
for (int i = 0; i < Integer.MAX_VALUE; i++) {
Object o = new Object();
int hashCode = o.hashCode();
if (hashCode > LENGTH)
continue;
if (values[hashCode] != null) {
System.out.println("found after " + count + ": " + values[hashCode] + " same hashcode as " + o);
System.out.println(values[hashCode] == o);
System.exit(0);
} else {
System.out.println(hashCode);
values[hashCode] = o;
count++;
}
}
}
}
当通过 eclipse(通过 64 位 javaw.exe
)启动时,堆使用率一直上升到低于显示的近似值(最大值)并且电池在几分钟内耗尽,
然后显示以下异常:
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
在同一台机器上,使用 64 位启动时相同的程序 java.exe
在命令行中,在 for-loop
中创建 22985 个对象后,新的哈希码始终与以前的哈希码发生冲突“私有(private)工作集”值为 1GB(最大)。
:
23206321
39915397
found after 22985: java.lang.Object@f2eb847 same hashcode as java.lang.Object@f2eb847
false
我想了解一下,而无需过多关注代码逻辑,
1) 为什么比较这两种方法在堆使用方面存在差异?因为这两种方法都没有进行调整。
2)在通过 eclipse(javaw.exe
)或通过命令行(java.exe
)启动程序之前,我如何控制堆使用参数?请帮助我!!!
注意:我正在使用 java 1.6
最佳答案
如果您不指定 JVM 使用 Ergonomics (决定设置默认值)基于主机架构,它为 JVM 设置各种默认参数,heap 就是其中之一
对于 64 位 CPU,JVM 设置了更高的堆值,因此您会看到 OOM 延迟
你可以通过调用
来验证这一点java -XX:+PrintFlagsFinal -version 2>&1 | grep MaxHeapSize
由于您使用的是 Windows,因此您可以使用一些 JDK 工具,也可以使用此程序来验证内存默认调整
long maxBytes = Runtime.getRuntime().maxMemory();
System.out.println("Max memory: " + maxBytes / 1024 / 1024 + "M");
在两台机器上
您还可以通过显式指定堆大小来覆盖堆大小,在这种情况下您应该从内存的角度看到类似的行为
关于java - 使用 "javaw.exe"与 "java.exe"的堆大小使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27664355/
使用 Java 已有多年,但最近关于 JRE 零日漏洞利用的警告令人不安。 我正在考虑以下方法(全部在 Windows 7 Ultimate/64 位计算机上): 在所有浏览器中禁用 Java(早就完
我的应用程序启动本地 Windows 应用程序,例如使用 JVM 运行时的计算器。 我正在遵循 http://www.javaworld.com/article/2071275/core-java/w
升级到 Java 7(Oracle/Sun JDK,而非 OpenJDK)后,如果我尝试使用 javaws 在 Web Start 下测试我的应用程序,它会告诉我“应用程序被安全设置阻止”。我可以使用
我正在尝试使用 eclipse juno,但即使在阅读了这里的很多页面后仍然不断出现错误。 当我尝试使用 C:\Users...\eclipse\eclipse.exe -vm "%JAVA_HOME
我使用Debian。我已经安装了 Java 8 和更高版本的 Java 6,使用 http://ppa.launchpad.net/webupd8team/java/ubuntu 上提供的脚本. 我运
我无法启动“javaws -viewer”。我使用的是“Windows10”,当我在“运行”窗口中键入以下命令时,收到一条错误消息。请在下面找到相同的屏幕截图。 javaws –viewer java
我们会定期遇到阻止小程序运行的问题,进程 javaw.exe 似乎已锁定,因此多次杀死它们以解锁小程序。在跟踪文件中,我找到了这个(我们有 jdk 1.6_35,该小程序由 j2ee Web 应用程序
我正致力于使用 JNLP 自动执行相同的 Java 代码,我惊讶地发现 jawaws 没有给我一个有效的返回码。 原始执行行是: javaws -wait http://example.com:666
这个问题在这里已经有了答案: Start a java program without the console (7 个答案) 关闭 9 年前。 我的游戏引擎是 Jython 和 Java 的组合,
最近,由于内存不足错误,javaw.exe 进程一直在接管我的计算机并迫使我退出 Eclipse 和其他应用程序。请注意,我根本没有最大化系统,我正在处理一些基本的 Java 程序,并且我最多一次打开
这个问题在这里已经有了答案: 关闭 9 年前。 Possible Duplicate: Eclipse will not open due to environment variables 我正在使
进程文件:javaw or javaw.exe 进程名称:Sun Java 进程类别:存在安全风险的进程 英文描述: Sorry,No English Decriptions For the
任务管理器显示许多 javaw.exe 实例驻留在内存中,导致 Windows 内存不足。我正在使用此代码关闭我的 Java 应用程序: SwingUtilities.invokeLater(new
我们有一个使用 JavaWS 启动的应用程序。我知道 JNLP 内容中列出的 JAR 存储在客户端部署缓存中。有没有办法让我的应用程序获取用于启动它的实际缓存文件的列表? 我打印出了类路径:c:\Pr
摘要:如何在同一台机器上运行重复的 JavaWS 应用程序(它们来自相同的源代码,但使用不同的数据)? 我在客户端站点上运行旧版本的应用程序。我对应用程序进行了升级,并部署了这两个应用程序(使用不同的
在 postman 中,我将表单数据发布到基于 play2 框架构建的 API。现在我想在 play2 框架上构建的另一个 API 中进行相同的调用。 ws.url(url).setContentTy
我有一个通过 Java Webstart 启动的 Java 应用程序。有时,在应用程序的新部署之后,启动应用程序会导致在每次启动时下载两次。我还没有深究这个问题,但我认为它可能与我们的 squid 代
java ,javaw 和 javaws 的区别: 首先,所有的这些都是java的启动装置,java.exe经常使用,当使用命令行输出到window的
我在 Mac 上有一个 shell 脚本,用于查找 javaw。即: #!/bin/sh javaw -version 2> /dev/null if [ $? == 0 ]; then java
我需要通过在我的代码中传递命令行参数来激活 webstart。我看过Passing command line arguments to javaws (Java WebStart) executabl
我是一名优秀的程序员,十分优秀!