java优点
1、跨平台,一次编译,到处运行。
2、提供相对安全的内存管理和访问机制,避免了大部分的内存泄露和指针越界
3、实现了热点代码检测和运行时编译优化。
4、完善的应用程序接口,广泛的第三方类库支持,提升了开发效率
java技术体系介绍
1、java 语言
2、各种硬件平台的虚拟机
3、class文件
4、java API类库
5、来自商业机构和开源社区的三方java类库
JVM运行时数据区域
- 程序计数器
当前线程所执行的字节码的行号指示器。
线程私有,每个线程都有一个,指示的是当前线程正在执行的虚拟机字节码的指令地址。
本地方法的话,计数器为空,Undefined。
唯一没有OOM的区域。
- java虚拟机栈
虚拟机栈对应的是java方法执行的内存模型。每个方法执行的同时都会创建一个栈帧,用于存储局部变量,操作数栈,方法出口等,一个方法的执行过程就是栈帧在虚拟机栈入栈和出栈的过程。
线程私有
如果线程请求的栈深度大于虚拟机栈所允许的深度,抛出Stack Overflow Error
如果虚拟机栈可以动态扩容,在扩容是无法申请足够的内存,则OOM
- 本地方法栈
本地方法栈同虚拟机栈,不同的是它是为native方法服务的
- 堆
java虚拟机管理的内存中最大的一块,线程共享,几乎所有的对象实例都在这里分配内存。所以也是GC发生的地方。新生代 老年代
- 方法区
线程共享,存放虚拟机加载的类信息,常量,静态变量等。
6.运行时常量池
运行时常量池是方法区的一部分,Class字节码文件除了类的版本,字段,方法,接口等信息外,还有一项信息是常量池,用于存放字面量和符号引用。
7.直接内存
不是java虚拟机运行时数据区的一部分,但是频繁使用,比如NIO 使用Native函数库直接堆外分配内存