相关疑难解决方法(0)

获取操作系统级别的系统信息

我目前正在构建一个Java应用程序,最终可能会在许多不同的平台上运行,但主要是Solaris,Linux和Windows的变种.

有没有人能够成功提取信息,例如当前使用的磁盘空间,CPU利用率和底层操作系统中使用的内存?那么Java应用程序本身正在消耗什么呢?

我更希望在不使用JNI的情况下获取此信息.

java memory resources system

230
推荐指数
10
解决办法
22万
查看次数

如何在Java中处理RAM中的大量数据/图像?

摘要

  1. 我正在读取包含图像数据的大型二进制文件。
  2. 对数据执行累积计数切割分析[它需要另一个与图像大小相同的数组]。
  3. 数据在0到255之间扩展(BufferedImage逐像素存储),以在JPanel上绘制图像。
  4. 在该图像上,使用进行缩放AffineTransform

问题

  1. 小图片(<.5GB)

    1.1当我增加执行缩放的比例因子时,
    会抛出点异常:-

java.lang.OutOfMemoryError:Java堆空间。

以下是用于缩放的代码-

    scaled = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
    Graphics2D g2d = (Graphics2D)scaled.createGraphics();
    AffineTransform transformer = new AffineTransform();
    transformer.scale(scaleFactor, scaleFactor); 
    g2d.setTransform(transformer);
Run Code Online (Sandbox Code Playgroud)
  1. 大图(> 1.5GB)
    • 加载巨大的图像(> 1.5GB)时,发生了与1.1中相同的异常,即使图像足够小以致无法加载,有时也会出现相同的错误。

尝试过的解决方案

  1. 我尝试使用BigBufferedImage代替BufferedImage来存储拉伸的数据。BigBufferedImage image = BigBufferedImage.create(newCol,newRow, BufferedImage.TYPE_INT_ARGB);
  2. 但这不能传递给g2d.drawImage(image, 0, 0, this); JPanel的repaint方法由于某种原因而停止。

  3. 我尝试以低分辨率加载图像,其中读取像素,并且跳过/跳过了几列和几行。但是问题是如何确定随着图像大小的变化要跳过多少像素,因此我无法决定如何确定跳转参数。

    MappedByteBuffer buffer = inChannel.map(FileChannel.MapMode.READ_ONLY,0, inChannel.size());
    buffer.order(ByteOrder.LITTLE_ENDIAN);
    FloatBuffer floatBuffer = buffer.asFloatBuffer();
    for(int i=0,k=0;i<nrow;i=i+jump)  /*jump is the value to be skipped, nrow is height of …
Run Code Online (Sandbox Code Playgroud)

java graphics2d

11
推荐指数
1
解决办法
212
查看次数

标签 统计

java ×2

graphics2d ×1

memory ×1

resources ×1

system ×1