• 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. 2、Runtime Area Data

    这个也分为两大部分 1.是线程共享区域 ·线程共享区域又包括两部分Heap(堆)和方法区(Perm) 2.是线程独享区域 这个也包括两大部分程序计数器和栈 栈(又包括两部分:VM 栈和本地方法栈)

  2. doctype声明的重要性-------这绝对是ie的坑, 与angular无关, 我错怪你啦

    今天开发一个页面,  自己写页面, 自己实现功能. 因为以往需求都没有要求兼容ie9, 所以并未发现此坑. 今天就记录下来. 贴图对比 ie9 chrome 如图, ie9界面显示错误. 起初以为是a ...

  3. SDWebImage下载图片有时候无法成功显示出来

    之前用下面的方法现在图片,有时候会出现图片没有下载成功显示: - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)p ...

  4. 【转】Tomcat的默认访问路径

    放在外网的应用,用户多是直接输入域名访问,相信没有哪个后面还加个尾巴,而Tomcat的默认目录是ROOT,所以我们需要更改其默认目录. 更改Tomcat的默认目录很简单,只需要修改server.xml ...

  5. 生成linux shadow文件

    -salt $(< /dev/urandom ) -stdin $$cVcjk1yK$sfdBsYIEr800Mdr3PsICe0 $$oBrzawaF$WeVJjd2eyoEEmJykNtMH ...

  6. Python开发入门与实战20-微信开发配置

    随着移动互联网时代的来临,微信已经成为移动互联网移动端的主要入口,现在很多的大型企业都有自己的微信服务号,如:银行业有自己的微银行,基金公司的公众服务号.通过微信入口可以方便快速的实现企业提供的服务. ...

  7. ADO.NET与ORM的比较:NHibernate实现CRUD(转)

    原文地址 http://blog.csdn.net/zhoufoxcn/article/details/5402511 说明:个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是Spr ...

  8. jQuery编程最佳实践笔记

    优化选择器   选择器优化已经不如从前那么重要,因为更多的浏览器实现了document.querySelectorAll()方法,所以选择的重担由jQuery转移到了浏览器. 但是仍然有一些技巧是需要 ...

  9. Request.ServerVariables 获取服务器或者客户端信息

    本机ip[客户端]:request.servervariables("remote_addr") 从哪个页面转到当前页面的:Request.ServerVariables(&quo ...

  10. 4 多表代替密码之Hill 密码_1 矩阵工具类

    在说明Hill加密之前要先复习线性代数的知识,主要是关于矩阵的一些运算和概念. 一.矩阵的逆: 定义方阵M的逆矩阵应该满足M*M^-1==I,其中I是单位矩阵,比如: 但是这个地方是对英文字母进行加密 ...