Tag: 内存

为什么堆内存使用量和加载类的数量不断增加?

我正在使用JVM Explorer – 链接到JVM资源管理器 ,以分析我的Spring应用程序。 我有以下问题。 为什么即使在应用程序启动并且尚未收到任何请求后,“使用堆内存”仍在不断增加? (图1) 为什么即使在垃圾收集之后和收到任何请求之前’使用堆内存’仍在不断增加? (图像2) 为什么在垃圾收集之后,通过向应用程序发送一些请求来加载类的数量正在增加? 应用程序不应该使用以前的类吗? 为什么它只是增加几乎所有东西(堆,加载类的数量)? (图像3) 应用程序启动后 – 放大图像 单击“运行垃圾收集器”按钮后。 – 放大图像 在完成垃圾收集程序后向应用程序发送一些请求后 – 放大图像

关于’new’关键字的Java内存问题

如果您运行以下代码会发生什么? while (true) { String x = new String(“ABC”); } 在记忆方面? 字符串x是在堆栈上还是在堆上分配的? 由于内存溢出,程序最终会崩溃,还是垃圾收集会阻止它? new关键字是否始终在堆上创建对象? 什么时候在堆栈上创建对象? 谢谢!

Java类vs数组内存大小?

我必须在我的Java程序中存储数百万个X / Y双对以供参考。 我想保持尽可能低的内存消耗以及对象引用的数量。 所以经过一番思考后,我决定将这两个点放在一个很小的双数组中可能是一个好主意,它的设置如下: double[] node = new double[2]; node[0] = x; node[1] = y; 我认为使用数组会阻止类与我在类中使用的X和Y变量之间的链接,如下所示: class Node { public double x, y; } 然而,在阅读了类中公共字段的存储方式之后,我突然意识到字段实际上可能不是像指针一样构造结构,也许JVM只是将这些值存储在连续的内存中并且知道如何在没有地址的情况下找到它们使我的点的类表示小于数组。 所以问题是,内存占用面积更小? 为什么? 我对类字段是否使用指针特别感兴趣,因此具有32位开销。

在类上有很多方法会增加该类对象的开销吗?

想象一下,我正在使用一个类来从数据库中恢复项目 class BankRecord { public int id; public int balance; public void GetOverdraft() { … } public void MakeBankrupt(){ … } } 现在,如果只有2种方法(如上所述)或100种方法(可能其中一些非常大),使用它的性能会发生什么变化。 如果所有方法都在每个对象上,那么实例化数百个这些对象会更糟吗? 这适用于c#/ java类型的语言,但对所有语言都知道。 或者是一个好的做法是拥有一个单独的类,对这些对象执行所有操作,并将对象保留为纯数据类?

我在哪里可以永久设置Windows PC上的Java堆大小?

我最近下载了最新的Java 1.6 JDK。 我正在使用SDK附带的VisualVM在我的本地电脑上测试/监控我的webapp(使用Tomcat服务器)。 我正在运行Windows XP。 用于设置最小值的参数位于何处。 最多 java堆大小? VisualVM表示最大值。 堆大约是256mb。 我在server.xml文件中查找了Tomcat,但没有找到任何设置。 谢谢

-Xms:初始堆大小或最小堆大小?

-Xms是指定初始堆大小还是最小堆大小? 我看到很多地方有很多不同的答案。 有些人喜欢这里的第二个答案 ,说它是针对初始堆的,有些像这里说它的最小堆大小。 或者最小尺寸本身是初始尺寸?

有没有办法强制JVM使用swap,无论内存需求有多大?

这是我的情况:我手头有一项需要大量记忆的任务。 我没有足够的内存,无论我尝试了什么(Jrockit使用/ 3gb交换机等),我都无法给JVM足够的ram并且操作因exception而终止,告诉我需要更多的堆空间。 有什么方法可以强制JVM使用操作系统的交换机制,以便它不会耗尽内存? 这是Windows xp 32位 这需要很长时间,但我不在乎,我只需要完成这项操作。 我用完了选项,而且我无法控制任何变量。 这是一个必需的编辑,因为我几乎每个人都有相同的响应:)这不是我的代码。 有人编写了一个将xml文件读入存储库的工具。 该工具使用EMF,并立即加载整个模型。 我所能做的就是为它提供XML文件。 如果本机代码在Windows或Linux等下运行,操作系统会使用虚拟内存/交换空间为其提供内存,而应用程序并不知道它。 我想知道是否可以对JVM做同样的事情。 在Windows 32位下,-Xmx可以达到一定数量,但这还不够。 出门购买新硬件暂时不适合我。 所以我想知道是否有可能使JVM像本机进程一样工作。 慢,但仍在工作。 显然这是不可能的,我运气不好。 我只需要知道我是否真的没有选择权。

java PermGen空间是整个VM内存的一部分吗?

假设我用以下参数启动我的java VM: -Xms1024m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m 512m PermGen空间是否会添加到1024m内存中,还是它们的一部分 ? 或者换句话说,我的总内存消耗是1536米还是1024米? 在后一种情况下,这是否意味着应用程序只有512m用于PermGen空间以外的目的? 如果这个问题显示对PermGen空间缺乏了解,请告诉我。 😉

Listview内存泄漏

我有一个简单的列表视图与适配器。 我动态创建了10多个listviewitems。 然后我一次又一次地上下滚动….我可以看到可用的内存不断下降…… 我需要在哪里免费? 注意 – 有一个imageview – 但在我的测试中我没有使用任何图像,所以它是View.GONE。 另外 – 我可以使用哪个工具来分析android上的内存使用情况。 我找到了你的Kit,但是如何为android配置它(我在设备上运行应用程序)/ Activity类 package org.BJ.Food4All.Activities.NewRecipe; import org.BJ.Food4All.R; import org.BJ.Food4All.Recipe; import org.BJ.Food4All.Recipe.Instruction; import org.BJ.Food4All.Activities.RecipeBook.RecipeInstructionsListViewAdapter; import org.BJ.Food4All.Activities.RecipeBook.SharedData; import org.BJ.Food4All.utils.CameraUtil; import org.BJ.Food4All.utils.ImageUploadItem; import android.app.ListActivity; import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; import android.util.Log; import android.view.ContextMenu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ContextMenu.ContextMenuInfo; import android.view.View.OnClickListener; import android.widget.AdapterView; import […]

将字节数组加载到内存类加载器中

我想知道如何将字节数组加载到内存 URLClassLoader中? 字节数组是jar文件的解密字节(如下所示)! 大多数内存类加载器都使用ClassLoader而不是URLClassLoader! 我需要它使用URLClassLoader。 byte[] fileB = Util.crypt.getFileBytes(inputFile); byte[] dec; dec = Util.crypt.decrypt(fileB, “16LENGTHLONGKEYX”.getBytes()); //Load bytes into memory and load a class here? 谢谢!