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

 

 

 

 

 

posted @ 2019-09-18 09:54  系统攻城狮  阅读(457)  评论(0编辑  收藏  举报