• JVM的干货


    JVM:

    用JVM来运行程序的时候,需要内存空间。程序是一个Java class文件,类的定义放在方法区中,程序在运行中会产生各种各样的对象,对象就存在于堆中,程序在执行的时候,其实是启动多个线程来执行,main就是一个主线程,来调用方法,方法中存在局部变量,局部变量放在栈,栈中分成线程存放,每个线程都有自己的栈空间,所以在栈中线程私有,堆是线程共享的。栈空间可能会溢出,常常出现递归嵌套的程序中,因为要不断压栈,栈的深度是有限的,可能会造成溢出。

    垃圾回收:

    方法区(线程共享的区域):类信息 常量  静态变量 和编译器编译之后的信息

    堆:对象(新生代  老年代 )

    根据对象的存活的年龄划分新生代和老年代,把新生代幸存的放到from区,不断进行来及回收,当死不了的时候放到老年代中,to区是用来复制  腾挪使用。 默认 8:1:1 大对象直接进入老年代

    判断对象是否可用:根节点搜索算法

    垃圾回收算法:标记清除   标记整理   复制

    参数:

    -xmx最大堆内存

    -xms开始堆内存

    -xmn年轻代的大小

    -Xss栈的大小

    … 年轻代和老年代的大小(默认4:1)

    … 年轻代中的比例  8:1:1

    .. 设置年龄(进入老年代的时间  默认值15)

    在JDK的bin目录下可以使用jconsole和jvisualvm来查看Java程序的相关信息。可以看到一些详细的信息。

    程序测试JVM:

    1. 设置堆小一些 不断创建对象 添加到list :堆溢出
    2. 线程死循环和一个线程无限等:查看逻辑错误和无限等待问题
    3. 死锁:查看问题
    4. 当堆溢出的时候(JVM参数设置) 可以把溢出的错误信息设置到某个文件下作为快照(需要使用工具打开进行分析)
  • 相关阅读:
    第三个实验代码
    20165104孟凡斌-第五周作业
    20165104孟凡斌-第四周作业
    20165104孟凡斌-第二次java考试课下作业
    20165104孟凡斌-第三周作业
    20165104孟凡斌-第二次JAVA作业
    20165104孟凡斌-第一次Java考试课下作业
    2018-2019-1 《信息安全系统设计基础》 20165235 实验五 通信协议设计
    2018-2019-1 20165235 实验四 外设驱动程序设计
    20165235 实现pwd功能
  • 原文地址:https://www.cnblogs.com/hds-study-blogs/p/6904266.html
Copyright © 2020-2023  润新知