跨平台
我们写的一个类,在不同的操作系统上(Linux、windows、Mac OS)执行,效果是一样的。这就是JVM的跨平台性。
跨语言
JVM只识别字节码,JVM不是翻译Java文件,而是识别class文件,把它编译成字节码在JVM上跑。这就是JVM的跨语言特征。
JVM(Java虚拟机)+ Java标准开发库 = JRE (JAVA的运行时环境)
JRE (JAVA的运行时环境) + 开发调试诊断工具 = JDK
总结 : JDK 包含了 JVM
运行时数据区
Java虚拟机在执行Java程序的过程中会将它所管理的内存划分为若干个不同的数据区域
JVM运行时数据区包括:
内存堆
**堆 **是JVM上最大的内存区域,我们申请的几乎所有的对象,都存储在这里
堆空间划分
内存溢出
指JVM可用内存不足
常见的内存溢出
内存泄漏(memory Leak)
指无用的对象继续占用内存,你没有再恰当的时机释放内存
与内存溢出的关系
如果存在严重的内存泄漏问题,随着时间的推移,则必然会引起内存溢出
内存泄漏一般是资源管理问题和程序BUG,内存溢出则是内存空间不足和内存泄漏的最终结果
对象头一部分:用于存储对象自身的运行时数据(Mark Word)。另一部分是类型指针
如果对象是一个Java数组,那么再对象头中还有一块用于记录数组长度的数据
Java 8默认情况下使用的是并行垃圾收集器(Parallel GC)