Jdk中包括了Jre,Jre中包括了JVM
Jdk还包括了一些Jre之外的东西 ,就是这些东西帮我们编译Java代码的, 还有就是监控Jvm的一些工具 Java Development Kit是提供给Java开发人员使用的,其中包含了Java的开发工具,也包括了JRE。
Jre大部分都是 C 和 C++ 语言编写的,他是我们在编译java时所需要的基础的类库 Java Runtime Environment包括Java虚拟机和Java程序所需的核心类库等。
Java程序需要运行在虚拟机上,不同的平台有自己的虚拟机,因此Java语言可以实现跨平台。
用来存储指向下一条指令的地址,也即将要执行的指令代码。由执行引擎读取下一条指令。
每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致。
每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧,对应着一次次的方法调用。
是线程私有的。
java虚拟机栈用于管理java方法的调用,而本地方法栈用于管理本地方法的调用。
是线程私有的。
java堆区在jvm启动的时候即被创建,其空间大小也就确定了。是jvm管理的最大一块内存空间。
所有的线程共享java堆。
堆是GC执行垃圾回收的重点区域。
方法区看作是独立java堆的内存空间。
是各个线程共享的内存区域,在jvm启动的时候被创建。
在jdk1.7及以前,习惯上把方法区,称为永久代。
jdk8开始,使用元空间取代了永久代。
元空间与永久代最大的区别在于,元空间不在虚拟机设置的内存中,而是使用本地内存。
它用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编辑器编译后的代码缓存等。
1)通过一个类的全限定名获取定义此类的二进制字节流
2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
3)在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据访问入口
目的在于确保Class文件的字节流中包含信息符合当前虚拟机要求,保证被加载类的正确性,不会危害虚拟机自身安全。
1)为类变量分配内存并且设置该类变量的默认初始值,即零值。
2)这里不包含用final修饰的static,因为final在编译的时候就会分配了,准备阶段会显式初始化。
3)这里不会为实例变量分配初始化,类变量会分配在方法区中,而实例变量是会随着对象一起分配到堆中。
1)将常量池内的符号引用转换为直接引用的过程。
2)符号引用就是一组符号来描述所引用的目标。
3)直接引用就是直接指向目标的指针、相对偏移量或一个间接定位到目标的句柄。
4)事实上,解析操作往往会伴随着jvm在执行完初始化之后再执行。
1)初始化阶段就是执行类构造器方法()的过程。
2)此方法不需定义,是javac编译器自动收集类中的所有类变量的赋值动作和静态代码块中的语句合并而来。(如果代码中不存在类变量和静态代码块,则没有()方法)
3)构造器方法中指令按语句在源文件中出现的顺序执行。
4)() 不同于类的构造器。(关联:构造器是虚拟机视角下的())
5)若该类具有父类,jvm会保证子类的()执行前,父类的()已经执行完毕。
6)虚拟机必须保证一个类的()方法在多线程下被同步加锁。
1)这个类加载器使用C/C++语言实现的,嵌套在jvm内部
2)它用来加载java核心类库
它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。
它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通过 ClassLoader.getSystemClassLoader()来获取它。
通过继承 java.lang.ClassLoader类的方式实现。
所有属性设置默认值,保证对象实例字段在不赋值时可以直接使用
1)强引用可以直接访问目标对象
2)强引用所指向的对象在任何时候都不会被系统回收,虚拟机宁愿抛出OOM异常,也不会回收强引用所指向对象。
3)强引用可能导致内存泄漏。
1)自动内存管理
无需开发人员手动的参与内存的分配与回收,这样降低内存泄漏和内存溢出的风险。
自动内存管理机制,将程序员从繁重的内存管理中释放出来,可以更专心的专注于业务开发。
2)垃圾回收器可以对年轻代回收,也可以对老年代回收,甚至是全堆或方法区的回收。
将存活的内存空间分为两块,每次只使用其中一块,在垃圾回收时将正在使用的内存中的存活对象复制到未被使用的内存块中,之后清除正在使用的内存块中的所有对象,交换两个内存的角色,最后完成垃圾回收。
没有空闲内存,并且垃圾收集器也无法提供更多内存。
对象不会再被程序用到了,但是GC又不能回收它们的情况
该问题是在进行Minor GC时,Survivor Space放不下,对象只能放入老年代,而此时老年代也放不下造成的。