1、jdk、jre、jvm三者的关系
jdk Java Deployment Kit
Jre Java Runtime Environment
jvm Java Virtual Machine
2、内存溢出 OutOfMemoryError:Java heap space
Main ---> VM arguments:
-XX:+HeapDumpOnOutOfMemoryError -Xms20m -Xmx20m
MemoryAnalyzer工具
3、JVM监控工具
jdk/bin目录下的 jconsole.exe--->tools,jar
jps
堆内存(新生代)Eden 2块Survivor
RIA富客户端
客户端应用--->浏览器--->flash(富客户端 Applet/Java Plug-in)
4、java发展历史
JDK版本、Java公司
5、Java技术体系
Java程序设计语言、各硬件平台上的Java虚拟机、Class文件格式、JavaAPI、第三方Java类库
JavaSE starndard edition 桌面
JavaME nokia s60 java 移动端
JavaEE web
6、jdk8新特性
1)接口的默认方法和静态方法
2)Lambda函数式编程是技术发展的方向
不用写大量的匿名内部类、代码可读性更好、高阶函数引入了函数组合的概念
集合操作也得到了极大的改善,引入了stream API
3)DateAPI
4)重复注解
5)更好的类型推荐
6)Nashorn JavaScript引擎
7、Java虚拟机
Sun Classic VM、Exact VM、HotSpot VM、KVM(kilobyte)、JRockit、J9、Azul VM、Liquid VM、Dalvik VM、Microsoft JVM、TaoVM
Sun Classic VM(完全淘汰了、技术落后、世界上第一款Java虚拟机、纯解析执行Java代码)
二、内存结构
1、程序计数器
1)是一块较小的内存空间,它可以看作当前线程所执行的字节码的行号指示器
2)程序计数器处于线程独占去
3)如果线程执行的是Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址。
如果正在执行是native方法,这个计数器的值为undefined
4)此区域是唯一一个在Java虚拟机规范中没有规定任何【OutOfMemoryError】情况的区域
2、虚拟机栈
1)描述的是Java方法执行的动态内存模型
2)栈帧:每个方法创建的时候都会创建一个栈帧,伴随着方法从创建到执行完成。用于存储局部变量表,操作数栈,动态链接,方法出口等
3)局部变量表:存储编译器可知的各种基本数据类型,应用类型,returnAddress类型
局部变量表的内存空间在编译器完成分配,当进入一个方法时,这个方法需要在帧分配多少内存是固定的,在方法运行期间是不会改变局部变量表的大小
4)栈的大小StackOverFlowError、OutOfMemoryError
3、本地方法栈
本地方法栈为虚拟机执行native方法
4、Java堆
1)【存放内存实例】
2)垃圾收集器管理的主要区域
3)新生代,老年代,Eden空间
4)OutOfMemory
5)-Xmx -Xms
5、方法区
1)存储虚拟机加载的类信息(类的版本、字段、方法、接口)、常量、静态变量、及时编译器编译后的代码等数据
2)方法区和永久代
3)垃圾回收在方法去的行为
4)异常的定义outOfMemoryError
运行时常量池
6、直接内存