题外话:很久没有写博客了,事情颇多,今天空闲下来,学习一下顺便写一下自己的了解,机会总是留给有准备的人,所以平常一定要注意知识的巩固和积累。知识的深度也要有一定的理解,不比别人知道的多,公司干嘛选你?

一、JVM结构

1.类加载器(ClassLoader):在JVM启动时或者在类运行时将需要的class加载到JVM中。

2.执行引擎:负责执行class文件中包含的字节码指令(执行引擎的工作机制,这里也不细说了,这里主要介绍JVM结构);

3.内存区(也叫运行时数据区):是在JVM运行的时候操作所分配的内存区。运行时内存区主要可以划分为5个区域,如图

  • 方法区(Method Area):用于存储类结构信息的地方,包括常量池、静态变量、构造函数等。虽然JVM规范把方法区描述为堆的一个逻辑部分, 但它却有个别名non-heap(非堆),所以大家不要搞混淆了。方法区还包含一个运行时常量池。
  • java堆(Heap):存储java实例或者对象的地方。这块是GC的主要区域(后面解释)。从存储的内容我们可以很容易知道,方法区和堆是被所有java线程共享的。
  • java栈(Stack):java栈总是和线程关联在一起,每当创建一个线程时,JVM就会为这个线程创建一个对应的java栈。在这个java栈中又会包含多个栈帧,每运行一个方法就创建一个栈帧,用于存储局部变量表、操作栈、方法返回值等。每一个方法从调用直至执行完成的过程,就对应一个栈帧在java栈中入栈到出栈的过程。所以java栈是现成私有的。
  • 程序计数器(PC Register):用于保存当前线程执行的内存地址。由于JVM程序是多线程执行的(线程轮流切换),所以为了保证线程切换回来后,还能恢复到原先状态,就需要一个独立的计数器,记录之前中断的地方,可见程序计数器也是线程私有的。
  • 本地方法栈(Native Method Stack):和java栈的作用差不多,只不过是为JVM使用到的native方法服务的。

最新文章

  1. springmvc之格式化要显示的小数或者日期。
  2. amgular $q用法
  3. Jquery-easyUI-datagrid参数之 queryParams
  4. Core Java Volume I — 3.5. Operators
  5. c++ 设计模式4 (Strategy)
  6. 过滤器(Filter)
  7. Cracking the coding interview--Q1.5
  8. PLSQL笔记
  9. 使用RouteDebugger对MVC路由进行调试
  10. centos编译内核:no space left on device 解
  11. Webpack模块加载器
  12. Java笔记(二十) 注解
  13. 全网最详细的Centos7系统里安装Openresty(图文详解)
  14. ubuntu安装和分区方案
  15. docker 下运行 postgresql 的命令
  16. 测试那些事儿—web测试方法之输入框
  17. java中HashMap的基本方法使用
  18. docker in all
  19. 1004: 不明飞行物(ufo)
  20. Loadrunner集合点Rendezvous知识

热门文章

  1. C++定义和初始化数组以及memset的使用(转)
  2. django-签名加密模块It's dangerous--加密token
  3. iptables的使用
  4. Windows环境下设置Tomcat8以服务的形式运行,不再打开Tomcat窗口
  5. 手工部署yugabyte的几点说明
  6. 开源项目 11 Ionic Zip
  7. android 自己制作Jar包 和 修改 现成的 Jar包文件
  8. (转)React事件处理函数必须使用bind(this)的原因
  9. Mybatis(上)
  10. NoSql数据库Redis系列(6)——Redis数据过期策略详解