ava虚拟机和jvm特性:
1.JVM的引入:
2.JAVA代码编译和编译过程:
java源码编译机制:
类加载机制:
类执行机制:
3.JVM内存管理和垃圾回收:
4.JVM内存调优:
减少GC的频率:
减少full GC的次数
1.JVM的引入:
java在不同平台上运行时不需要重新编译
一次编译,到处运行
2.JAVA代码编译和编译过程:
java源码编译机制:
分析和输入到符号表:
注解处理:
语义分析和生成class文件:
结构信息:文件格式版本号大小
元数据:
方法信息:
类加载机制:
由classLoader及其子类来完成
类执行机制:
程序计数器:
栈:
局部变量区:
操作数栈:
3.JVM内存管理和垃圾回收
jvm内存组成结构:
堆:new对象(成员变量,无成员方法)
新生代:新建的对象
旧生代:多次垃圾回收仍 然存活的对象
持久代:已加载的类信息 方法信息常量池
栈:(临时变量、参数、中间结果)
局部变量区
操作数栈:
压栈出栈
本地方法栈:native方法
方法区:
常量池
类信息、
静态变量、
final类型的常量、属性、方法
垃圾回收策略:
引用计数:
标记-清除:
复制:
标记-整理:
JVM分别对新生代和旧生代采用不同的垃圾回收机制:
串行GC
并行GC
4.JVM内存调优:内存查看工具
减少GC的频率:
减少full GC的次数:
旧生代空间不足:
Pemanet Generation空间不足:
System.gc()被显示调用
版本2
JVM内存管理:
java堆:
新生代:
旧生代:
永久代:
jvm栈:
内存溢出:
方法区:
本地方法栈:
java堆:
存放对象,线程共享;可导致内存溢出
随jvm,有jvm就有堆
jvm栈:
运行时创建,跟随线程
不需要回收,随着线程的结束释放
内存溢出解决方法:
最大堆和栈的容量来换取更多的线程
方法区和常量池:
方法区存的是类信息、常量、静态变量,而不是方法
http://www.mamicode.com/info-detail-1028149.html
守护线程:虚拟机自己使用
非守护线程:
JVM内存空间:
类加载器子系统:
Class类内部结构
JVM如何加载类
如何加载类
字节码执行子系统:
程序运行时堆栈的结构
支持对台
执行引擎
垃圾回收器GC:
如何确定回收对象
哪些垃圾回收方法
何时进行垃圾回收
java编译器
并发执行
jvm运行时数据区域:
程序计数器:
选取字节码指令
java虚拟机栈:
局部变量表:
各种基本类型:
对象引用类型:
操作栈:
动态链接:
方法出口:
本地方法栈:
Native方法:
java堆:(线程共享)
对象实例:
数组
方法区:(线程共享)
类信息
常量
静态变量
运行时常量池:
编译期生成的各种字面量
符号引用
直接内存:
垃圾回收机制:
1定义:
JRE负责内存分配和回收(堆内存)
2显式回收的缺点:
实时性:
无法及时回收,导致内存泄漏
错误:
错误回收核心类库内存,导致系统奔溃
3内容:
堆内存
碎片
4优缺点:
优点:
提高编程效率
保护程序的完整性:
安全性的一部分
缺点:
额外开销
5特点:
只回收无用对象的内存资源:
设置对象引用变量设置null,快速回收:
不能精确控制垃圾回收机制的执行:
不同的垃圾回收机制:
串行
并行
不同的垃圾回收算法:
引用计数:
标记-清除:
复制:
标记-整理:
精确回收:
活着的:
对象的引用关系: