当前位置:首页 > 内存 > 正文

java内存占用情况

  • 内存
  • 2024-05-27 14:20:57
  • 6386

一、手机上java程序占用什么内存首先你必须明白,无论我们安装什么应用程序、系统或软件,它们都必须安装在存储介质上,即硬件上。
安装在手机上Java程序安装在内存空间中手机的一般情况下手机可以配备这个存储空间,也可以安装在SD卡上(这种卡通常称为存储卡)。
也可以使用,例如,对于mp3。该存储介质存储的内容量一般取决于其规格。
如果您的手机中有8G卡,则可以。安装Java程序、mp3等。
存储该数据的驱动器之间的关系如下:
1024KB=1MB
1024MB=1GB
您的MB要求实际上是指占用的空间。存储卡有多少空间?
如果一个mp3大约为5MB,那么一张8GB的卡可以存储8*1024/5=1638.4个mp3。


二、java跑1000万数据为什么占了十多个g的内存跑步的意义是什么?
Java内存回收是自动回收,如果GC不回收,实例可能会被持有,导致内存永远无法释放。


三、如何查看unix的java内存使用情况jmap(Linux独有,也是非常常用的命令)
观察正在运行的JVM的物理内存使用情况。
参数如下:
-heap:打印jvmheap的情况。
-histo:打印jvmheap的直方图。输出信息包括类名、对象数量、对象占用大小。
-histo:live:同上,但只允许存活对象
-permstat:输出永久代的堆情况
命令用法:
jmap-heap3409
新生代可以可以观察(EdenSpace、FromSpace、ToSpace)、tenuredGeneration、PermGeneration内存使用情况
输出内容:
jmap-histo3409|jmap-histo:live3409
可以观察到里面所有对象的状态堆(所有幸存对象的堆情况)。包括物体的数量和占用的空间。
输出内容:
编写一个脚本,可以快速找到占用堆最大的对象,这对于处理内存泄漏特别有效。
如果结果较多,可以使用以下命令将结果输出到文本文件。
jmap-histo3409|jmap-histo:live3409>
jinfo:可以输出和更改正在运行的Java进程的选项。
jps:与Unix中的ps类似,用于显示本地Java进程。可以查看本地运行的多个Java程序并查看其进程号。
jstat:监控VM内存的强大工具。可用于监视各种堆和非堆大小以及虚拟机内存中的内存使用情况。
jmap:输出给定Java进程(使用pid)内存中所有“对象”的状态(例如:生成了哪些对象及其数量)。
jconsole:一个JavaGUI监控工具,可以以图形形式显示各种数据。并可以通过远程连接监控远程服务器虚拟机。
详细说明:在使用这些工具之前,首先使用JPS命令获取每个JVM当前的进程号,然后选择要查看的JVM。
jstat工具特别强大,提供了众多选项来详细查看堆各部分的使用情况以及加载的类的数量。使用时需要添加要显示的进程的进程ID以及选择的参数。下面详细解释各个参数的含义。
jstat-classpid:显示加载的类数量、使用的磁盘空间等信息。
jstat-compilerpid:显示VM实时编译数量等信息。
jstat-gcpid:可以显示GC信息,查看GC次数和时间。最后五个元素分别是YoungGC的数量、YoungGC的时间、FullGC的数量、FullGC的时间和GC的总时间。
jstat-gccapacity:可以显示VM内存中三代(young、old、perm)对象的使用情况和占用大小。示例:PGCMN显示perm的最小内存使用量,PGCMX显示perm的最大内存使用量。PGC是当前新生成的perm的内存使用量,PC是之前的perm的内存使用量。其他的可以这样类比:OC就是旧时的纯占用。
jstat-gcnewpid:新对象信息。
jstat-gcnewcapacitypid:有关新对象及其占用情况的信息。
jstat-gcoldpid:有关旧对象的信息。
jstat-gcoldcapacitypid:旧对象信息及其占用情况。
jstat-gcpermcapacitypid:Perm对象信息及其占用情况。
jstat-utilpid:统计GC信息统计。
jstat-printcompilationpid:当前VM执行信息。
除了上述参数外,还可以同时添加两个数字。示例:jstat-printcompilation30242506每250毫秒打印一次,共6次。您还可以添加-h3以每三行显示标题。
Jmap是一个可以输出内存中所有对象的工具。它甚至可以将VM中的堆输出为二进制格式的文本。
命令:jmap-dump:format=b,file=
文件:存储路径及文件名
pid:进程号
?jmap-histo:livepid|less:堆中活跃的对象和大小
?jmap-heappid:显示堆使用信息
jinfo的用途:比较简单,就是可以输出和修改Java进程的运行参数运行。用法是jinfo-optpid。例如:要显示MaxPerm大小2788,可以使用jinfo-flagMaxPermSize2788。
Jconsole是一个用Java编写的GUI程序,用于监控虚拟机和远程虚拟机。它非常容易使用并且具有非常强大的功能。用法:只需在命令行中打开jconsole并选择进程即可。
JConsole中内存分区的说明。
EdenSpace(heap):该线程池中的大多数对象最初都分配了内存。
SurvivorSpace(堆):用于存储垃圾回收后尚未回收到Edenspace内存池中的对象。
TenuredGeneration(Heap):用于管理Survivorspace内存池中已经存在一定时间的对象。
PermanentGeneration(无堆):存储虚拟机自己的静态(反射)数据,如:B.类和方法对象。Java虚拟机共享此类数据。该区域分为只读和只读。
CodeCache(无堆):HotSpotJava虚拟机包含用于编译和存储本机代码(nativecode)的内存,称为“代码缓存”(codecache))称为是。
?jstack(检查JVM线程的运行状态,是否有死锁现象等):jstackpid:threaddump
?jstat-gcutilpid1000100:每1000ms统计100次GC状态
另外推荐内存对象工具MemoryAnalyzer查看jmapdump