JVM初学笔记
JVM概念
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
JVM屏蔽了与具体平台相关的信息,Java语言编译程序只需生成在Java虚拟机上运行的目标代码(.class字节码)即可,这就是java语言跨平台这一优点的由来。
JVM产品
目前主流的JVM有Oracle / Sun公司的HotSpot VM,JRockit VM,IBM的J9 VM。其中HotSpot 是绝对的主流,下文也是根据它做的分析。
JDK,JRE,JVM之间的关系

JRE包含JVM和一些java API;
JDK包含JRE和一些java开发工具和监控工具;
JVM结构

由上图可见,JVM有四个部分:类加载器子系统、运行时数据区域(内存空间)、执行引擎和本地方法接口。
其中:内存空间有五个部分:java堆、方法区、java栈、本地方法栈和程序计数器。
类加载器子系统(classloader)
负责把编译好的.class文件加载到内存(方法区)中。执行引擎
JVM执行java字节码文件的核心。主要有四种执行方式:解释执行、编译执行、自适应优化执行和硬件芯片执行。本地方法接口(JNI---java native interface)
JNI主要有两种使用场景:
a) 在方法中调用非java语言开发的
b) 在方法中用java直接操作硬件平台
本地方法的缺点:不方便而且不安全,也丢失了java的跨平台特性。- 运行时数据区域(内存空间)
由上图可以看出,java堆和方法区是所有线程共享的,需要注意同步问题。java栈、本地方法栈和程序计数器都是线程私有的。
a) java堆:存储对象实例和数组值,通过new创建的对象实例都是存在这里的。

java堆主要分了两大部分:年轻代和老年代
年轻代:新创建的对象实例在伊甸园区(正如起名,繁衍新生之地)存储,如果空间不足了会把其中还存活的对象移动到两个幸存区(s0好s1是对称的,没有先后关系)
老年代:历经几次GC后还存活的对象会移至老年代
b) 方法区:
主要存储JVM加载的类信息,静态变量,final修饰的类、方法及变量。
方法区对应了JVM的持久代(PermanetGeneration)
c) java栈:
主要存储执行中java方法的参数、局部变量、操作数和中间结果等。
每个方法被执行时都会同时创建一个栈帧( Stack Frame)用于存储局部变量表、操作栈、动态链接、方法出口等信息,每一个方法被调用直至执行完成的过程,
就对应着一个栈帧在java栈中从入到出栈的过程。
d) 本地方法栈
存储native方法调用的状态,用于本地方法的执行
e) 程序计数器
类似与CPU中的pc寄存器,用来存储指令地址(执行java方法时),如果执行的是本地方法,则值为Undefined。
JVM的生命周期
JVM初学笔记的更多相关文章
- JVM学习笔记:虚拟机的类加载机制
JVM类加载机制分两部分来总结: (1)类加载过程 (2)类加载器 一.JVM类加载过程 类的加载过程:加载 →连接(验证 → 准备 → 解析)→ 初始化. 类的生命周期:加载 →连接(验证 → 准备 ...
- JVM学习笔记:字节码执行引擎
JVM学习笔记:字节码执行引擎 移步大神贴:http://rednaxelafx.iteye.com/blog/492667
- C++ STL初学笔记
C++ STL初学笔记 更系统的版本见徐本柱的PPT set 在这儿:http://www.cnblogs.com/pdev/p/4035020.html #include <vector&g ...
- JVM学习笔记(四)------内存调优【转】
转自:http://blog.csdn.net/cutesource/article/details/5907418 版权声明:本文为博主原创文章,未经博主允许不得转载. 首先需要注意的是在对JVM内 ...
- JVM学习笔记(四)------内存调优
首先需要注意的是在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提 ...
- java jvm学习笔记七(jar包的代码认证和签名)
欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 前言: 如果你循序渐进的看到这里,那么说明你的毅力提高了,jvm的很多东西都是比较抽像的,如果不找相对应的代码来辅助理解 ...
- java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)
java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...
- java之jvm学习笔记三(Class文件检验器)
java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...
- java之jvm学习笔记五(实践写自己的类装载器)
java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...
随机推荐
- js动画之获取元素属性
首先我们要介绍一些知识 offsetWidth element.offsetWidth = width + padding + border; width 我们也知道element.style.wid ...
- 作业七:团队项目——Alpha版本冲刺阶段005
今日进展:编写代码. 今日安排:完成开始部分代码.
- CSS布局学习笔记之position
CSS知识点 之 position布局 前段时间被同学怂恿,参加了百度前端技术学院的一个小培训,第一个阶段下来学到不少东西.课程的第一个阶段主要是HTML5 和 CSS 基础知识的一个小培训,给出的一 ...
- 关于 DWZ 弹出框
1.弹出框 <a name="***" class="***" href="${** }/***.do?action=***&属性=${ ...
- TCPCopy使用
http://www.thinkingbar.com/2014/04/17/tcpcopy使用/ 主题 技术 一.应用背景 主要用于系统的稳定性测试.它可以复制线上服务器的请求,通过修改TCP/I ...
- SpringMvc+Spring+Mybatis的jar包依赖关系图
- api将一统江湖,再无app
api的出现,使人们可以通过各种软硬件设备获取所需服务,而不需要安装臃肿的app:今后的智能设备将不再依赖软件.操作系统和硬件,或许一台51单片机都可以提供给用户所需信息.当然连名字都可以简单到不叫a ...
- 在ubuntu14.04 64位虚拟机中安装mysql
因为在win10 系统上手贱的将mysql卸载掉了之后有个插件一直无法正常删除导致只能将mysql装到ubuntu虚拟机上, 宝宝心里都是累啊,所以记录下来自己的安装过程2333 命令行操作: &qu ...
- Photoshop制作的海报修改~
经过几天的征求意见,感觉还是要重新制作,于是把颜色删减了不少 . 这次运用了蒙版和渐变,但感觉效果不太好.再改.. 后来觉得给人的单身感有点少.. 不知道感觉如何,但自己觉得比以前好看..
- CSS各种定位详解
1.定位的专业解释 (1)语法 position:static|absolute|fixed|relative (2)说明 从上面语法可以看出,定位的方法有很多种,它们分别是静态(static),绝对 ...