目录
1、什么是JVM?
(1)之前我们认识到的JVM是:JVM是java语言实现跨平台的根本所在
(2)换个角度来说:JVM是真正执行java代码的地方
注意:但是JVM只能读懂编译以后的java代码,也就是字节码文件
2、JVM的结构是什么样子呢?
(1)JVM总体上有三个主要部分:
执行引擎(解释器、即时编译器、垃圾回收)、本地方法接口(包含操作系统的API等)、运行时数据区(也叫JVM内存结构:最重要的部分,最重要的部分,最重要的部分!!!)
3、JVM内存结构:
(1)JDK1.6JVM实际的内存结构(非逻辑上的)
(2)JDK1.8JVM实际内存结构(非逻辑上的)
4、容易混淆的概念:
(1)常量池:
注意: 网上的资料中出现的常量池有可能是指的“运行时常量池”,有可能指的“字符串常量池”。这些都不准确,最准确的概念是,常量池指的是class文件中的常量池 (1)关于常量池被理解为“运行时常量池”:之所以网上会出现这样的概念,是因为当class文件被加载进内存并完成类加载以后,class文件中常量池中原本的符号引用将变为直接引用。经过这一变化以后,class文件中的常量池在方法区中才被称之为“运行时常量池“ (2)关于常量池被理解为“字符串常量池”:自行体会......吧!!!(也不知道谁带的头)
(2)方法区中到底有哪些东西?
关于这个问题,你在网上会看到很多说存了:元信息、方法、常量、常量池、即时编译器代码等 我只能说一定要注意版本,基本所有人根本不说版本,一顿操作猛如虎,结果一看原来是细狗!!!
static修饰的变量JDK1.7开始已经存储于java_mirror末尾(可以理解为Class对象)也就是说存储在了堆中
(3)逻辑概念和真正的实现:
这个是最容易混淆的,尤其是JVM内存结构包含了:堆、栈、本地方法栈、程序计数器、方法区。 这只是逻辑上的概念!!!
很多网上的资料都是逻辑概念和真正实现还有jdk版本之间自由排列组合,一顿咔咔说