• 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栈、本地方法栈和程序计数器。

  1. 类加载器子系统(classloader)
    负责把编译好的.class文件加载到内存(方法区)中。

  2. 执行引擎
    JVM执行java字节码文件的核心。主要有四种执行方式:解释执行、编译执行、自适应优化执行和硬件芯片执行。

  3. 本地方法接口(JNI---java native interface)
    JNI主要有两种使用场景:
    a) 在方法中调用非java语言开发的  
    b) 在方法中用java直接操作硬件平台
    本地方法的缺点:不方便而且不安全,也丢失了java的跨平台特性。

  4. 运行时数据区域(内存空间)

    由上图可以看出,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初学笔记的更多相关文章

  1. JVM学习笔记:虚拟机的类加载机制

    JVM类加载机制分两部分来总结: (1)类加载过程 (2)类加载器 一.JVM类加载过程 类的加载过程:加载 →连接(验证 → 准备 → 解析)→ 初始化. 类的生命周期:加载 →连接(验证 → 准备 ...

  2. JVM学习笔记:字节码执行引擎

    JVM学习笔记:字节码执行引擎 移步大神贴:http://rednaxelafx.iteye.com/blog/492667  

  3. C++ STL初学笔记

    C++  STL初学笔记 更系统的版本见徐本柱的PPT set 在这儿:http://www.cnblogs.com/pdev/p/4035020.html #include <vector&g ...

  4. JVM学习笔记(四)------内存调优【转】

    转自:http://blog.csdn.net/cutesource/article/details/5907418 版权声明:本文为博主原创文章,未经博主允许不得转载. 首先需要注意的是在对JVM内 ...

  5. JVM学习笔记(四)------内存调优

    首先需要注意的是在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提 ...

  6. java jvm学习笔记七(jar包的代码认证和签名)

    欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 前言: 如果你循序渐进的看到这里,那么说明你的毅力提高了,jvm的很多东西都是比较抽像的,如果不找相对应的代码来辅助理解 ...

  7. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

  8. java之jvm学习笔记三(Class文件检验器)

    java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...

  9. java之jvm学习笔记五(实践写自己的类装载器)

    java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...

随机推荐

  1. myeclipse激活法,可以试一试

    我的myeclipse2014也是这样激活: 第一步:输入任意用户名 第二步:点击Systemid... 按钮,自动生成本机器的systemid. 第三步: 点菜单Tools->RebuildK ...

  2. 用Advanced Installer制作DotNetBar for Windows Forms 12.0.0.1_冰河之刃重打包版详解

    关于 DotNetBar for Windows Forms 12.0.0.1_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版-------------- ...

  3. J2EE、J2SE、J2ME是什么意思?

    本文介绍Java的三大块:J2EE.J2SE和J2ME.J2SE就是Java2的标准版,主要用于桌面应用软件的编程:J2ME主要应用于嵌入是系统开发,如手机和PDA的编程:J2EE是Java2的企业版 ...

  4. C++ 之 class 的思考

    工作多年,突然发现c++这么多年都是零散记录了些自己对C++的反思,没有做过任何的文字记录表示遗憾. 看到很多小伙也都在写技术博客,那我自己也就写一写自己的一些 思考吧! C++的基本类这个东西,想必 ...

  5. 伪装的方式实现js继承

    看起来属性放到"父类"里了,这种方式原型中还是有属性的,只不过在"子类"的构造器中用call方法调用父类构造函数的时候,"子类"被强行赋值了 ...

  6. MATLAB中白噪声的产生

    rand产生的是[0,1]上的均匀分布的随机序列randn产生均值为0,方差为1的高斯随机序列,也就是白噪声序列 rand产生的是均匀分布白噪声序列randn产生的是正态分布的白噪声序列 MATLAB ...

  7. linux下crontab命令的使用

    1.crond crond是Linux下的一个守护进程,与windows下的计划任务类似,当操作系统安装完成后,默认会安装并启动进程,Linux下的任务调度分为两类,系统任务调度和用户任务调度. 系统 ...

  8. android接入微信分享(朋友、朋友圈)、QQ分享(好友、空间)

    1.申请注册你的appid 2.下载sdk QQ: http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD 微信:https://open. ...

  9. strlen 字符型数组和字符数组 sizeof和strlen的区别 cin.get(input,Arsize)

    strlenstrlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值 ...

  10. React Native 的绑定 this

    在React Native开发中,如果使用ES6语法的话,最好绑定this.但是使用ES5语法的话不需要绑定this.因为ES5会autobinding. this所指的就是直至包含this指针的上层 ...