欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java学习系列 jvm必知必会

程序员文章站 2024-02-17 17:45:16
...

java学习系列 jvm必知必会jvm的java的关键知识点,对于线上查问题和性能调优都是必须要熟练运用jvm。
特此整理一些必须了解的JVM的知识点,大多是基于自己的基础上和网上一些资料整理的。
参考blog
https://www.cnblogs.com/shenjianjun/p/9512949.html
https://www.processon.com/special/template/5cff7021e4b0a65d8095dca3#map
https://www.cnblogs.com/lfs2640666960/p/9297176.html
然后详细解释一下一下这些问题。

1、线上部署时出现内存溢出该如何处理

第一步:top查看当前进程的内存占用情况,然后shift+M安装内存占用情况进行排序,查看占用内存比较大的进程。
第二步:利用jstat查看虚拟机的gc情况 todo #jstat命令详解
第三步:生成dump文件,通过dump文件查看当时内存对象相关的信息
生成dump文件的两种方式
1、使用jmap命令直接生成:jmap -dump:format=b,file=heap.prof 17561

	format=b     表示生成二进制类型的dump文件;
	file=        后面写的四输出的dump文件路径;
	1756         jvm进程ID;

详细操作请参考jmap生成dump文件
2、todo
第四步:使用IBM Heap Analyzer进行分析,查找定位内存泄漏的问题代码

2、Java中堆和栈的内存区别

JVM内存的划分有五个

   1.   寄存器
   2.   本地方法区
   3.   方法区
   4.   栈内存
   5.   堆内存

栈内存:栈内存首先是一片内存区域,存储的都是局部变量,凡是定义在方法中的都是局部变量(方法外的是全局变量),for循环内部定义的也是局部变量,是先加载函数才能进行局部变量的定义,所以方法先进栈,然后再定义变量,变量有自己的作用域,一旦离开作用域,变量就会被释放。栈内存的更新速度很快,因为局部变量的生命周期都很短。

堆内存:存储的是数组和对象(其实数组就是对象),凡是new建立的都是在堆中,堆中存放的都是实体(对象),实体用于封装数据,而且是封装多个(实体的多个属性),如果一个数据消失,这个实体也没有消失,还可以用,所以堆是不会随时释放的,但是栈不一样,栈里存放的都是单个变量,变量被释放了,那就没有了。堆里的实体虽然不会被释放,但是会被当成垃圾,Java有垃圾回收机制不定时的收取。
具体详情请看java中堆和栈

3、JVM 内存划分与垃圾收集算法:fullGC与youngGC

4、JVM内存溢出的几种情况

5、线上如何排查JVM内存溢出问题

6、服务器CPU占用特别高,怎么查看

7、JVM为什么要增加元空间

8、Java如何查看问题,并进行jvm调优

9、G1垃圾收集器解释和特点

10、在不同情况下怎么选取垃圾回收器

11、jvm内存模型以及详解

12、class初始化过程

13、类加载模型和双亲委派机制

14、没有使用双亲委派模型的地方

15、java的各种常量池

16、jps、jstat、jinfo、jmap、jstack、jconsole、jprofile命令详解

17、java如何实现反射

18、java如何实现lambda表达式

19、JVM的逃逸分析

20、Java的线程栈

21、类的实例化顺序

22、JVM 中一次完整的 GC 流程

23、OOM错误,*错误,permgen space错误

相关标签: 【java学习专栏】