|
|
1
2
在Java内存上的尖峰时间。 首先,在Java中内存不足 OutOfMemoryError )受正在运行的GC的特性影响。 与名称的含义相反,您可以在不实际耗尽内存的情况下得到一个OutofMemoryError;当运行时决定花费大量的时间gc'ing时,也会抛出它。( source 埋在那里)。 此外,您可以通过耗尽特定的 种类 记忆。请记住,Java GC是一个代际收集器,如果你恰巧耗尽了几代人(我想说的是“终身”),但我可能错了,你也会失去记忆。这意味着可以从OS视图中留出堆空间,但是无法在Java堆上分配任何东西。 最后,还有一些与GC相关的实际开销,这些开销可能会占用一些堆空间。 在您的案例中,更可能发生的是以下方面的一些变化:您的代码在独立和小程序上下文中运行,每个上下文都有不同的安全管理器和不同的启动行为;这意味着涉及到一组不同的类(这些类会进入永久代),具有不同的DEP持久性。我想小程序的“堆栈”会更厚,因为它们的行为受到了更强烈的约束,这可能解释了maxmemory()中的大部分差异。 简而言之,可用内存的差异可能是由于Java运行时为自己的操作保留的内存的一些变化。这可能与GC相关,也可能与安全策略相关,或者只是为applet环境加载的不同类与独立类。maxmemory()还可以在确定返回内容时考虑上述任何“内存不足”条件。因此,0.9值可能是一个实现副作用,将来可能会发生变化。 |
|
|
2
0
Kevin,的确,与桌面应用程序相比,小程序运行方式的差异是有意义的,但令我吃惊的是,小程序和桌面应用程序之间的最大(我认为更大)内存差异很大,大约为8%。如果你说的“小程序”堆栈越厚,越强烈的冲突对他们行为的限制“我希望小程序能获得更大的最大内存,而不是独立版本。 我在applet和应用程序之间进行了一些测量。两个都接收到相同的参数(-xmx128m),都使用相同的jvm运行- Java热点(TM)64位服务器VM版本113-B02(第一次我认为Applet与客户端JVM一起运行,桌面用服务器JVM运行,但似乎都是服务器JVM) 当然,JVM实际上接收到不同的参数,但没有什么重要的(我认为):
小程序:最大内存=119.314K
桌面:最大内存=129.302K
这两个合资企业之间的巨大差异
现在我更困惑了,不仅是我不知道如何计算最大内存比(实际上0.9在未来的JVM版本中是无效的),而且我的应用程序在作为小程序运行时可能会耗尽内存。为了安全起见,当它作为小程序运行时,我需要增加大约10-15%的最大内存。 我仍然不相信为什么堆比率如此不同(在同一台机器上)和堆较小(特别是考虑到小程序需要额外的类)。 有什么原因吗?我现在是古玩,这超出了我检查小程序是否具有我认为应该具有的最大内存量的需要。 |
|
|
user29759326 · 如何返回递归函数中的最后一个值? 1 年前 |
|
|
malife89 · 将java中的字符串读取为正确的日期格式 1 年前 |
|
|
Tim · 在java中,有没有更快的方法将字节数组写入文件? 1 年前 |
|
|
rudraraj · java中未声明最终变量 1 年前 |
|
|
Bala Ji · 以下BFS的实施效率如何? 1 年前 |