JVM学习之路一

JVM学习之路一

初识;java程序在机器中的执行过程(我的理解)
java源代码 -> 二进制字节码-> 通过ClassLoader 加载进入jvm内存结构。然后
类一般存放在方法区中,类中所生成的对象存放在堆中,堆中的对象需要调用方法,就会用到虚拟机栈、程序计数器和本地方法栈。方法执行中的内行代码,是由执行引擎中的解释器进行逐行解释执行,对于方法中的热点代码(频繁调用),会由即时编译器进行优化执行,执行引擎中存在GC垃圾回收机制,会对堆中不再引用的对象进行垃圾回收。其中方法中存在一些java语言无法实现的,就需要调用操作系统底层的方法进行实现。
二进制字节码组成:类的基本信息、常量池、类方法定义包含虚拟机指令

javap -v 字节码文件 反编译

JVM结构图
程序计数器:
作用:记住下一条JVM指令的地址
特点:1、线程私有,线程间不共享
2、不存在内存溢出
虚拟机栈:每个线程运行所需要的内存空间,每个栈由多个栈帧组成,对应着每次方法调用时所需要的内存,每个线程只能有一个活动栈帧,即当前执行的栈帧( 栈:每个线程运行需要的内存空间 栈帧:线程运行需要的内存空间),
本地方法栈: 在java虚拟机调用本地方法时,需要给本地方法提供内存空间,不是java编写的 (java不能直接与操作系统打交道)---- 本地方法运行时占用的内存 本地方法栈
native 基本都是用C /C++ 实现的
~~栈内存溢出 ?
1、栈帧过多导致栈内存溢出 无限调用 方法的递归调用
2、栈帧过大,导致栈内存溢出 stackOverflowError 这是个错误
线程运行诊断
1、cpu占用过高
nohup 后台运行java 代码
定位问题 : top 检测cpu 内存的占用情况---- 查看进程占用
查找 具体线程 ps H(打印进程数) -eo pid , tid(线程) , %cpu |grep
jstack 进程ID
注 : ps 查询出的进程号 是十进制 jstack 查找出的是十六进制
2、程序运行很长时间 无结果 ---- 代码死锁
jstack 进程号 存在进程间的相互争夺资源,这里就需要考虑P、V原语操作。
栈 - 面试题
1、垃圾回收是否涉及栈内存?
答:不涉及,因为栈内次执行完方法,都会自动出栈,垃圾回收主要是针对堆中的对象的
2、栈内存是分配的越大越好吗?
答:不是, 执行虚拟机参数(指定栈内存大小-Xss size)。内存有限,栈内存划分的大了,只会对递归的范围进行影响,大了会使内存中的线程数减小
3、方法内的局部变量是否安全
如果方法内的局部变量引用了对象,并逃离了方法的作用范围,线程是安全的,反之则是不安全的
图示:
在这里插入图片描述
:JVM内存结构中,虚拟机栈,程序计数器,本地方法栈都i是线程私有的,而堆是线程间共享的,创建对象(使用new),都需要在堆内存中分配空间。
堆中是由垃圾回收机制的,而栈,计数器中是没有的。
堆空间的溢出:大概率都是无限创建对象,而忘记了放弃引用。都觉得有垃圾回收机制,但是忘记了,需要解除其引用才会出现这个问题。
堆内存溢出的集中诊断命令:JPS — 查看当前运行的java程序的进程号
Jmap - heap 进程号 查看当前进程占用堆内存情况
Jconsole — 进入图形化界面 可以同时观看堆、CPU 等占用情况。
执行GC ,前提是对象已经不再有引用 ,手动执行会清除,但是想更清楚看到就需要jvisualvm这个工具也是图形化界面的形式,其中有堆deap(堆转储) ,进行详细的内存占用情况(快照-那一时刻的占用情况)
方法区:是所有java虚拟机线程共享的区域。存储了类结构相关的信息,包括成员变量,方法数据,以及成员方法以及构造方法,特殊方法的代码,同时也包括运行时常量池。
方法区是在虚拟机启动时被创建。逻辑上是堆的组成部分,概念上根据实现的jvm方式不同而不同,具体不强制方法区位置。 总体上说方法区只是一个规范,oracle1.6以前叫永久栈,在1.8以后叫做元空间,这些都是它的一种实现。
方法区也存在内存溢出问题,也会抛出OutOfMEmoryError的错误信息。
内存溢出问题 - 类对象加载进入内存太多 元空间就会溢出
-XX:MaxMetaspaceSize=8m 这个 设置最大元空间大小。
元空间内存溢出 -> OutOfMEmoryError:Metaspace
实际开发中的场景: spring框架,mybatis框架 — cglib 生成代理类,springAop核心,mybatis产生mapper接口实现类。
图示:
在这里插入图片描述这两天就学了这么多,总结了一哈,各路大神,多多指教。

发布了11 篇原创文章 · 获赞 8 · 访问量 1586

猜你喜欢

转载自blog.csdn.net/weixin_44627238/article/details/104336891