相关疑难解决方法(0)

内存中字节的大小 - Java

我听说过一个字节在java程序中占用的内存量的混合意见.

我知道你可以在一个java字节中存储不超过+127,并且文档说一个字节只有8位但是在这里我被告知它实际上占用了与int相同的内存量,因此只是一种有助于代码理解而非效率的类型.

任何人都可以清除这一点,这是一个特定于实现的问题吗?

java memory performance

51
推荐指数
5
解决办法
6万
查看次数

Java HashMap的内存开销与ArrayList相比

我想知道java HashMap与ArrayList相比的内存开销是多少?

更新:

我想提高搜索大包(600万+)相同对象的特定值的速度.

因此,我正在考虑使用一个或多个HashMap而不是使用ArrayList.但我想知道HashMap的开销是多少.

据我所知,密钥不是存储的,只是密钥的散列,所以它应该像对象的散列大小+一个指针.

但是使用了什么哈希函数?它是Object提供的还是另一个?

java memory-management arraylist hashmap

34
推荐指数
4
解决办法
5万
查看次数

为什么Java的字符串内存使用量很高?

在这篇博客文章中,据说String的最小内存使用量是:

8 * (int) ((((no chars) * 2) + 45) / 8) 字节.

因此,对于String"Apple Computers",最小内存使用量为72个字节.
即使我有10,000个长度为两倍的String对象,内存使用量也会小于2Mb,这根本就不算多少.那么这是否意味着我低估了企业应用程序中存在的字符串数量,或者该公式是错误的?

谢谢

java memory string

14
推荐指数
1
解决办法
5444
查看次数

如何在Java中有效地存储小字节数组?

通过字节数组我的意思是从10长度最多为30个字节的阵列.

通过商店我的意思是将它们存储在RAM中,而不是序列化并持久保存到文件系统.

系统macOS 10.12.6,Oracle jdk1.8.0_141 64位,JVM args -Xmx1g

示例: 预期的行为new byte[200 * 1024 * 1024]是≈200mb的堆空间

public static final int TARGET_SIZE = 200 * 1024 * 1024;
public static void main(String[] args) throws InterruptedException {
    byte[] arr = new byte[TARGET_SIZE];
    System.gc();
    System.out.println("Array size: " + arr.length);
    System.out.println("HeapSize: " + Runtime.getRuntime().totalMemory());
    Thread.sleep(60000);
}
Run Code Online (Sandbox Code Playgroud)

新字节的jvisualvm总堆使用堆[200*1024*1024] jvisualvm内存示例新字节[200*1024*1024]

但是对于较小的数组,数学并不那么简单

public static final int TARGET_SIZE = 200 * 1024 * 1024;
public static void main(String[] args) throws InterruptedException {
    final …
Run Code Online (Sandbox Code Playgroud)

java memory arrays memory-efficient

14
推荐指数
2
解决办法
1104
查看次数

Java中的文件大小与内存大小的比较

如果我在磁盘上获取大约2kB的XML文件,并将内容作为String加载到Java内存中,然后测量对象大小,它大约为33kB.

为什么规模会大幅增加?
如果我在C++中做同样的事情,内存中生成的字符串对象更接近2kB.

要用Java测量内存,我正在使用Instrumentation.对于C++,我采用序列化对象的长度(例如字符串).

c++ java memory

13
推荐指数
1
解决办法
1371
查看次数

在Java中为一个Integer对象分配了多少内存?如何找出任何自定义对象的这个值?

测量堆中的内存应该用于创建某种类型的新对象的正确方法是什么(让我们谈谈Integers以保持简单)?

没有实验可以计算出这个值吗?那种情况下的规则是什么?这些规则是在某处严格规定的还是从jvm到jvm不等?

java memory performance jvm memory-management

8
推荐指数
1
解决办法
2万
查看次数

实际的内存开销是什么?

我读什么-是最内存消耗-的对象-在Java的的什么-是最内存开销的-的对象-在Java的.

但我仍然感到困惑.

  • 什么是内存开销?是padding吗?
  • 什么是JVM压缩指针?是reference吗?
  • 如果32-bit JVM使用,那么开销会减少?当然是.但是因为填充?
  • 那么总是32-bit JVM使用内存效率或性能更好吗?

下图来自此链接(第26页)

在这个图像开始时它们显示为16字节的JVM开销,为什么呢?

在此输入图像描述

java jvm memory-management java-memory-model memory-overhead

8
推荐指数
1
解决办法
2086
查看次数

了解JVM中的对象开销

我正在研究java,我记得在某个地方读过java对象,在JVM中有一些开销,这是由虚拟机用于管理的原因.所以我的问题是,有人可以告诉我是否以及如何在HotSpot JVM中获取对象的总大小,以及它可能带来的任何开销?

java memory jvm object overhead

7
推荐指数
1
解决办法
5599
查看次数

如何在使用递归逐步执行大型目录结构时管理Java内存

我有一个递归方法,遍历包含数千个音乐文件的大型目录.每次扩展符合条件时,它都会将音乐文件添加到observableList <>.在递归方法执行之前,该列表被挂接到另一个线程中的TableView <>,以便用户可以实时查看正在添加到TableView <>的文件.

问题是我对如何在java中管理内存知之甚少,并认为我可能会妨碍垃圾收集.在大约3,000首歌曲之后,递归方法会占用近6 GB的内存,然后开始忽略它应该能够读取的文件.此外,在"完成"逐步通过目录结构之后,ram不会减少,(即,递归方法的堆栈没有被破坏,我认为所引用的所有对象仍然在堆内存中).

它更进一步..我将播放列表导出到XML文件并关闭程序.当我重新启动它时,内存是完全合理的,所以我知道它不是包含文件的大型列表,它必须与递归方法有关.

这是位于音乐处理程序中的recusive方法:

 /**
 * method used to seek all mp3 files in a specified directory and save them
 * to an ObservableArrayList
 * 
 * @param existingSongs
 * @param directory
 * @return
 * @throws FileNotFoundException
 * @throws UnsupportedEncodingException
 */
protected ObservableList<FileBean> digSongs(ObservableList<FileBean> existingSongs,
        File directory) throws FileNotFoundException,
        UnsupportedEncodingException {
    /*
     * Each directory is broken into a list and passed back into the digSongs().
     */
    if (directory.isDirectory() && directory.canRead()) {

        File[] files = directory.listFiles();
        for …
Run Code Online (Sandbox Code Playgroud)

java memory recursion javafx heap-memory

7
推荐指数
1
解决办法
251
查看次数

如何在scala中找到对象的大小?

有没有办法找出scala中对象占用的内存/大小?预先感谢您回复我。

scala scalaz scala-collections

7
推荐指数
1
解决办法
7287
查看次数