第一章 初探Java虚拟机

分两类,系统虚拟机和程序虚拟机
典型的系统虚拟机:Visual Box、VMware,对计算机的仿真,一个可运行操作系统的平台
典型的程序虚拟机:Java虚拟机,专门执行单个计算机程序
同一个Java程序可以通过Java虚拟机运行于各大主流系统平台,实现了跨平台的特性。
主流Java虚拟机:HotSpot虚拟机

第二章 认识Java虚拟机的基本结构

Java虚拟机-JVM学习笔记

类加载子系统:从文件中加载Class信息,并将信息存放在方法区的内存中。
方法区:存放类的信息、运行时常量池信息(字符串字面量和数字常量)。
:在虚拟机启动时建立,程序主要的内存工作区域,存放Java对象实例。堆空间是所有线程共享的。
直接内存:是堆外的,直接向系统申请的内存区域,访问速度优于Java堆,读写频繁的场合可能会考虑直接内存。由于处于堆外,大小不会受到Xmx限制,但Java堆和直接内存的总和受限于操作系统最大内存的大小。
垃圾回收系统:回收不再使用的垃圾对象,重点在Java堆。(参阅4、5章)
Java栈:每一个Java虚拟机线程都有一个私有Java栈,在线程创建的时候被创建,保存着局部变量、方法参数。与Java方法的调用和返回密切相关。
本地方法栈:用于本地方法的调用。(本地方法就是Java调用非Java接口,类似交互时使用)
PC寄存器:每个线程私有的 空间,线程正在执行的方法被称作当前方法,若当前方法不是本地方法,寄存器指向正在执行的命令。若为本地方法,寄存器的值就是undefined。
执行引擎:负责执行虚拟机的字节码,为了提高效率,现在一般先将字节码编译成机器码后再执行。

Java虚拟机参数举例:- Xmx32m 系统最大可用堆空间32MB

Java堆:存对象,垃圾回收机制自动回收
根据回收机制不同,Java堆可能拥有不同结构。
典型:将堆分为新生代和老年代 新生代存放新对象,老年代存放老对象。
Java虚拟机-JVM学习笔记

对象被创建后存放在eden区,进行一次新生代回收后,如果对象还存活,进入s0或者s1,每经过一次回收,如果对象存活,年龄加1,当对象年龄达到一定条件后,被认为是 老对象,进入老年代。
堆、栈、方法区的关系:
Java虚拟机-JVM学习笔记

参数-Xss指定线程最大栈空间

栈上分配:是Java虚拟机的一项优化技术,将一些线程私有的对象打散分配到栈上,而不是分配到堆上。能够在函数调用后自动销毁而不用垃圾回收器的介入,从而提高系统性能。
(需要进行逃逸分析)

相关文章: