1、类加载子系统

  负责从文件系统或者网络中加载Class信息,加载的信息存放在一块称之为方法区的内存空间里。

2、方法区

  存放类信息、常量信息、常量池信息、包括字符串字面量和数字常量等,方法区的大小决定了系统可以保存多少个类。方法区可以理解为永久区(Perm)。

3、Java堆

  在Java虚拟机启动的时候建立java堆,它是java最主要的内存工作区域,几乎所有的对象实例都存放到java堆中,堆空间是所有线程共享的。

4、直接内存

  Java的NIO库允许Java程序使用直接内存,从而提高性能,通常直接内存速度会优于java堆,读写频繁的场合可能会考虑使用。

5、Java栈

  每个虚拟机线程都有一个私有的栈,一个线程的java栈在线程创建的时候被创建,java栈中保存着局部变量、方法参数、java的方法调用、返回值等。一个栈一般由三个部分组成:局部变量表、操作数和帧数据区。

6、本地方法栈

  任何本地方法接口都会使用某种本地方法栈。当线程调用Java方法时,虚拟机会创建一个新的栈帧并压入Java栈。然而当它调用的是本地方法时,虚拟机会保持Java栈不变,不再在线程的Java栈中压入新的帧,虚拟机只是简单地动态连接并直接调用指定的本地方法。当地方法接口需要回调Java虚拟机中的Java方法,在这种情况下,该线程会保存本地方法栈的状态并进入到另一个Java栈。

7、垃圾回收系统

  负责回收已经无用的对象的内存空间,从而避免内存渗漏体的产生,节省内存资源,避免程序代码的崩溃。

8、PC寄存器

  每个线程启动的时候,都会创建一个PC(Program Counter,程序计数器)寄存器。PC寄存器里保存有当前正在执行的JVM指令的地址。 每一个线程都有它自己的PC寄存器,也是该线程启动时创建的。保存下一条将要执行的指令地址的寄存器是 :PC寄存器。PC寄存器的内容总是指向下一条将被执行指令的地址,这里的地址可以是一个本地指针,也可以是在方法区中相对应于该方法起始指令的偏移量。

9、执行引擎

  负责code的执行。

最新文章

  1. iOS 按钮上的标题设置向左向右对齐的方法
  2. C# 如何将List拆分成多个子集合
  3. [转]数据恢复 文件恢复工具 DiskGenius v4.9.1 绿色专业版及单文件
  4. C语言:将结构体存放到文件中
  5. ##DAY14——StoryBoard
  6. Php 关于构造函数
  7. 线关节(Line Joint)
  8. android在myeclipse上创建的项目各种报错
  9. 【转】Memory gates checking failed because the free memory***解决办法
  10. MyBatis框架概述
  11. TortoiseSVN版本管理的注意点
  12. [转帖]tar高级教程:增量备份、定时备份、网络备份
  13. 通过java实现解压zip,rar的代码
  14. 如何正确的使用Ubuntu以及安装常用的渗透工具集.
  15. orcale 把日期当做查询条件
  16. NSNotificationCenter实现原理
  17. stm32 DMA配置
  18. Ubuntu下NAT模式配置静态IP
  19. HTTP vs HTTPS
  20. 报错分析---->jsp自定义标签:Unable to load tag handler class

热门文章

  1. 第六周课程总结&试验报告(四)
  2. 100+ Python挑战性编程练习(1)
  3. 自带的simple认证
  4. Java初始和环境搭建
  5. 同一路由带参刷新,以及params和query两种方式传参的异同
  6. mysql联合索引如何创建
  7. POJ 3249 Test for Job (拓扑排序+DP)
  8. 缓存---CDN(内容分发网络)
  9. RabbitMQ入门教程(十五):普通集群和镜像集群
  10. 树莓派3b+下一些常用的命令(Debian下)