java内存文件,java内存配置文件

本文目录一览:

如何导出Java应用程序的内存快照文件

问了一下我之前的在远标教育的大学同学,他说在windows下找到要导出的Java应用的进程号。比如我要导出本机的Eclipse的内存快照,因为Eclipse也是Java应用。首先要找到Eclispe的进程号。在命令行输入:tasklist | findstr eclipse。

可以看到,Eclispe的进程号是8052。然后在命令行输入:jmap -dump:format=b,file=elipse.hprof 8052。file=elipse.hprof意思是设置生成的文件名,8052就是Java程序的进程号。

如果是在Linux系统下面,在命令行输入:ps -ef | grep eclipse。

可以看到eclipse的进程号是2622。同样,在命令行输入:jmap -dump:format=b,file=elipse.hprof 2622。

把生成的elipse.hprof在SecureCRT命令行输入:sz elipse.hprof,把文件下载到本地,用MAT之类的工具进行分析就可以了。

怎样用Java获取内存中的数据?

方法如下:

首先

创建一个Bean用来存贮要得到的信

public class MonitorInfoBean {

/** 可使用内存. */

private long totalMemory;

/** 剩余内存. */

private long freeMemory;

/** 最大可使用内存. */

private long maxMemory;

/** 操作系统. */

private String osName;

/** 总的物理内存. */

private long totalMemorySize;

/** 剩余的物理内存. */

private long freePhysicalMemorySize;

/** 已使用的物理内存. */

private long usedMemory;

/** 线程总数. */

private int totalThread;

/** cpu使用率. */

private double cpuRatio;

public long getFreeMemory() {

return freeMemory;

}

public void setFreeMemory(long freeMemory) {

this.freeMemory = freeMemory;

}

public long getFreePhysicalMemorySize() {

return freePhysicalMemorySize;

}

public void setFreePhysicalMemorySize(long freePhysicalMemorySize) {

this.freePhysicalMemorySize = freePhysicalMemorySize;

}

public long getMaxMemory() {

return maxMemory;

}

public void setMaxMemory(long maxMemory) {

this.maxMemory = maxMemory;

}

public String getOsName() {

return osName;

}

public void setOsName(String osName) {

this.osName = osName;

}

public long getTotalMemory() {

return totalMemory;

}

public void setTotalMemory(long totalMemory) {

this.totalMemory = totalMemory;

}

public long getTotalMemorySize() {

return totalMemorySize;

}

public void setTotalMemorySize(long totalMemorySize) {

this.totalMemorySize = totalMemorySize;

}

public int getTotalThread() {

return totalThread;

}

public void setTotalThread(int totalThread) {

this.totalThread = totalThread;

}

public long getUsedMemory() {

return usedMemory;

}

public void setUsedMemory(long usedMemory) {

this.usedMemory = usedMemory;

}

public double getCpuRatio() {

return cpuRatio;

}

public void setCpuRatio(double cpuRatio) {

this.cpuRatio = cpuRatio;

}

}

之后,建立bean的接口

public interface IMonitorService {

public MonitorInfoBean getMonitorInfoBean() throws Exception;

}

然后,就是最关键的,得到cpu的利用率,已用内存,可用内存,最大内存等信息。

import java.io.InputStreamReader;

import java.io.LineNumberReader;

import sun.management.ManagementFactory;

import com.sun.management.OperatingSystemMXBean;

import java.io.*;

import java.util.StringTokenizer;

/**

* 获取系统信息的业务逻辑实现类.

* @author GuoHuang

*/

