Class文件格式:Java虚拟机中定义的Class文件格式。每一个Class文件都对应着唯一一个类或接口的定义信息,但是相对地,类或接口并不一定都得定义在文件里(譬如类或接口也可以通过类加载器直接生成)。我们只是通俗地将任意一个有效的类或接口所应当满足的格式称为“Class文件格式”,即使它不一定以磁盘文件的形式存在。

推荐:https://blog.csdn.net/tyyj90/article/details/78472986

再说内存结构前先说一下JVM的基本结构:

  1. 类加载器(ClassLoader):在jvm启动时或者在类运行时将需要的class文件加载到JVM中。详细后面我会在另写一篇博客介绍。
  2. 执行引擎:负责class文件中包含的字节码指令。(同上,详细后面我会在另写一篇博客介绍)。
  3. 内存区(也叫作运行时数据区):是在jvm运行的时候操作所分配的内存区。主要划分为以下5个区域:

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

常量池:

  即class文件常量池,是class文件的一部分,用于保存编译时确定的数据。

运行时常量池:

Java语言并不要求常量一定只能在编译期产生,运行期间也可能产生新的常量,这些常量被放在运行时常量池中。

类加载后,常量池中的数据会在运行时常量池中存放!

这里所说的常量包括:基本类型包装类(包装类不管理浮点型,整形只会管理-128到127)和String(也可以通过String.intern()方法可以强制将String放入常量池)

【补充】jdk 1.7后,移除了方法区间,运行时常量池和字符串常量池都在堆中。

4.本地方法接口:主要调用c 或c++实现的本地方法及返回结果。

至于直接内存,目前不是很清楚,后期再补。

路漫漫,加油!

无招胜有招之Java进阶JVM(一)相关推荐

  1. 【数据湖存储】数据湖的终极奥秘,无招胜有招

    作为海量数据存储与分析的重要承载方式的数据湖,从2011年概念诞生至今,已经发展了9个年头.而数据湖是什么?又能为数字化经济带来什么?<阿里云数据湖存储解决方案蓝皮书>将为您揭开数据湖的终 ...

  2. 无招胜有招——面向对象设计模式随笔,

    最近在学习面向对象设计模式,GOF的23种设计模式大概看了一遍,简单总结一下,设计模式主要分为三种模式,分别是创建模式,结构模式,行为模式. 回过头想一下具体有哪些模式,在什么情况下用什么设计模式,好 ...

  3. "无招胜有招"nbsp;史上最全的互…

    课前秀:三个段子 第一个段子:一个毫无餐饮行业经验的人开了一家餐馆,仅两个月时间,就实现了所在商场餐厅坪效第一名;VC投资6000万,估值4亿元人民币,这家餐厅是雕爷牛腩. 只有12道菜,花了500万 ...

  4. Dirty Approach之无招胜有招

    每个网站,几乎都有"新闻"的模块.在中国独有的ICP--Internet Copy and Past--模式下,多数站点也靠"转贴"手段汇集新闻信息.如果说新浪 ...

  5. 无招胜有招之Java进阶JVM(五)垃圾回收

    垃圾检测.回收算法 垃圾收集器一般必须完成两件事:检测出垃圾:回收垃圾.怎么检测出垃圾?一般有以下几种方法: 引用计数法:给一个对象添加引用计数器,每当有个地方引用它,计数器就加1:引用失效就减1. ...

  6. 无招胜有招之Java进阶JVM(九)HotSpot

    Java 版本1.8.0_121 Java SE 运行环境:也就是我们所说的jre. 至于hotspot:(两个字 讲究) #翻译的官方文档 Java HotSpot虚拟机是Java SE平台的核心组 ...

  7. 无招胜有招之Java进阶JVM(八)类加载机制

    6.1.ClassLoader的两个作用和一个任务 作用:1.将Class加载到JVM中2.审视每一个类应该由谁加载. 任务:将Class字节码重新解析成统一要求的对象格式 6.2上级委托接待机制又称 ...

  8. 无招胜有招之Java进阶JVM(七)对象模型

    Java对象前言: 在jvm的内存结构中,对象保存在堆中,而我们在对对象进行操作时,其实操作的是对象的引用. Java对象包含三个部分: 一个Java对象可以分为三部分存储在内存中,分别是:对象头(H ...

  9. 无招胜有招之Java进阶JVM(四)内存模型plus

    一.计算机内存模型: 在多CPU的系统中,每个CPU都有多级缓存,一般分为L1.L2.L3缓存,因为这些缓存的存在,提供了数据的访问性能,也减轻了数据总线上数据传输的压力,同时也带来了很多新的挑战,比 ...

  10. 无招胜有招之Java进阶JVM(三)内存模型

    为什么要有内存模型 在介绍Java内存模型之前,先来看一下到底什么是计算机内存模型,然后再来看Java内存模型在计算机内存模型的基础上做了哪些事情.要说计算机的内存模型,就要说一下一段古老的历史,看一 ...

最新文章

  1. python增删改查的框架_简单的Django框架增删改查操作
  2. 机器学习基础-决策树-12
  3. JAVA 求数组中的最大值
  4. Visual Studio 2015 update 3各版本下载地址
  5. CentOS下升级python版本
  6. ie检查服务器证书吊销,浏览器弹出“该站点安全证书吊销信息不可用是否继续”解决方法...
  7. sniffer的高级工具
  8. 1.组合数据类型练习: 分别定义字符串,列表,元组,字典,集合,并进行遍历。 总结列表,元组,字典,集合的联系与区别。...
  9. Deep Learning学习随记(二)Vectorized、PCA和Whitening
  10. python2和python3同时安装在Windows上
  11. PHP数组键不存在给默认值
  12. Ubuntu环境下NFS服务器搭建
  13. 通过项目流程管理减少需求变更的两种方法
  14. 如何用LaTeX写简历
  15. 【华为云技术分享】快速搭建网站之云速建站
  16. 高清视频文件丢了怎么恢复丨电脑下载好的缓存数据
  17. VMware Tools 启动脚本未能在虚拟机中成功运行。如果您在此虚拟机中配置了自定义启动脚本,请确保该脚本没有错误。您也可以提交支持请求,报告此问题。
  18. 关于for循环中三个语句的执行顺序
  19. Hadoop学习----Hadoop介绍
  20. 如何使树梅派的桌面图标大小变化

热门文章

  1. HDU - 5573 Binary Tree(思维+构造+二进制)
  2. MATLAB插值问题
  3. HDU - 4513 吉哥系列故事——完美队形II(Manacher)
  4. CodeForces - 1265D Beautiful Sequence(贪心+构造+思维)
  5. python是外部还是编程_Python网络编程(绑定到外部地址)
  6. c语言指针字符串逆序存放,C语言指针实现字符串的反转
  7. sql server中的 SET NOCOUNT ON 的含义
  8. cocos2d-x游戏实例(7)-A星算法(3)
  9. PyCairo 中的变换
  10. Redis 多线程网络模型全面揭秘|网络硬核系列