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后,它的年龄加一。达到一定条件后,被认为是老年代对象,进入老年代

     

  • 相关阅读:
    作用域 + this指向 的一道没面试题
    找出数组中最大的值
    统计数组中每个值出现的次数, 统计对象中每个字符出现的次数
    uniapp在h5 和 APP 端兼容性 bug 解决方案
    数组去重的常用方法,利用Promise实现函数按序执行
    momentjs实现距离当前时长并且回现中文效果
    SQL server 上机练习题
    JS 9
    JS 8
    JS 7
  • 原文地址:https://www.cnblogs.com/xujanus/p/11539836.html
Copyright © 2011-2022 走看看