JVM学习框架及内存结构初略理解

来源:互联网 发布:nginx中文 编辑:程序博客网 时间:2024/06/17 23:32

JVM作用

      JAVA由于有虚拟机的特性,很多东西是编译器自己做的,不相C语言 内存的分匹配和释放需要人为控制, JVM有垃圾回收器自动的进行处理,所以很多情况下,这种处理并不能让我们满意。为了解决这个问题还有线程处理的问题,我们需要学习JVM来处理相关异常(内存溢出)以及自定义JDK。

JVM学习的知识框架

    1、了解JAVA虚拟机的发展  特别是Hotsop
    2、了解其自动内存管理结构(垃圾回收器)
    3、虚拟机如何执行程序
    4、Java程序如何从源码到字节码   字节吗到机器码
    5. JAVA里提供了高效的线程操作,但是还是不够, 我们可以通过JVM自己去搞 高效的并发操作
 
    2.3是理论基础  (哪里发生的溢出异常)
    4.5 运用 理论进行实践 (如何解决内存溢出的异常 还有自定以JDK)

目前我学JVM,达到的目标:

   1、构建相关的学科框架

    2、着重去理解,第二章。内存管理里的内存结构 帮助后续编程;四五章系统优化,暂不管


相关知识导图和模型如下:

内存结构:

    虚拟机栈:  存放对象引用包括各种基本数据类型(int .对象引用)  
    栈帧:有关方法的各种信息,局部变量 ,如何去调用方法 
    本地本地方法栈:作用和栈帧差不多,只不过是存放虚拟机native方法的
    堆:  存放各种对象,数组的数据   方法区:  类加载进来之后,类信息(字段 方法 接口)静态量,常量(逻辑上的划分)常量池:运行时期也可以存放相关数据
    程序计数器:线程开始时,JVM依据这个程序计数器进行操作 

    以上是虚拟机内部的结构,外部还有执行引擎和本地库接口,和其他软件进行相关连接


与相关线程的知识:

    堆和方法区是数据共享的
    虚拟机栈  本地方法栈 程序计数器是私有的 

GC概念:

       GC (GarbageCollection)是垃圾回收机制,在JAVA中开发人员无法使用指针来自由的管理内存,GC是JVM对内存(主要就是对象)进行管理的方式,GC使得JAVA开发人员摆脱了繁琐的内存管理工作,让程序开发更有效率。
      对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。但是,为了保证GC能够在不同平台实现的问题,Java规范对GC的很多行为都没有进行严格的规定。例如,对于采用什么类型的回收算法、什么时候进行回收等重要问题都没有明确的规定。因此,不同的JVM的实现者往往有不同的实现算法。这也给Java程序员的开发带来行多不确定性


相关一些内存结构图片,帮助理解其JVM的内存结构:























原创粉丝点击