上一次写了1.初步认识JVM -- JVM序列 ,今天接着记录写JVM的运行机制。

一、JVM启动流程

    Java平台包括JVM以及Java语言,其中JVM也是运行在操作系统中的一个应用程序进程,那么也应该有自己的生命周期以及内存空间。一般情况下java或javac命令执行过程大概如下:

  • 输入java(javac)命令

  • 装载环境以及配置(根据当前路径和系统版本寻找jvm.cfg)

  • 根据配置寻找定位并加载JVM.DLL

  • 初始化JVM获得JNIEnv接口

  • 找到main方法

    注意在装载环境以及配置中首先查找jre路径再装载JVM.cfg;之后定位调用系统API加载JVM.dll,至于具体的代码执行流程可以看看csdn的这篇文章更齐全。

二、JVM基本结构

    这个基本结构我从网上爬了张图查看这样比较清楚,如下:

QQ图片20150701114723.png

  • 这其中方法区一般是保存装载的类信息:类型的常量池;字段、方法信息;方法字节码(String常量在JDK1.7之后移动堆中)。

  • java堆应该说是和程序开发最密切相关的区域了,这保存了系统对象凡是new创建的都存储在堆中,不像栈是线程私有的,这堆是所有线程共享,特别需要留意的是GC有分代那么堆也是有分代的。

  • java栈上面说的是线程私有,栈的空间对于堆来说一般比较小因此存放大对象或数量多是不行的,每次调用方法都会创建一个帧并压栈随后分配栈空间,同时也会拥有一个PC寄存器保存下一条指令的地址(本地方法有区别),存在多个帧时遵循先进后出的原则,这个帧保存了方法的局部变量,操作数栈(java中不存在寄存器概念),常量池等信息,关于局部变量这里需要记住局部变量表中静态方法跟实例方法的区别,举例如下:

1
2
3
4
5
public static int runStatic(int i,long l,float f,Object o,byte b){}
局部变量表:int i,long l,float f,Object o,byte b
public int runInstance(char c,short s,boolean b){}
局部变量表:reference this,char c,short s,boolean b
注意:最少4个字节32位,int32位;float64位;Object:32位。
  • 堆、栈、方法区交互:关于这个交互图我就直接截图了视频的这样看更清晰,如下

    QQ图片20150701114723.png

    这次先到这里。坚持记录点点滴滴!

     

posted @ 2015-07-01 12:17 求 败 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 1.JVM概念JVM是java Virtual Machine的简称。也称为Java虚拟机。虚拟机:通过软件模拟具有完整硬件功能的运行在一个完全隔离环境的完整计算机系统。VMWare、Visual Box、JVMVMWare、Visual Box 都是模拟物理CPU的指令集。而JVM是软件模拟Jav... 阅读全文
posted @ 2015-07-01 12:16 求 败 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 本文发表于本人博客。今天接着上次【Hadoop mapreduce自定义排序WritableComparable】文章写,按照顺序那么这次应该是讲解自定义分组如何实现,关于操作顺序在这里不多说了,需要了解的可以看看我在博客园的评论,现在开始。 首先我们查看下Job这个类,发现有setGrouping... 阅读全文
posted @ 2015-01-23 22:40 求 败 阅读(1997) 评论(3) 推荐(0) 编辑
摘要: 本文发表于本人博客。上个星期由于时间比较紧所以未能继续写下去,今天再接再厉,专心 + 坚持这样离目标就越来越近了!废话少说说正题,今天我们还是来说说java中比较基础的知识,大家知道编写java程序中很多时候都用到了xml文件,有些是框架本身支持配置的,有些是自定义配置的,这样就要求我们要对这个xm... 阅读全文
posted @ 2015-01-08 12:24 求 败 阅读(916) 评论(5) 推荐(0) 编辑
摘要: 本文发表于本人博客。今天继续写练习题,上次对分区稍微理解了一下,那根据那个步骤分区、排序、分组、规约来的话,今天应该是要写个排序有关的例子了,那好现在就开始! 说到排序我们可以查看下hadoop源码里面的WordCount例子中对LongWritable类型定义,它实现抽象接口WritableCom... 阅读全文
posted @ 2014-12-26 14:03 求 败 阅读(1331) 评论(2) 推荐(0) 编辑
摘要: 本文发表于本人博客。在上一篇文章我写了个简单的WordCount程序,也大致了解了下关于mapreduce运行原来,其中说到还可以自定义分区、排序、分组这些,那今天我就接上一次的代码继续完善实现自定义分区。首先我们明确一下关于中这个分区到底是怎么样,有什么用处?回答这个问题先看看上次代码执行的结果,... 阅读全文
posted @ 2014-12-25 16:21 求 败 阅读(4245) 评论(0) 推荐(1) 编辑
摘要: 本文发表于本人博客。前面几次讲了关于Hadoop的环境搭建、HDFS操作,今天接着继续。本来Hadoop源码中就有一个例子WordCount,但是今天我们来自己实现一个加深对这个Mapper、Reducer的理解,如有不对欢迎指正。我们先来梳理一下思路,对于自定义Mapper以及Reducer,我们... 阅读全文
posted @ 2014-12-24 15:10 求 败 阅读(1715) 评论(2) 推荐(0) 编辑
摘要: 本文发表于本人博客。今天我来说说关于JAVA多线程知识,有错误请指出。大家都知道JAVA在服务端上处理也有很大优势,很多公司也有在服务器跑JAVA进程,这说明JAVA在处理这个多线程以及并发下也有一定有优点的(这说法有点坑了)。下面来看看那java中,不具备直接操作像操作系统一样的PV信号,然而它提... 阅读全文
posted @ 2014-12-19 11:10 求 败 阅读(1256) 评论(4) 推荐(3) 编辑
摘要: 本文发表于本人博客。这次来看看我们的客户端用url方式来连接JobTracker。我们已经搭建了伪分布环境,就知道了地址。现在我们查看HDFS上的文件,比如地址:hdfs://hadoop-master:9000/data/test.txt。看下面代码: static final String... 阅读全文
posted @ 2014-12-17 09:36 求 败 阅读(660) 评论(0) 推荐(0) 编辑
摘要: 本文发表于本人博客。 我们知道HDFS是Hadoop的分布式文件系统,那既然是文件系统那最起码会有管理文件、文件夹之类的功能吧,这个类似我们的Windows操作系统一样的吧,创建、修改、删除、移动、复制、修改权限等这些操作。 那我们现在来看看hadoop下是怎么操作的。 先输入hadoop ... 阅读全文
posted @ 2014-12-16 11:43 求 败 阅读(889) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示