Tag: 内存

增加java中的堆大小为weka

我正在尝试增加java中的堆大小,因为weka会不断崩溃。 我使用了建议的行: > java -Xmx500m -classpath 但是我收到以下错误: -classpath requires class path specification 我不确定这意味着什么。 有什么建议么?

JAXB – unmarshal OutOfMemory:Java堆空间

我目前正在尝试使用JAXB来解组XML文件,但似乎XML文件太大(~500mb)以供unmarshaller处理。 我一直得到java.lang.OutOfMemoryError: Java heap space @ Unmarshaller um = JAXBContext.newInstance(“com.sample.xml”); Export e = (Export)um.unmarhsal(new File(“SAMPLE.XML”)); 我猜这是因为它试图将大型XML文件作为对象打开,但该文件对于Java堆空间来说太大了。 有没有其他更“’内存有效’的方法来解析大型XML文件~500mb? 或者也许是一个unmarshaller属性可以帮助我处理大型XML文件? 这是我的XML的样子 ….. …. ….. …. 我想在WorkSet级别解组,仍然能够读取每个WorkSet的所有工作。

自动完成服务器端实现

在html输入框中为自动完成function实现服务器端组件的快速有效方法是什么? 我正在编写一个服务,在我们的Web界面的主搜索框中自动完成用户查询,完成显示在ajax驱动的下拉列表中。 我们运行查询的数据只是我们系统知道的大型概念表,大致与维基百科页面标题集相匹配。 对于这项服务,显然速度至关重要,因为网页的响应性对用户体验很重要。 当前实现只是将所有概念加载到有序集合中的内存中,并对用户击键执行简单的log(n)查找。 然后使用尾部提供超出最接近匹配的额外匹配。 该解决方案的问题在于它无法扩展。 它目前正在运行虚拟机堆空间限制(我已设置-Xmx2g,这是我们可以在我们的32位计算机上推送的最多),这阻止我们扩展我们的概念表或添加更多function。 在具有更多内存的计算机上切换到64位VM不是一个直接的选择。 我一直犹豫是否开始研究基于磁盘的解决方案,因为我担心磁盘搜索时间会影响性能。 有没有可能的解决方案可以让我更好地扩展,无论是完全在内存中还是在一些快速磁盘支持的实现中? 编辑: @Gandalf:对于我们的用例,重要的是自动完成是全面的,而不仅仅是对用户的额外帮助。 至于我们正在完成的内容,它是概念类型对的列表。 例如,可能的条目是[(“Microsoft”,“Software Company”),(“Jeff Atwood”,“Programmer”),(“StackOverflow.com”,“Website”)]。 一旦用户从自动完成列表中选择一个项目,我们就会使用Lucene进行完整搜索,但我还不确定Lucene是否可以自动完成自动完成。 @Glen:这里没有使用数据库。 当我在谈论桌子时,我只是指我的数据的结构化表示。 @Jason Day:我对这个问题的原始实现是使用Trie ,但由于需要大量的对象引用,因此内存膨胀实际上比排序集更差。 我将阅读三元搜索树,看它是否有用。

新的总是在C ++ / C#/ Java中分配在堆上

无论使用C ++或C#还是Java,我的理解始终是当我们使用new关键字创建对象时,它会在堆上分配内存。 我认为new的只需要引用类型(类),并且原始类型(int,bool,float等)从不使用new并且总是进入堆栈(除非它们是类的成员变量用new实例化)。 但是,我一直在阅读使我怀疑这个长期存在的假设的信息,至少对于Java和C#而言。 例如,我刚注意到在C#中, new运算符可用于初始化值类型,请参见此处 。 这是规则的例外,是该语言的辅助function,如果是,那么还会有哪些其他例外? 有人可以澄清一下吗?

HashSet of Strings占用了太多内存,建议……?

我目前正在HashSet中存储一个单词列表(大约120,000个),目的是用作列表来检查被激活的单词,看它们是否拼写正确,只返回是或否。 我想知道是否有办法做到这一点,占用更少的内存。 目前120,000个单词约为12meg,单词读取的实际文件大约为900kb。 有什么建议么? 提前致谢

-XX的含义是什么:NewRatio和-XX:OldSize JVM标志?

我使用以下命令行启动我的Java应用程序: java -XX:+PrintCommandLineFlags -verbose:gc -XX:+PrintGCDetails \ -XX:+UseConcMarkSweepGC -jar start.jar JVM启用以下选项: -XX:MaxNewSize=87244800 -XX:MaxTenuringThreshold=4 -XX:NewRatio=7 -XX:NewSize=21811200 -XX:OldPLABSize=16 -XX:OldSize=65433600 -XX:+PrintCommandLineFlags -XX:+PrintGC -XX:+PrintGCDetails -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+UseParNewGC 有人能解释我NewRatio和OldSize的含义吗? 特别是OldSize是终身一代的初始规模?

是否有针对Java的开源堆外缓存解决方案?

Terracotta BigMemory有没有开源替代品? 实际上我甚至找不到任何商业选择。 我对纯Java解决方案很感兴趣,它可以在JVM中运行,而不需要任何JNI和C支持的解决方案。

Java中是否存在内存泄漏?

我多次问这个问题。 什么是回答的好方法

Java动态加载和卸载.java文件,垃圾收集?

我正在创建一个将长时间运行的Java应用程序,这需要更新的function而不会关闭。 我决定通过以.java文件(从数据库中拉出一个字节数组)的forms加载它来提供这个更新的function,这些文件在内存中编译并实例化。 如果你有一个更好的方式我全都耳朵。 我遇到的问题是,当我在人工环境中进行一些测试时,每次加载这些“脚本”的周期内存占用量会略有增加。 注意:这实际上是我第一次使用java做这样或类似的事情。 我之前在C#中已经完成了这样的事情,加载和卸载.cs文件,并且还有内存占用问题…解决我将它们加载到一个单独的appdomain中,当我重新编译文件时,我只是卸载了那个appdomain并创建了一个新的一个。 入口点 这是我在长时间使用(许多重新编译循环)后用来模拟内存占用的入口方法。 我在短时间内运行它很快就会吃掉500MB +。 这只是临时目录中的两个虚拟脚本。 public static void main( String[ ] args ) throws Exception { for ( int i = 0; i < 1000; i++ ) { Container[ ] containers = getScriptContainers( ); Script[ ] scripts = compileScripts( containers ); for ( Script s : scripts ) s.Begin( […]

使BufferedImage使用更少的RAM?

我有java程序从硬盘驱动器读取jpeg文件,并将其用作各种其他东西的背景图像。 图像本身存储在BufferImage对象中,如下所示: BufferedImage background background = ImageIO.read(file) 这很有用 – 问题在于BufferedImage对象本身BufferedImage庞大。 例如,一个215k的jpeg文件成为一个4兆的BufferedImag e对象并进行更改。 有问题的应用程序可以加载一些相当大的背景图像,但是jpegs永远不会超过一个或两个,用于存储BufferedImage的内存可以快速超过100兆字节。 我假设这一切都是因为图像作为原始RGB数据存储在ram中,而不是以任何方式压缩或优化。 有没有办法让它以较小的格式将图像存储在ram中? 我处在CPU方面比RAM更松弛的情况下,因此将图像对象的大小向下移向jpeg压缩的轻微性能损失将非常值得。