Java虚拟机

一、虚拟机内存区域

1、虚拟机内存结构

按照线程之间是否共享划分为:

线程共享:堆、方法区;

线程私有:虚拟机栈、本地方法栈、程序计数器。

1、堆:存放对象实例,几乎所有的对象实例都在这里分配。Java虚拟机规范中的描述:所有的对象实例以及数组都要在堆上分配。堆是垃圾收集器管理的主要区域。从内存回收的角度,垃圾收集器基本采用分代收集,所以Java堆还细分为:老年代,新生代;新生代又可分为,Eden区,S0,S1。从内存分配的角度,线程共享的Java堆中可能划分出多个线程私有的分配缓冲区TLAB。

-Xmx:堆的最大值

-Xms:堆的最小值

2、方法区:存放已经被虚拟机加载的类信息,常量,静态变量,类及其方法实现。包括运行时常量池。

3、虚拟机栈:每个方法在执行的同时,都会创建一个栈桢,用于存放局部变量表、操作数栈、动态链接、方法出入参等信息。栈上分配,跟着函数调用而销毁。

局部变量表,存放了编译器可知的各种基本数据类型(int、boolean、byte、char等)、对象引用类型

4、本地方法栈:执行native方法,与虚拟机栈类似。

5、程序计数器:当前线程所执行的字节码行号指示器。如果执行的是Java方法,程序计数器记录正在执行的虚拟机字节码指令地址;如果是native方法,计数器值为空undefined。

2、虚拟机中的对象

1)分配方式:指针碰撞、空闲列表。选择哪种分配方式,要看堆是否规整,垃圾收集器是否有压缩功能,根据不同的垃圾收集器选择不同的分配方式。

2)并发安全:CAS失败重试保证更新操作原子性;本地线程分配缓冲TLAB。

二、GC

1、GC概述

1)哪些内存需要回收,which/where

2)什么时候回收,when

3)怎么回收,how

2、判断对象存活

1)引用计数法

2)可达性分析

3、各种引用

1)强引用

2)软引用

3)弱引用

4)虚引用

4、垃圾回收算法

1)标记-清除

2)复制

3)标记-整理

4)分代收集

5、垃圾收集器

并行:

并发:

1)CMS

2)G1

三、内存分配与回收策略

四、类加载机制

双亲委派模型

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。