《深入理解JVM》学习笔记(1)

来源:互联网 发布:中学生直播软件 编辑:程序博客网 时间:2024/05/16 11:10
第一章:走近Java
       在java中各种硬件平台上的Java虚拟机,和JavaAPI类库统称为JRE;
       Java程序设计语言与JRE构成了JDK;
       java技术体系包括:1、Java程序设计语言;
                                        2、各种硬件平台上的Java虚拟机;
                                        3、Java API类库;
                                        4、Class文件格式;
                                        5、来自商业机构和开源社区的第三方Java类库;
 
       如今,应用系统日益复杂,不同语言发挥各自的特长已经是一种趋势,不同语言混合完成一个系统已经是很平常的事情,例如PHP负责网站,Java负责后台业务逻辑,数据库使用mysql,从而构成一个常见的电商或网站;
  
       注解:Java语言的劣势在近来越来越明显,如运行效率不高,必须依靠虚拟机等,从而让人们越来越越专注于其优势,只是使用其优势,和其他语言进行优势互补等。
      

第二部分:自动内存管理机制

第二章:Java内存区域与内存溢出
       2.1概述
         java不需要对内存进行操作,不容易出现内存泄露和内存溢出等问题,由虚拟机来管理内存,缺点在于除了问题不容易找到解决方案;     
       2.2运行时数据区域
       这里对java运行时的数据所分的区域的进行表述并简单做出简要描述:
         如图:
         
      在上图中的方法区是指:
      2.2.1  程序计数器(Program Count Register):从英文的表面意思可以得到这块区域是对程序数量的登记区域, OK,那就要明白,是什么程序在这里,数量是什么数,登记的机制是什么?   
       在《深入理解JVM》中,程序计数器是一块很小的区域,它可以被看作是当前线程所执行的字节码的行号指示器。字节码解释器是通过改变这个计数器的数值来选取下一条需要执行的字节码指令,循环,跳转,分支,异常处理,线程回复等基础功能都是依赖这个计数器来完成。
       由于在Java虚拟机中多线程是依靠线程轮流切换并分配处理器执行时间来实现的;在任何一个确定的时刻,一个处理器只会且只能处理一个线程;因为,为了将线程切换恢复到正确的可执行状态也就是执行位置,就需要计数器来计算其单独为这个线程计数,并由单独的内存来存储这个数值;这样各个线程之间互不影响,内存独立等。

       2.2.2 虚拟机栈(VM Stack)
       java虚拟机栈,也就是通常所说的栈(Stack),用来存放方法调用过程中以及调出的信息等,简单的说就是Java执行方法的内存模型,注意这句话中执行方法,内存模型。它是线程私有的,生命周期与线程相同。
      根据《深入理解JVM》,可以画出下图:
      

     待更新。
0 0
原创粉丝点击