1.运行时数据区域:
程序计数器:当前线程所执行字节码的行号指示器。
每个线程都有一个独立的程序计数器。
Java虚拟机栈:描述java方法执行的内存模型。
线程私有。
本地方法栈:为虚拟机使用的native方法服务
Java堆:存放对象实例。(各个线程共享)
方法区:用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。
2.对象内存:对象头,实例数据
3.类的生命周期:
加载,验证,准备,解析,初始化,使用,卸载
加载:通过一个二进制流生成一个Class对象
验证:检查这个类是否符合规范
准备:为类变量分配内存并设置类变量初始值的阶段
解析:常量池内的符号引用替换为直接引用的过程
初始化:可以执行static块里面的代码
4.类加载器:双亲委派模型
启动类加载器(bootstrap classloader):lib
扩展类加载器 ( extension classloader ):lib/ext
应用程序类加载器(application classloader):加载用户类路径上的
5.线程,工作内存,主内存,
6.内存分配和回收策略
对象优先在Eden分配
大对象直接进入老年代
长期存活的对象进入老年代
动态对象年龄判定
空间分配担保
7.性能监控与故障处理工具
Jps 虚拟机进程状况工具
可以列出正在运行的虚拟机进程,并显示虚拟机执行的主类名成以及这些进程的本地虚拟机唯一ID。
Jstat 虚拟机统计信息监视工具
用于监控虚拟机各种运行状态信息。
Jinfo java配置信息工具。
作用是实时的查看和调整虚拟机的各项参数。
Jmap java内存映射工具。
用于生成堆转存快照。
Jhat 续集你堆转存快照分析工具
用来分析jmap生成的堆转存快照。
Jstack java堆栈跟踪工具
用于生成虚拟机当前时刻的线程快照。
8.四种引用(强,软,弱,虚)
强应用:
软引用:(SoftReference)
在系统发生内存溢出异常之前,将会把这些对象列进回收范围之中进行第二次回收。
弱引用:(WeakReference)
被弱引用关联的对象只能生存到下一次垃圾收集发生之前。
虚引用:( PhantomReference)
一个对象是否有虚引用的的存在,完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象的实例,对一个对象设置虚引用关联的唯一目的就是能在这个对象被收集器回收时收到一个系统通知。
网友评论