Tag: 内存

调整Tomcat内存和CPU消耗

我有一个Java Web应用程序,它适用于文件约定。 我使用Tomcat 6作为我的servlet容器。 当提交了许多请求时,Tomcat变得非常渴望内存。 我想知道如何微调tomcat以减少内存消耗。 我也在考虑更改我的servlet容器。 你有什么建议?

当JVM在运行时耗尽内存以进行分配时会发生什么?

在思考了一个通用的方法来提出这个问题(并且没有找到一个)后,我只想问它作为一个具体的例子: 假设我有一台具有1 Gb内存的Linux机器,它可以分配给进程(物理和交换总数为1 Gb)。 我在计算机上安装了标准的Oracle Hotspot JVM版本7。 如果在给定时刻,有足够的程序运行,只有400 Mb的1 Gb是空闲的,我在那一刻用以下JVM标志启动Java程序: java -Xms256m -Xmx512m -jar myJar.jar 发生了什么? : A. JVM是否无法立即启动,因为它会尝试分配所有512 Mb内存并失败(由于目前没有足够的可用内存)? 如果JVM启动: 如果在某些时候,正在运行的Java进程需要超过400 Mb的内存(并且除了当前的Java进程已经使用的内存之外,仍然只有400 Mb的内存空闲),会发生什么: B. Java进程是否会因OutOfMemroyError而失败? C.它会因一些其他(标准)错误而失败吗? D.是不确定的行为?

使用内存中的字节数组创建Java File对象(或等效对象)(无物理文件)

我想在内存中创建一个Java File对象(不创建物理文件),并用字节数组填充其内容。 可以这样做吗? 我们的想法是将它传递给Spring InputStreamSource 。 我正在尝试下面的方法,但它返回说“字节数组不包含文件名。”。 MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message); helper.setFrom(“no-reply@example.com”, “xyz”); helper.setTo(email); helper.setText(body,true); helper.setSubject(subject); helper.addInline(“cImage”, new InputStreamResource(new ByteArrayInputStream(imageByteArr))); mailSender.send(message);

如何在Java Netbeans Platform模块化项目中设置VM选项?

我有一个Netbeans Platform模块化项目,而不是常规的Java项目。 我想设置VM选项以增加内存,但在“属性”对话框中,无法对模块化Netbeans平台项目执行此操作。 这花费了我很多时间,我仍然没有找到设置VM args的好方法。 在Netbeans 7中编译和运行程序时,是否有人知道如何使用Netbeans平台模块化项目设置VM args? 鉴于麻烦,我几乎准备放弃Netbeans来创建模块化应用程序。

在Java中访问内存的最佳方法是什么,类似于mmap?

我正在研究需要与C应用程序通信的Java应用程序。 C应用程序使用共享内存和mmap进行通信,我需要Java应用程序才能访问相同的内存。 我的第一次尝试涉及使用JNI调用从共享内存中检索数据,但每次JNI调用的开销都会导致性能下降,所以我想要一种方法来获取Java中的内存并在Java端进行数据检索。 我的想法是我需要做以下事情: 使用一个JNI调用来获取我需要附加到的共享内存位置的位置 创建一个新的FileChannel() 使用该FileChannel使用map()创建MappedByteBuffer 这是最好的方法吗? 另外,我不确定如何实际创建FileChannel以指向正确的内存位置。

在Java应用程序中分析内存使用情况的最佳方法?

我知道在此之前已经有人问过类似的问题,但是让我准确描述一下我需要做什么: 我有一组运行命令行java应用程序的测试,我想为它们添加内存分析。 我看到的一个选项是向我的应用程序添加代码(可能使用第三方工具/库),这将提供内存快照。 另一种选择是使用第三方工具来管理/检测我的应用程序和JVM(理想情况下不需要我更改我的代码)。 我想的是像Valgrind这样的东西,但是对于Java来说。 如果可能的话也是开源的。 我真正想要做的是设置内存测试,以便定期监视我的内存使用情况,比如说每秒,然后转储到文本文件中。 这样我就可以看到内存使用量是否会随着时间的推移而振荡/增加/减少。 我还能够计算最大和最小峰值。 有人在这做过这样的事吗? 提前致谢。

在执行期间,java程序如何告诉它使用了多少内存?

在执行期间,java程序如何告诉它使用了多少内存? 我不在乎它的效率如何!

强制释放本机内存的示例直接ByteBuffer使用sun.misc.Unsafe分配?

JDK提供了分配所谓的直接ByteBuffers的能力,其中内存在Java堆之外分配。 这可能是有益的,因为垃圾收集器不会触及这个内存,因此不会导致GC开销:这对于像缓存这样的长期存在的东西来说非常有用。 但是,现有实现存在一个关键问题:当拥有ByteBuffer被垃圾收集时,底层内存只是异步分配; 没有办法强迫早期解除分配。 这可能会有问题,因为GC循环本身不受ByteBuffers处理的影响,并且假设ByteBuffers可能驻留在Old Generation内存区域,则可能在ByteBuffer不再使用后几小时调用GC。 但理论上应该可以直接使用sun.misc.Unsafe方法(freeMemory,allocateMemory):这是JDK本身用于分配/解除分配本机内存的方法。 看看代码,我看到的一个潜在问题是内存双重释放的可能性 – 所以我想确保正确清理状态。 任何人都可以指向我这样做的代码吗? 理想情况下,想要使用它而不是JNA。 注意:我看到这个问题有点相关。 看起来指出的答案是很好的方法: 这里是使用这个想法的Elastic Search的代码示例。 谢谢大家!

Java VM – 释放的内存是否返回操作系统?

在Java运行时,如果我的应用程序释放内存,运行时是否会将内存释放回操作系统? 或者回到我的流程?

Java程序中的字符串大小是否有限制?

可能重复: String的Java中的最大长度 – 调用length()方法 我有一个字符串定义为 字符串xx 我可以指定的字符数有限制吗? 2)我将用户输入分配给此字符串xx。 70%的人只给出一个字。 有时他们会给出一个很大的句子,所以想知道那可以吗? 还是有更好的java做法?