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》


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

  • 相关阅读:
    shell脚本
    恋练有词
    sublime text3 的汉化
    c#中如何将int i=1;转化成string s="0001"
    SQL语句中DateAdd 函数说明
    ASP.NET弹出对话框
    C/C++避免头文件包含造成的重定义方法
    Android:保存图片到Sqlite数据库
    Ubuntu 12.04 配置
    C# 实现天气预报
  • 原文地址:https://www.cnblogs.com/guobm/p/9950638.html
Copyright © 2011-2022 走看看