jvm面试常问

发布时间 2023-03-23 13:45:24作者: 剑阁丶神灯

1 设置jvm内存大小xmx, xms, Xss

-Xss:规定了每个线程虚拟机栈及堆栈的大小,一般情况下,256k是足够的,此配置将会影响此进程中并发线程数的大小。

-Xms:表示初始化JAVA堆的大小及该进程刚创建出来的时候,他的专属JAVA堆的大小,一旦对象容量超过了JAVA堆的初始容量,JAVA堆将会自动扩容到-Xmx大小。

-Xmx:表示java堆可以扩展到的最大值,在很多情况下,通常将-Xms和-Xmx设置成一样的,因为当堆不够用而发生扩容时,会发生内存抖动影响程序运行时的稳定性

示例,由于处理inc*99c文件时, 文件大小两百多M, 而jvm中实际内存设置的比较小,需要获取文件尾行数据, 代码中是一次性获取文件流进来的,所以超过了报oom

解决方案设置xmx和xms, 以及通过重置流去获取文件尾行数据

2. jdk自带的visualvm可视化性能监控工具

示例: 当时解析authlog文件时, 由于文件有2个G,解析耗时半个小时,通过查看visualvm监控工具,发现日志打印类比较耗时,

因为代码中每次执行打印则会通过发射去创建日志对象,通过优化, 改成全局静态的去创建日志; 

3 通过jmap , jstack命令去