Tag: 内存管理

java应用程序可以分配比jvm启动参数指定的内存更多的内存吗?

假设java应用程序没有使用任何本机库。 有没有办法可以分配比jvm启动参数指定的内存更多的内存? 反过来问:我可以依赖java应用程序永远不会分配比JVM启动参数限制更多的内存吗?

Java Unsafe.copyMemory java.lang.IllegalArgumentException

我有来自Unsafe的copyMemory的问题。 我花了2天时间解决它但没有结果。 下面给出的代码总是以“IllegalArgumentException”结尾。 你能帮助我并展示问题所在吗? public void testMemoryCopy() { class A { public long val = 10; } A a0 = new A(); A a1 = new A(); try { long offset = unsafe.objectFieldOffset(A.class.getField(“val”)); unsafe.copyMemory(a0, offset, a1, offset, 8); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } }

JCMD的代码/内部部分包含哪些内容?

为基于JVM的服务标注docker容器的方法很棘手(众所周知)。 我很确定我们对容器的尺寸略微不足,并希望清除我在监控时看到的与特定jcmd(本机内存跟踪器)输出相关的一些问题。 问题: 是否由jcmd报告的“内部”包含直接字节缓冲区? 除了jcmd报告的“代码”之外还有什么代码缓存? 是否有一种很好的方法来限制jcmd报告的“代码”部分。 我阅读了https://docs.oracle.com/javase/8/embedded/develop-apps-platforms/codecache.htm,但这仅涵盖了代码缓存限制,建议保持JVM默认不变。 JCMD输出在这里。 直接字节缓冲区 JMX属性在这里。 一些背景细节: 设置: 基于Spring引导的应用程序 JVM选项: -server -Xms1792m -Xmx1792m -XX:MetaspaceSize = 128M – XX:MaxMetaspaceSize = 192M -XX:+ UseG1GC -XX:+ UseStringDeduplication – XX:MaxDirectMemorySize = 256m -XX:NativeMemoryTracking = detail Docker容器2500MiB在AWS / EC2中运行

Java接口……动态或静态内存?

java接口在哪里驻留在内存中? 它们是驻留在堆还是堆栈中,还是全局内存? 我认为它们是在堆栈中,因为它们是在编译时创建的。 我对么?

如何使用JProfiler在java中查找内存泄漏?

如何使用JProfiler在java中查找内存泄漏? 过去一周我一直在JProfiler工作,在Web应用程序中查找内存泄漏。 我阅读了一些手册并查看了一些文章,它说看到所有对象和分配对象视图中的内存使用情况,并使用分配热点可以找到内存泄漏。 我调查了它,发现了char,string,bytes使用的大量内存。 由于我是一个更新鲜的我不知道如何计算这个并解决内存泄漏。 请帮帮我… 提前致谢…

jBoss 4.0.2多次部署相同的WAR会导致jBoss崩溃,因为PermGem /内存不足错误

我开发Web应用程序并且使用jBoss 4.0.2,当我使用eclipse多次重新部署我的WAR时,jBoss会因为内存不足而崩溃。 当我必须将新版本安装到生产环境时,它将消耗生产服务器内存,因此这意味着我必须停止jBoss以防止从客户服务器重新部署内存。 有没有解决这个问题的方法?

LRU LinkedHashMap根据可用内存限制大小

我想创建一个LinkedHashMap,它将根据可用内存限制其大小(即当freeMemory + (maxMemory – allocatedMemory)低于某个阈值时)。 这将用作缓存的一种forms,可能使用“最近最少使用”作为缓存策略。 我担心的是,allocateMemory还包括(我假设)未垃圾收集的数据,因此会高估估计已用内存的数量。 我担心这可能产生的意外后果。 例如,LinkedHashMap可能会继续删除项目,因为它认为没有足够的可用内存,但可用内存不会增加,因为这些已删除的项目不会立即被垃圾回收。 有没有人有这种类型的经验? 我的担忧是否合理? 如果是这样,有人可以提出一个好的方法吗? 我应该补充一点,我也希望能够“锁定”缓存,基本上说“好了,从现在开始不要因为内存使用问题而删除任何东西”。

字符串大写 – 更好的方式

什么方法的资本化更好? 矿: char[] charArray = string.toCharArray(); charArray[0] = Character.toUpperCase(charArray[0]); return new String(charArray); 要么 commons lang – StringUtils.capitalize: return new StringBuffer(strLen) .append(Character.toTitleCase(str.charAt(0))) .append(str.substring(1)) .toString(); 我认为我的更好,但我宁愿问。

java用完了内存问题

我有一个运行在带有linux 64bit操作系统的amazon-ec2-m1.large实例上的jar文件。 我在不同时间之后耗尽内存,通常在2-4之间,尽管在我的上一次日志写入(在创建错误文件之前),我看到以下内容: Memory – totalHeapSize: 264 MB, maxHeapSize: 1656 MB, freeHeapSize: 220 MB 当我从jar开始看到内存耗尽 – 所有值都相同,freeHeapSize介于200-230 MB之间(我每隔30秒检查一次,并执行System.gc()) 在hs_err_pid2250.log中写道: # # There is insufficient memory for the Java Runtime Environment to continue. # Cannot create GC thread. Out of system resources. # Possible reasons: # The system is out of physical RAM or swap space […]

如何在Java中找到物理内存大小?

我正在编写一个安装程序,它将调整产品的配置,以用于运行它的特定硬件。 特别是,我想确定系统中安装了多少物理RAM,以便估计在运行时为产品分配多少内存。 理想情况下,我想以独立于平台的纯Java方式执行此操作,因为安装程序需要在几个不同的平台上运行,但如果不可能,则首选Windows解决方案,因为这是最常见的部署平台。 在这种情况下,可以安全地假设产品将是盒子上运行的唯一/主要应用程序,因此我不必担心挤压其他任何人。 我不想过度分配,因为根据我们的经验,这可能会损害性能。