zoukankan      html  css  js  c++  java
  • 《Java虚拟机JVM故障诊断与性能优化》读书笔记(未完待续)

    前言:

      对于JVM学习用处的理解:我们程序员写的代码,虽说是放在服务器(linux)系统上的。但是很多时候,受JVM的影响,其实程序并没有发挥出服务器的最大性能。这时候,JVM就成为了瓶颈了。有瓶颈就要想办法优化解决,这和程序内部的优化一样。区别是,程序的优化一版是重构代码,而JVM的优化,往往是通过修改配置参数。

    1.虚拟机基本结构:

      1)方法区(永久区、元空间):类加载子系统(加载class信息)、常量

      2)java堆:java对象实例(所有线程共享)。【存数据】

      3)直接内存:NIO库允许使用系统的内存空间(不受Xmx指定的最大堆大小)

      4)垃圾回收系统:GC

      5)java栈:局部变量、方法参数,在线程创建时创建,每个线程一个。【存方法、线程相关的数据】

        5.1)通过-Xss指定最大栈空间

        5.2)是先入后出的堆栈结构

        5.3)超过请求的栈的深度,会抛出StackOverflowError的栈溢出错误

      6)本地方法栈:与java栈类似,不同的是一个调用JAVA方法,一个调用本地方法(一般由C语言写)

      7)PC寄存器:每个线程的私有空间,如果是JAVA方法,则会记录当前指令。如果是本地方法则是undifined。

       8)执行引擎:负责执行字节码。(现代虚拟机为了提高效率,会使用即时编译技术,编译成机器码后执行)

     2.对象去哪儿:Java堆辨清

      1)java堆,分新生代(eden、s0、s1),老年代。

      2)大部分情况,对象首先在eden区,然后一次新生代GC后,会进入s0或s1。之后,每次新生代GC后,它的年龄加一。达到一定条件后,被认为是老年代对象,进入老年代

     

  • 相关阅读:
    增量+全量备份SVN服务器
    日常小命令集锦
    filebeat输出到kafka
    在Logstash的配置文件中对日志事件进行区分
    NFS服务器简易安装
    记录一次MySQL数据库CPU负载异常高的问题
    使用Spring的jdbcTemplate进一步简化JDBC操作
    Stream 和 byte[] 之间的转换
    C# 文件转byte数组,byte数组再转换文件
    groupbox里面添加Form
  • 原文地址:https://www.cnblogs.com/xujanus/p/11539836.html
Copyright © 2011-2022 走看看