一、JAVA虚拟机------JVM自动内存管理

JVM自动内存管理

  • 一、JAVA内存区与内存溢出
    • 1.1 概述
    • 1.2 运行时数据区
      • 1.2.1 程序计数器 (Program Counter Register)
      • 1.2.2 Java虚拟机栈(Java Virtual Machine Stack)
  • TEMP:下班 明天继续写
  • 二、垃圾收集器与内存分配策略
  • 三、虚拟机性能监控、故障处理工具

一、JAVA内存区与内存溢出

1.1 概述

java程序员在JVM自动内存管理机制的条件下,不需要为每一个new的操作去写配对的delete/free代码,虽然这样可以省去很多麻烦,但是正是因为我们吧对象的创建交给JVM去管理,所以一旦出现内存泄漏和溢出的问题,如果我们对jvm了解的不深入那我们在修正这些问题是会遇到很多麻烦

1.2 运行时数据区

上一张大家都见过的图

一、JAVA虚拟机------JVM自动内存管理_第1张图片

1.2.1 程序计数器 (Program Counter Register)

  1. 程序计数器是一块占用内存比较小的空间,可以看成是当前线程所执行的字节码的行号指示器(可以用电梯的指示楼层号信号灯来比喻),字节码解释器工作时就是通过改变当前程序计数器的值来选取下一条要执行的字节码指令,程序计数器是程序控制流的指示器,
    分支、循环、跳转、异常处理、线程恢复等基础功能都是依赖程序计数器来完成的。Java虚拟机的多线程是通过线程轮流切换、分配处理器的执行时间来实现的,在任意一个确定的时间内 一个处理器只会执行一个线程(多核处理器理解成为一个内核)中的指令,因此为了线程切换后能恢复到正确的执行位置,所以每个线程都有一个独立的程序计数器,每个线程的计数器互不影响,独立内存。所以也被称为线程私有的

1.2.2 Java虚拟机栈(Java Virtual Machine Stack)

  1. 与程序计数器一样 Java虚拟机栈也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java的方法执行的线程模型:每个方法被执行的时候都会同步的创建一个栈帧用于储存局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从被调用到执行结束的过程,也就是栈帧从入栈到出栈的过程
  2. 很多程序员都把JVM的内存笼统的归结为 “堆内存”和“栈内存”,其实本质上JVN的内存区域比这个笼统的说法要复杂很多,这也说明了大家对 “堆内存”和“栈内存”非常感兴趣~~ 其实“”通常就是指的Java虚拟机栈,但是更多的情况下是指的Java虚拟机中的局部变量表的部分
  3. 局部变量表中存放了可知的JAVA 基础数据类型 (boolean 、byte 、char、 short、int、float、long、double)、对象引用

TEMP:下班 明天继续写

二、垃圾收集器与内存分配策略

三、虚拟机性能监控、故障处理工具

你可能感兴趣的:(JVM)