【JVM虚拟机】- 01JVM概念、内存结构简介
JVM概念以及内存结构简介
一、初识JVM
概念:Java Virtual Machine,Java程序的运行环境
优点:
-
一次编写,到处执行 自动内存管理,垃圾回收机制 数组下标越界检查
比较:JVM、JRE、JDK
二、内存结构
整体框架:
2.1 程序计数器
概念:用于保存JVM中下一条指令的地址
特点:1.线程私有:如果当前线程时间使用完毕,会去执行其他线程的代码, 执行完后,会再次返回当前线程执行下一条指令
2.不存在内存的溢出
2.2 虚拟机栈
概念:
-
每个线程运行所需的内存空间,称为虚拟机栈 每个栈由多个栈帧组成,对应每个方法调用时所占的内存 每个线程只能有一个活动栈帧,对应着当前正在执行的方法
示例:Debug模式下的栈内存分配情况
问题辨析
1.垃圾回收是否涉及到 虚拟机栈stacks内存?
不涉及,因为栈里面每个方法执行完会自动出栈,自动释放内存
2.栈内存分配越大越好吗?
不是的,因为物理磁盘总大小是一定的,栈内存越大,我们可用的线程数就会减少,反之,线程如果太多,栈内存就很小
3.方法内局部变量是否是线程安全的?
不一定,如果方法没有 变量的 传入传出操作,那在本方法是线程安全的
4.出现了内存溢出 java.lang.StackOverFlowError 异常的原因?
直译为,栈内存过度溢出,两种情况,栈帧过多(死循环),或者,栈帧占内存太大
2.3 本地方法栈
概念:带有native关键字的方法,需要java去调用本地的C或C++方法,有时java无法与底层直接交互,所以用本地方法
2.4 堆
概念:通过new关键字所创建的对象都会放在堆内存里面
特点:所有线程共享对象,需要考虑线程安全问题,有垃圾回收机制
堆内存溢出异常:java.lang.OutOfMemoryError : java heap space
堆内存诊断工具:jps,jmap,jconsole,jvirual
下一篇:
面向过程和面向对象程序设计的区别