1.JVM的构成
JVM虚拟机主要是由三个部分构成,分别是类加载子系统、运行时数据区、执行引擎。
类记载子系统
Java虚拟机把描述类的数据从Class文件加载到内存民兵队数据进行校验、转换解析和初始化,最终形成可以
被虚拟机直接使用的Java类型。
运行时数据区
Java虚拟机在执行Java程序的过程中会把它锁管理的内存划分为若干个不同的数据区域。
这些区域有各自的用途,一级创建和销毁的时间,有的区域随着虚拟机进程的启动而直存在,有些区域则是
依赖用户线程的启动和结束而建立和销毁。
程序计数器:记录没一个线程的执行位置
javap -c Test1.class >t1.txt,将class的汇编编码输出到t1.txt中,其中code的编号对应的是
计数器的编号。
栈:描述的是java方法执行的线程内存模型,一个方法对应一个栈帧,一个栈帧中,局部变量表,动态链接,
方法出口,虚拟机的栈和线程是同步的。
动态链接:java中调用redis服务
操作数栈:
局部变量表:
Java堆区:java堆是被线程共享的一块区域。
堆内存中分为年轻代、老年代、永久区。
2.jvm的运行参数
标准参数java -version java -Dstr/-Dserver.port
-X参数 -Xms
-XX参数(使用率高)
-XX:newSize年轻代大小
布尔类型
-XX:+DIsableExplicitGC手动调用gc操作
非布尔类型
-Xms与-Xmx分别是设置jvm的堆内存的初始大小和最大大小。
-Xmx2048m= -XX:MaxHeapSize,设置jvm最大对内存为2048M
-Xmx512m = -XX:InitialHeapSize,设置jvm处室对内存大小为512m
一般设置为一样大,适当利用服务器资源,能让程序运行的更快,
3.查看正在运行的程序的参数
jps -l查看运行程序的编号
jinfo -flags 10108查看10108对应的启动参数
jinfo -flag MaxHeapSize 10108查看具体某一个参数
jstat查看堆内存各部分的使用量,占用的空间,运行的时间
jstat -class 10108
jstat -gc 10108查看垃圾回收器的情况
4.内存溢出的定位与分析:不断将数据写入一个集合中,出现了死循环,读取超大的文件等,都可能造成内存溢出。
内存溢出:程序在申请内存时,没有足够的内存空间供其使用,出现out of memory
内存泄露:程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,内存泄露堆积后果很严
重
,无论多少内存,迟早会被占光。
-XX:+HeapDumpOnOutOfMemoryError
指定路径
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=F:\test.dump.hprof
在mat中分析定位问题
Jvm优化
最新推荐文章于 2024-04-17 16:03:21 发布