public class MonitorServiceImpl implements IMonitorService {

private static final int CPUTIME = 30;

private static final int PERCENT = 100;

private static final int FAULTLENGTH = 10;

private static final File versionFile = new File(“/proc/version”);

private static String linuxVersion = null;

/**

* 获得当前的监控对象.

* @return 返回构造好的监控对象

* @throws Exception

* @author GuoHuang

*/

public MonitorInfoBean getMonitorInfoBean() throws Exception {

int kb = 1024;

// 可使用内存

long totalMemory = Runtime.getRuntime().totalMemory() / kb;

// 剩余内存

long freeMemory = Runtime.getRuntime().freeMemory() / kb;

// 最大可使用内存

long maxMemory = Runtime.getRuntime().maxMemory() / kb;

OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory

.getOperatingSystemMXBean();

// 操作系统

String osName = System.getProperty(“os.name”);

// 总的物理内存

long totalMemorySize = osmxb.getTotalPhysicalMemorySize() / kb;

// 剩余的物理内存

long freePhysicalMemorySize = osmxb.getFreePhysicalMemorySize() / kb;

// 已使用的物理内存

long usedMemory = (osmxb.getTotalPhysicalMemorySize() – osmxb

.getFreePhysicalMemorySize())

/ kb;

// 获得线程总数

ThreadGroup parentThread;

for (parentThread = Thread.currentThread().getThreadGroup(); parentThread

.getParent() != null; parentThread = parentThread.getParent())

;

int totalThread = parentThread.activeCount();

double cpuRatio = 0;

if (osName.toLowerCase().startsWith(“windows”)) {

cpuRatio = this.getCpuRatioForWindows();

}

else {

cpuRatio = this.getCpuRateForLinux();

}

// 构造返回对象

MonitorInfoBean infoBean = new MonitorInfoBean();

infoBean.setFreeMemory(freeMemory);

infoBean.setFreePhysicalMemorySize(freePhysicalMemorySize);

infoBean.setMaxMemory(maxMemory);

infoBean.setOsName(osName);

infoBean.setTotalMemory(totalMemory);

infoBean.setTotalMemorySize(totalMemorySize);

infoBean.setTotalThread(totalThread);

infoBean.setUsedMemory(usedMemory);

infoBean.setCpuRatio(cpuRatio);

return infoBean;

}

private static double getCpuRateForLinux(){

InputStream is = null;

InputStreamReader isr = null;

BufferedReader brStat = null;

StringTokenizer tokenStat = null;

try{

System.out.println(“Get usage rate of CUP , linux version: “+linuxVersion);

Process process = Runtime.getRuntime().exec(“top -b -n 1”);

is = process.getInputStream();

isr = new InputStreamReader(is);

brStat = new BufferedReader(isr);

if(linuxVersion.equals(“2.4”)){

brStat.readLine();

brStat.readLine();

brStat.readLine();

brStat.readLine();

tokenStat = new StringTokenizer(brStat.readLine());

tokenStat.nextToken();

tokenStat.nextToken();

String user = tokenStat.nextToken();

tokenStat.nextToken();

String system = tokenStat.nextToken();

tokenStat.nextToken();

String nice = tokenStat.nextToken();

System.out.println(user+” , “+system+” , “+nice);

user = user.substring(0,user.indexOf(“%”));

system = system.substring(0,system.indexOf(“%”));

nice = nice.substring(0,nice.indexOf(“%”));

float userUsage = new Float(user).floatValue();

float systemUsage = new Float(system).floatValue();

float niceUsage = new Float(nice).floatValue();

return (userUsage+systemUsage+niceUsage)/100;

}else{

brStat.readLine();

brStat.readLine();

tokenStat = new StringTokenizer(brStat.readLine());

tokenStat.nextToken();

tokenStat.nextToken();

tokenStat.nextToken();

tokenStat.nextToken();

tokenStat.nextToken();

tokenStat.nextToken();

tokenStat.nextToken();

String cpuUsage = tokenStat.nextToken();

System.out.println(“CPU idle : “+cpuUsage);

Float usage = new Float(cpuUsage.substring(0,cpuUsage.indexOf(“%”)));

return (1-usage.floatValue()/100);

}

} catch(IOException ioe){

System.out.println(ioe.getMessage());

freeResource(is, isr, brStat);

return 1;

} finally{

freeResource(is, isr, brStat);

}

}

解决java读取大文件内存溢出问题,如何在不

1、传统的在内存中读取

读取文件行的标准方式是在内存中读取,Guava 和Apache Commons IO都提供了如下所示快速读取文件行的方法:

这种方法带来的问题是文件的所有行都被存放在内存中,当文件足够大时很快就会导致程序抛出OutOfMemoryError 异常。

例如:读取一个大约1G的文件:

这种方式开始时只占用很少的内存:(大约消耗了0Mb内存)

然而,当文件全部读到内存中后,我们最后可以看到(大约消耗了2GB内存):

这意味这一过程大约耗费了2.1GB的内存——原因很简单:现在文件的所有行都被存储在内存中。

把文件所有的内容都放在内存中很快会耗尽可用内存——不论实际可用内存有多大,这点是显而易见的。

此外,我们通常不需要把文件的所有行一次性地放入内存中——相反,我们只需要遍历文件的每一行,然后做相应的处理,处理完之后把它扔掉。所以,这正是我们将要做的——通过行迭代,而不是把所有行都放在内存中。

2、文件流

现在让我们看下这种解决方案——我们将使用Java.util.Scanner类扫描文件的内容,一行一行连续地读取:

这种方案将会遍历文件中的所有行——允许对每一行进行处理,而不保持对它的引用。总之没有把它们存放在内存中:(大约消耗了150MB内存)

3、Apache Commons IO流

同样也可以使用Commons IO库实现,利用该库提供的自定义LineIterator:

由于整个文件不是全部存放在内存中,这也就导致相当保守的内存消耗:(大约消耗了150MB内存)

4、结论

这篇短文介绍了如何在不重复读取与不耗尽内存的情况下处理大文件——这为大文件的处理提供了一个有用的解决办法。

安装好的JAVA软件在内存的哪个文件夹里

JAVA软件运行的文件夹,默认是在c盘下的programs files。

很多软件都提供了自定义软件存放的位置,可以选择其他盘符。

java怎么将生成的文件放入内存?

这个要使用到内存流。BufferedOutputStream或者BufferedWriter。

文件的读取和写入都应该会了吧?普通的流读写都是直接从文件中读取或者写入到文件中的,而内存流则是把文件中的内容写入到电脑内存或者是从内存中读取出来。具体的话就是把输出流替换成BufferedOutputStream或者BufferedWriter即可

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/290953.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-24 13:13
下一篇 2024-12-24 13:13

相关推荐

  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • vue下载无后缀名的文件被加上后缀.txt,有后缀名的文件下载正常问题的解决

    本文旨在解决vue下载无后缀名的文件被加上后缀.txt,有后缀名的文件下载正常的问题,提供完整的代码示例供参考。 一、分析问题 首先,需了解vue中下载文件的情况。一般情况下,我们…

    编程 2025-04-29
  • Python创建分配内存的方法

    在python中,我们常常需要创建并分配内存来存储数据。不同的类型和数据结构可能需要不同的方法来分配内存。本文将从多个方面介绍Python创建分配内存的方法,包括列表、元组、字典、…

    编程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件并生成完整的图像

    OBJ格式是一种用于表示3D对象的标准格式,通常由一组顶点、面和纹理映射坐标组成。在本文中,我们将讨论如何将多个OBJ文件拼接在一起,生成一个完整的3D模型。 一、读取OBJ文件 …

    编程 2025-04-29
  • 为什么用cmd运行Java时需要在文件内打开cmd为中心

    在Java开发中,我们经常会使用cmd在命令行窗口运行程序。然而,有时候我们会发现,在运行Java程序时,需要在文件内打开cmd为中心,这让很多开发者感到疑惑,那么,为什么会出现这…

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29

发表回复

登录后才能评论