草庐IT

java - Java中的大量对象(使用HashMap)

你好,我目前正在使用Java进行单词预测。为此,我使用了基于NGram的模型,但我遇到了一些内存问题...我第一次有这样的模型:publicclassNGramimplementsSerializable{privatestaticfinallongserialVersionUID=1L;privatetransientintcount;privateintid;privateNGramnext;publicNGram(intidP){this.id=idP;}}但它占用大量内存,所以我认为我需要优化,我想,如果我有“hellotheworld”和“hellothepeople”,而不

java - 多个 JVM 进程是否可以共享公共(public)类的内存?

我想在我的网络服务器上运行多个Java进程,一个用于每个网络应用程序。我正在使用具有大量支持类和jar文件的Web框架(Play),并且Java进程使用大量内存。一个Play进程显示大约225MB的“常驻私有(private)”内存。(我正在使用Java1.7.0_05在MacOSX上对此进行测试。)特定于应用程序的代码可能只有几MB。我知道典型的JavaWeb应用程序是添加到一个服务器进程(Tomcat等)的jars,但运行Play的标准方式似乎是作为一个独立的应用程序/进程。如果这些是C程序,那么这200MB中的大部分将是共享库,而不是在每个应用程序中重复。有没有办法在Java中实

java - 外部洗牌 : shuffling large amount of data out of memory

我正在寻找一种方法来随机播放不适合内存(大约40GB)的大量数据。我有大约3000万个条目,长度可变,存储在一个大文件中。我知道该文件中每个条目的开始和结束位置。我需要随机播放这些不适合RAM的数据。我想到的唯一解决方案是将包含从1到N的数字的数组打乱,其中N是条目数,与Fisher-Yatesalgorithm然后根据此顺序将条目复制到新文件中。不幸的是,此解决方案涉及大量查找操作,因此会非常慢。是否有更好的解决方案来对均匀分布的大量数据进行洗牌? 最佳答案 首先解决shuffle问题。为此,请为您的条目发明一种哈希算法,该算法会

java - Java 应用程序中每个类的成本 - 更少的大类或几个更小的类

对于添加到Java应用程序的每个新类,内存成本是多少?是拥有5000多行的大型类还是几个500-1000行的类更好(如果它们都已加载)每次对象被实例化时,是否唯一额外的内存使用是用于实例变量引用对于一个没有实例变量的5000行类,加载类时的成本规模是多少?类文件的大小是粗略的近似值吗?jar文件的大小是否表明类将占用的内存通常大小或最大大小?在cruftex的回答后编辑:这是我对类split的理解:拆分成逻辑block可以很好地提高代码重用和减少行数它也更容易理解和维护代码这是我现在对类加载的理解:在第一次使用时将类加载到内存中(使用的内存大约是类文件的大小)如果使用JIT,一些额外的

java.lang.out of memory 错误

我们是cbse12年级的ip学生..我们正面临这个异常,我们不知道如何纠正这个异常。run:Exceptioninthread"ImageFetcher1"java.lang.OutOfMemoryError:Javaheapspaceatjava.awt.image.DataBufferInt.(DataBufferInt.java:41)atjava.awt.image.Raster.createPackedRaster(Raster.java:458)atjava.awt.image.DirectColorModel.createCompatibleWritableRaster(

java - 如何改进应用程序以避免堆空间问题

我有一个应用程序,它大量使用许多自定义对象,这些对象是在方法内部创建的,在方法之外从不需要。整个结构(在我看来)是非常好的面向对象的,并使用服务、实用程序和DI模型。现在,当我运行第一个“大型”测试时,我很快遇到了OutOfMemoryExceptions。现在,我不只是想增加堆空间并完成它,因为我可以想象这不会解决问题,而是延迟它直到我的应用程序增长更多并遇到同样的问题。我正在寻找一些简单且易于实现的解决方案、技巧和片段,以帮助应用程序处理垃圾收集和堆空间,尤其是当涉及到许多与对象创建相关的循环时。诸如“不要在循环中创建对象,在循环之前创建它们并在循环中覆盖它”之类的东西。

java - 为什么需要 -Xms?

据我了解,-Xms和-Xmx用于指定java程序的最小和最大堆大小。根据我的理解,如果我们不指定任何选项,JVM可以工作,即堆大小可以由JVM本身管理。所以,如果我们想限制最大堆大小,我们应该使用-Xmx没关系,现在我的问题是,为什么有人需要限制堆的最小大小,因为它可以由JVM很好地管理。为什么需要-Xms? 最佳答案 您可以通过设置更大的最小堆大小来减少垃圾回收周期。这对长时间运行的程序没有太大影响,但短期运行的程序可以从中受益。JVM将初始堆大小设置为最大堆大小的某个数量,然后在使用的内存超过某个阈值时增大堆并执行(主要是次要的

java - 为什么 JVM 总分配内存大于 -Xmx?

JVM选项:-Xms20M-Xmx20M-Xmn10M-XX:+PrintGCDetails-XX:SurvivorRatio=8正如预期的那样,JVM将为JVM堆分配近20MB的内存。但是请看下面的GC细节:PSYoungGentotal9216K,used4612K[0x00000000ff600000,0x0000000100000000,0x0000000100000000)edenspace8192K,56%used[0x00000000ff600000,0x00000000ffa812d8,0x00000000ffe00000)fromspace1024K,0%used[0

java - 数学与 J/链接 : Memory Constraints?

我正在使用Mathematica及其J/LinkJava接口(interface)进行计算密集型基准测试。如果达到大约320MB的内存占用量,基准测试就会停止,因为这似乎是极限,垃圾收集器需要越来越多的时间并最终会失败。Mathematica函数ReinstallJava采用参数命令行。我试着做ReinstallJava[CommandLine->"java-Xmx2000m..."]但是Mathematica似乎完全忽略了-Xmx选项。如何为我的java程序设置-Xmx内存选项?320MB的限制从何而来?任何帮助将不胜感激。 最佳答案

java - JUnit + Derby + Spring : drop in-memory db after every test

在我的单元测试中,我Autowiring了一些使用URL的数据源jdbc:derby:memory:mydb;create=true创建内存数据库。要删除内存中的Derby数据库,您必须连接:jdbc:derby:memory:mydb;drop=true我希望在每次测试后都发生这种情况,并从一个新的数据库开始。我如何使用Spring执行此操作? 最佳答案 HowtoshutdownDerbyin-memorydatabaseProperly给了我一个解决方案的提示:mydb.drop.url=jdbc:derby:memory:m