jvm调优入门学习之栈内存

这个是我在B站学习的笔记记录。有可能会有不正确的地方。

  1. 栈内存溢出:栈内存溢出的情况有两种,第一种是栈帧过多导致,第二种是栈帧多大。

    今天主要演示一下栈帧过多导致出现内存溢出的情况。执行如下的代码块:
     
    private static int count = 0;
    
        public static void main(String[] args) {
            try {
                method();
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("======"+count);
            } finally {
                System.out.println("--------"+count);
            }
        }
    
        private static void method(){
            count++;
            method();
        }
    我们递归调用method这个方法并且没有结束条件。运行结果为:



    会发现一直执行可23359次method方法,接下来我们手动将栈内存的大小调整小一点(-Xss是用来调整栈内存的大小)。





    然后在执行一次上面的代码


     
  2. cpu占用过高分析

    有如下一段代码,启动了一个线程然后执行死循环:



    将代码部署到Linux系统中去(这个步骤csdn中有很多就不写了) ,然后执行java -cp TestClass.jar   包名+TestClass

    然后执行top命令查看系统的cpu占用率,会发现cpu的占用率特别高




    或者执行ps H -eo pid,tid,%cpu  | grep 23492命令查看  



    然后执行 jstack 23492命令,同时将23502这个转换成16进制的数据5BCE‬,会发现线程的状态处于RUNABLE,同时cpu占用率高的具体原因是TestClass这个类的第10行代码,检查第10行代码发现,正是while死循环。则问题解决。

 




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值