Tag: 内存管理

如何确定数据结构的实际内存使用情况

在数据结构中,我知道结构的大小取决于从一个部分到另一个部分的内部链接。 除了JProfiler之外,有没有办法确切地告诉特定结构中有多少内存? 例如,本学期的课程项目与将各种结构应用于歌曲数据库有关。 这些项目涵盖了数组,列表,展开列表和树。 我想做的是看看使用了多少内存。 例如,链表的内存要求为3N,但我想看看节点在我的项目中占用了多少空间。 JProfiler看起来会起作用,但500美元超出了我的价格范围,我想将它用于本学期涵盖的所有结构,而不是目前为止应用的三种结构。

java可以系统输出导致内存不足的问题

这是一个理论问题。 可以在java applet上大量出现系统,导致applet内存不足吗? 如果是,那么删除跨多个文件的多个sysout的简单解决方案是什么?

计算对象的“权重”,如何

可能重复: 在Java中,确定对象大小的最佳方法是什么? 假设您有一个数据结构,允许您向其添加数据,比如一个列表: List 由于系统的客户端实际上添加了内容…在某些时候,JVM将耗尽内存,这只是一个问题,何时会发生这种情况。 定期将包含此列表的对象保存到磁盘并将其余部分保存为gc会很好。 使用Java,是否可以估计对象现在占用多少内存?

如何使用Java引用使用Java Unsafe释放内存?

Java Unsafe类允许您按如下方式为对象分配内存,但是使用此方法如何释放完成时分配的内存,因为它不提供内存地址… Field f = Unsafe.class.getDeclaredField(“theUnsafe”); //Internal reference f.setAccessible(true); Unsafe unsafe = (Unsafe) f.get(null); //This creates an instance of player class without any initialization Player p = (Player) unsafe.allocateInstance(Player.class); 有没有办法从对象引用访问内存地址,也许默认的hashCode实现返回的整数可以工作,所以你可以做… unsafe.freeMemory(p.hashCode()); 似乎没有一些如何……

JPA内存管理问题

首先,一点背景。 我正在研究从SQL Server中提取数据的管理软件。 我正在使用JPA创建表的Entity实例以便在管理软件中进行操作(我现在只使用JPA几天)。 作为测试,我将下面的代码汇总在一起,以测试存储多少内存将占用最丰富的表(PeriodicalTable)的对象,这些表有18,500行(或大约有)并且只能增长; public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory(“PersistenceDemoPU”); EntityManager em = emf.createEntityManager(); Query query = em.createQuery(“SELECT p FROM PeriodicalTable p”); //query.setMaxResults(7000); List results = query.getResultList(); PeriodicalTable storedPlayer; for (int i = 0; i < results.size(); i++){ storedPlayer = results.get(i); System.out.println(storedPlayer.toString()); if (i == (results.size()-1)){System.out.println("Total results: "+(i+1)); } } […]

java中upcasting的内存分配

考虑这些类: public class Animal{ } public class Dog extends Animal{ } public AnimalTest(){ public static void main(String[] args){ Dog d = new Dog(); Animal a = d; } } 我的问题是因为我对Animal a = d;进行了向上翻译Animal a = d; 它是否在机器上消耗新的内存分配,或者是否使用分配给Dog d = new Dog();的内存Dog d = new Dog();

为什么强制垃圾收集会增加分配给java进程的内存?

所以我有这个代码: public static void main(String[] args) throws Exception { Thread.sleep(5000); System.out.println(“Creating array…”); Integer[] integers = new Integer[Integer.MAX_VALUE/32]; Thread.sleep(5000); System.out.println(“Destroying array”); integers = null; //System.gc (); //System.runFinalization (); Thread.sleep(60000); } 当我运行这段代码后,我会在大约5秒钟后看到268 MB的ram被分配给Activity Monitor中的java进程。 当我在控制台中看到“销毁arrays”后取消注释注释行(System.gc和以下行)时,分配的内存增加到278 MB。 我可以理解内存没有被释放,因为System.gc()只是对JVM的一个暗示,但为什么10MB会增加呢? 此时加载到内存中的是什么?

静态变量引用的对象的垃圾收集

class StaticTest{ public static SomeClass statVar = new SomeClass(); } 在此之后,如果我们访问StaticTest.statVar并随机分配一些新对象,那么当所有这些对象都将被垃圾收集? 答:在正常的垃圾收集时间。 但是如果这个statVar引用了一些实例变量(对象)呢? 不清楚? 好的,静态变量的生命周期是在类卸载之前。 在Web应用程序中,我们在静态上下文中初始化很多东西。 如果我们提供对这个静态上下文的一些对象引用但是我们不发布它们,那么它是如何被垃圾收集的呢? 我很乐意就此进行讨论。

以编程方式获取android设备的所有RAM内存,而不仅仅是分配给用户进程的内存

我有一个设备,我知道它的RAM内存为512 MB 希望能够以编程方式检索此值(512 MB)。 到目前为止,我已经在互联网上主要涉及这两种方式: https://stackoverflow.com/a/16143065/1521264这给了我386 MB 以及https://stackoverflow.com/a/23508821/1521264其中还提供了386 MB 我假设386 MB是用户进程可用的内存,所以我想得到所有内存或其他进程的细分。

在Object 中为元素分配多少内存

考虑以下情况 int[] anArray = new int[10]; 在堆上为每个32位的 10个元素分配内存。对吗? 那么如果元素类型是Object,那么元素的大小是多少。 ?? 喜欢 Object[] objArray = new Object[10]; 堆上现在分配了多少内存? 我只是怀疑ArrayList的源代码。 private transient Object[] elementData; 刚在我的机器上尝试过这一行 List s = new ArrayList(Integer.MAX_VALUE); 结果 Exception in thread “main” java.lang.OutOfMemoryError: Requested array size exceeds VM limit at java.util.ArrayList.(Unknown Source) at com.nextenders.server.guice.actions.servlets.Test.main(Test.java:13) 所以我想知道分配了多少内存。