草庐IT

C++流到内存

全部标签

java - 异常的内存分配

您能解释一下,Exception实例或其子实例在内存中的分配位置吗?是堆还是栈,还是别的?谢谢! 最佳答案 对于大多数JVM来说,所有的Object都是在堆上创建的,Exception也不异常(exception)。;)JVM可以使用EscapeAnalysis在堆栈上分配对象,但这通常仅限于仅在一种方法中使用且不返回的对象。也就是说,Exceptions不太可能是一个好的候选者。在许多JVM上创建Throwables(包括Exception)的方式的一个特别之处在于,直到需要它们时才会创建堆栈跟踪元素。这是因为大多数时候不需要它们

java - 调试奇怪的内存泄漏 - Java/Tomcat

我在Tomcat下运行的Java应用程序遇到了一个非常奇怪的问题。我们尝试在1周的冲刺中从新生成的新产品更新生产代码,该应用程序已经运行了几个月没有打嗝,然后这段新代码使我们的Linux服务器在一段时间后开始交换。非常奇怪的是,当查看VisualVM的内存使用情况时,它从未超过最大堆大小,JVM没有抛出OutOfMemory,机器只开始交换,JVM甚至在交换之后继续运行。所以,似乎是从某处泄漏了内存,似乎是从新代码中泄漏的,但奇怪的是它不在JVM内部,关于如何调试它有什么想法吗?谢谢! 最佳答案 交换不是泄漏的决定性指标。它是由低物

java - 在Java中使用大型XML DOM时减少内存占用

我们的应用程序需要获取以XML格式(几个文件)呈现的客户端数据,并将其解析为我们的通用XML格式(带有模式的单个文件)。为此,我们使用apache的XMLBeans数据绑定(bind)框架。下面简要描述此过程的步骤。首先,我们将原始java.io.File对象指向磁盘上的客户端XML文件,并将其加载到集合中。然后,我们遍历此集合,每个文件创建一个apache.xmlbeans.XmlObject。在将所有文件解析为XmlObjects之后,我们创建4个集合,其中包含我们感兴趣的XML文档中的各个对象(很显然,这些不是手工创建的对象,但是我只能描述为创建的“代理”对象由apache的XM

java - 将文件的字节数组加载到内存中

我正在尝试将jar文件直接加载到内存中,而不是将其放到HDD中。我尝试使用ClassLoader,但出现错误。这是我的代码:自定义类加载器publicclassCLS_ClassLoaderextendsClassLoader{privatebyte[]bArrData;publicCLS_ClassLoader(ClassLoaderparent,byte[]bArrData){super(parent);this.bArrData=bArrData;}publicClassloadClass(Stringname)throwsClassNotFoundException{retur

java - 根据 JVM 的内存粒度确定数组的最佳大小

当为(例如)一个集合创建支持数组时,您并不真正关心您创建的数组的确切大小,它只需要至少与您计算的一样大。但是由于内存分配和VM的数组头,在某些情况下可以创建更大的数组而不消耗更多内存-对于Oracle32位VM(至少互联网上的几个来源是这样的)claim),内存粒度为8(意味着任何内存分配都向上舍入到下一个8字节边界),数组头开销为12字节。这意味着在分配Object[2]时,它应该消耗20个字节(12+2*4),但由于粒度的原因,它实际上将占用24个字节。可以以相同的内存成本创建一个Object[3],这意味着集合必须稍后调整其支持数组的大小。同样的原则可以应用于原始数组,例如byt

java - 空循环比java中的非空循环消耗更多的内存

我正在阅读有关Java性能调优的文章并遇到了这个问题。当我们运行时publicclasstest{publicstaticvoidmain(Stringa[]){for(inti=0;iJVisualVM显示了内存消耗图表:但是当我们运行下面的代码时,publicclasstest{publicstaticvoidmain(Stringa[]){for(inti=0;iJVisualVM呈现锯齿波:为什么会这样?对于这两种情况,如何以及为什么更改gc触发限制? 最佳答案 关于你的v1forloops,你的局部变量,一旦它退出它的范围

java - 如何在 JGit 中使用内存数据库执行 git pull?

这个问题在这里已经有了答案:CloneagitrepositoryintoanInMemoryRepositorywithJGit(3个答案)关闭3年前。我想创建一个Java程序,它连接到某个Git存储库,将文本附加到文件,promise并将更改推送到该存储库。理想情况下,所有这些都应该发生在内存中。我正在使用JGit与Git交互:InMemoryRepositoryrepo=newInMemoryRepository(newDfsRepositoryDescription());Gitgit=newGit(repo);git.init().call();PullCommandpull

java - 什么时候为java中的静态变量分配内存?

一个类的所有对象共享静态变量。但是什么时候为静态变量分配内存呢?是在为类创建第一个对象时吗?还是甚至在创建该类的任何实例之前就发生了?实例变量也在运行时分配内存。静态变量的内存是在运行时分配还是编译时分配? 最佳答案 当类被加载时,在运行时。详情可以找here. 关于java-什么时候为java中的静态变量分配内存?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/31110432

构造函数中的 Java 内存可见性

对于以下简化类:publicclassMutableInteger{privateintvalue;publicMutableInteger(intinitial){synchronized(this){//isthisnecessaryformemoryvisibility?this.value=initial;}}publicsynchronizedintget(){returnthis.value;}publicsynchronizedvoidincrement(){this.value++;}...}我想一般的问题是对于同步保护的可变变量,在构造函数中设置初始值时是否需要同步?

java - 将 spark 数据帧写入 Parquet 格式时出现内存不足错误

我正在尝试从数据库中查询数据,对其进行一些转换并将新数据以Parquet格式保存在hdfs上。由于数据库查询返回大量行,我正在分批获取数据并对每个传入批处理运行上述过程。更新2:批处理逻辑是:importscala.collection.JavaConverters._importorg.apache.spark.SparkContextimportorg.apache.spark.sql.SQLContextimportorg.apache.spark.sql.Rowimportorg.apache.spark.sql.types.{StructType,StructField,St