zoukankan      html  css  js  c++  java
  • JVM读书笔记

    1 概念

      java virtual machine为java虚拟机,运行使用jdk中编译器编译的java程序。

    2 JVM内存模型

      程序计数器:线程私有。当前线程正在执行的行号指示器。

      Java虚拟机栈:线程私有。即将运行的java方法创建的区域。

      本地方法栈:线程私有。即将运行的本地方法创建的区域。

      堆:线程共享,存放对象。

      方法区:线程共享。存放加载的,类、常量、静态变量、即时编译器编译后的代码。

      线程私有:生命周期和所属线程一样。

      线程共享:jvm启动时创建,停止时销毁时

    3 类加载过程

    延伸:

    类显示加载

    类隐示加载

    4 老生代和新生代

    4.1 堆内存=老生代+新生代+持久代

      老生代:存放生命周期比较长的对象。gc经过多次垃圾回收没有被回收的对象或者大对象。

      新生代:存放新生成的对象。

    4.2 各个内存分配

      持久代一般固定为64M,新生代一般占据堆内存1/3,老生代为(堆内存-新生代内存-持久代内存)

    5 如何设置jvm堆内存

    5.1 idea设置jvm堆内存

      找到idea的bin目录

      确定jdk版本,根据版本选择不同的配置文件。

      修改配置:idea.exe.vmoptions、idea64.exe.vmoptions

    5.2 linux设置jvm堆内存

      设置环境变量/etc/profile JAVA_OPTIONS

      -Xms 堆内存初始分配值,默认为物理内存的1/64

      -Xmx 堆内存最大值,默认为物理内存的1/4

      -Xmn 新生代内存最大值

    6 jvm问题排查

      jstack:用于打印指定的java进程ID或core file 或远程调试服务的java堆栈信息

      jmap:生成dump文件,查询finalize执行队列,java堆和永久代的详细信息,如当前使用率,当前使用的收集器等。

    参考文档:《深入Java虚拟机(原书第2版).pdf》


    如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!

  • 相关阅读:
    我不会用 Triton 系列:Model Warmup 的使用
    我不会用 Triton 系列:Python Backend 的使用
    C++11 Memory Order
    我不会用 Triton 系列:Triton 搭建 ensemble 过程记录
    我不会用 Triton 系列:Stateful Model 学习笔记
    CUDA 概念汇总
    字符串的扩展
    梦学谷会员管理系统
    普希金-假如生活欺骗了你
    变量的解构赋值
  • 原文地址:https://www.cnblogs.com/guobm/p/9950638.html
Copyright © 2011-2022 走看看