JVM
-
JVM的位置
操作系统的堆中,不能与硬件直接交互,需通过操作系统交互
-
JVM体系结构
-
类加载器
用于加载class文件
三种类加载器
1.启动类加载器Bootstarp ClassLoader
2.拓展类加载器Extension ClassLoader
3.应用程序类加载器Application ClassLoader
-
双亲委派机制
1.类加载器收到类加载请求
2.将这个请求委托个父类加载器,一直向上委托,直到启动类(根类)加载器
(Application ==> Extension ==> Bootstrap)
3.类加载器检查是否能加载当前类,能加载就结束,使用当前加载器,否则抛出异常通知子类加载器
4.重复操作3
(Bootstrap ==> Extension ==> Application ==> ClassNotFound)
-
沙箱安全机制
主要限制系统资源的访问,引入域的概念,不同的域管理不同的系统资源权限
沙箱主要组成部件:
1.字节码校验器:确保java语言规范
2.类装载器:双亲委派机制,保护善意代码
3.存取控制器:控制核心API对操作系统的存取权限
4.安全管理器
5.安全软件包:用户自主增加安全特性,包括:
·安全提供者
·消息摘要
·数字签名
·加密
·鉴别
-
Native关键字
·java无法执行,要调用底层的C语言库
·进入本地方法栈,调用JNI(本地方法接口)
·内存区域中专门开辟了标记区域Native Method Stack,记录native方法。
·JNI的作用:拓展java的使用,融合不同编程语言!
-
PC寄存器
相当于一个指针,存储指令指向下一个指令的地址
每个线程都有自己的程序计数器pc,线程私有的,生命周期和线程一致
-
方法区 Method Area
被所有线程共享,是所有定义的方法的信息都保存在这个区域
静态变量static、常量final、类信息(接口定义和构造方法)Class、常量池存在方法区,实例变量存在堆中
-
栈 Stack
主管程序运行,生命周期和线程一致,不存在垃圾回收问题
每个方法运行时都会创建一个栈帧
存储八大基本类型、引用对象和实例方法
先进后出
-
三种JVM
HotSpot-----sun公司
JRockit-------BEA
J9 VM--------IBM
-
堆 Heap
一个JVM只有一个堆,堆内存大小是可调节的
类加载器读取完类文件后,堆中存放所有应用类型的真实对象,类,方法,常量,变量
堆内存可分为三个区域:
新生区(伊甸园Eden Space、幸存区Survivor Space):
伊甸园Eden Space:对象被创建首先被放置的区域,进行轻量级的垃圾回收后未被清理的对象会进入幸存区Survivor Space。
幸存区Survivor Space:有两个,To Survivor Space和From Survivor Space,大小一致,用于保存在eden space内存区域中经过垃圾回收后没有被回收的对象。
执行垃圾回收的时候Eden区域不能被回收的对象被放入到空的survivor(也就是To Survivor,同时Eden区域的内存会在垃圾回收的过程中全部释放),另一个survivor(即From Survivor)里不能被回收的对象也会被放入这个survivor(即To Survivor),然后To Survivor 和 From Survivor的标记会互换,始终保证一个survivor是空的。 Mintor GC/Young GC
老年区
用于于存放新生区中经过多次垃圾回收仍然存活的对象,也有可能是新生区分配不了内存的大对象会直接进入老年区。Major GC/Full GC
永久区
存放JDK自带的Class对象,Interface元数据,关闭JVM就会释放内存
-
堆内存调优
OOM: java.lang.OutOfMemoryError: Java heap space
尝试扩大堆内存,通过JProffiler工具分析OOM原因
-Xms:设置jvm初始化大小
-Xmx:设置jvm最大内存大小
-Xmn:设置新生区大小
-Xss:设置每个线程堆栈大小
-XX:+PrintGCDetails //打印GC垃圾回收信息
-XX:+HeapDumpOnOutOfMemoryError //OOM Dump
-
GC
作用区域:方法区和堆
常用算法
引用计数法:给每个对象分配一个计数器,记录使用次数
复制算法:年轻代中的幸存区
好处:没有内存碎片
坏处:浪费了内存空间
最佳使用环境:对象存活度低
标记清除:对活着的对象进行标记,再对未标记的对象进行删除
优点:不需要额外空间
缺点:浪费时间,会参数内存碎片
标记压缩::标记清除后,向一段移动存活的对象
GC分代收集算法:新生代用复制算法,老年代用标记清除压缩
-
JMM (Java Memory Modal------java内存模型)
一种跨平台开发规范
三大特效:原子性、可见性、有序性
标签:Survivor,Space,对象,内存,JVM,加载 From: https://www.cnblogs.com/JasHu/p/18287266