`
文章列表
一、概述 大型软件需要有好的架构支撑,此处描述oracle体系结构,从运行期的进程/线程、内存体系结构和静态的文件描述。本来我想按照五种架构视图的运行架构和数据架构来写的,但是想想怕这么写不够严谨,所以还是按照Kyte大叔的分类来写吧。 二、数据库和实例 数据库是磁盘上存储的文件的集合。 实例是运行期的一组后台进程/线程和共享内存的集合。注意此处是后台进程,专用服务器不属于后台进程,但是为什么共享服务器属于呢?Oracle运行时候以多进程还是以多线程的形式运行,跟不同操作系统的实现版本有关的,Linux上是多进程,Window上是多线程。后续以多进程术语描述其运行期进程/线程,大家 ...
1、解锁用户 如果用户被锁,用用户登陆的时候会提示: ORA-28000: the account is locked 解决: sys/*** as sysdba 登陆后 alter user scott account unlock; 2、orcle自带工具 1)、%ORACLE_HOME%\rdbms\admin\utlxplan.sql 创建plan_table 2)、%ORACLE_HOME%\sqlplus\admin\plustrace.sql 创建plustrace角色 3)、%ORACLE_HOME%\rdbms\admin\spcreate.sq ...
一、概述 语言要在虚拟机上执行,必须先翻译成机器代码,翻译的方式有两种,一种是编译期静态翻译为机器码,一种是编译器翻译为某种表示,运行期在翻译成机器码来执行。 编译器可分为多种类型,1、编译器把java源文件编译成class文件的前端编译器,如javac和eclipse的jdt增量编译器;2、运行期把.class文件翻译成本地机器代码的JIT编译器,如HotSpot VM的C1、C2编译器;3、直接把java源文件编译成本地机器码的提前编译器(Ahead Of Time,AOT),如GNU Compiler for Java。后续我们提到的编译器是指运行期编译器。 java语言是一种解 ...
一、概述 jvm spec只给出了执行引擎的概念模型,并没有规定具体实现细节。执行引擎在执行时候可以解释执行、编译执行或直接由嵌入芯片的指令执行。引擎的行为使用指令集来定义。 java的目标是一次编写到处运行,为了达到这个目标,jvm指令集就不能依赖于任何硬件平台的指令,jvm指令集中就只有对栈的操作,没有对特定于硬件平台的寄存器的操作。当然jvm运行期优化的时候,可以针对不同的硬件平台提供不同的优化实现,比如充分利用硬件平台的寄存器提高访问速度。既然jvm执行引擎只有对栈的操作,那么我们下边就开始了解下栈的机构。 二、栈和栈帧 栈是线程私有的内存区域,每个线程都有一个栈,线程生则 ...
  一、概述 Java最大的一个特点就是不用开发人员手动释放对象的内存,这些任务就交给了jvm来做。垃圾收集器有很多分类,如按照并行(ParNew、Parallel Scavenage、Parallel Old、CMS并发标记阶段、g1)、并发(cms并发标记和并发清理阶段、g2)和串行(Serial、Serial Old/PS Mark-Sweep),按照算法分引用计数和跟踪算法,按照性能指标比如吞吐量(Parallel Scavenge、Parallel Old)、低停顿(CMS)、增量式(G1)。 HotSpotVM的内存结构 二、基本算法 gc实现虽然很多,像串行、并行、 ...
一、对象创建 类型信息在装载、连接和初始化之后,就可以使用了,可以访问类型的静态字段和方法,可以创建类型实例。对象的创建分为现实创建和隐式创建两种。 显示创建分为:1、通过new创建;2、通过java.lang.Class的newInstance方法创建;3、通过clone方法创建;4、通过java.io.ObjectInputStream的readObject方法创建。 隐式创建分为:1、启动类的main方法的string数组参数;2、常量池的CONSTANT_String_info表项被解析的时候会创建一个String对象;3、每个加载的类都会创建一个java.lang.Cl ...
初始化阶段是为类型变量赋予正确的初始值,初始化分为两个阶段: 1、如果直接超类还没有进行初始化,则先初始化直接超类。 2、如果类存在一个初始化方法<clinit>,则调用该方法。 <clinit>是在编译java源码时,按照静态块和静态变量赋值语句的顺序生成的。如果类没有静态块也没有为静态变量赋值,就不会生成<clinit>方法,该方法只能被虚拟机调用。 <clinit>由虚拟机自动调用,不需子类显示调用。接口也会生成<clinit>方法。jvm会保证多个线程同时加载一个类的时候,初始化块的运行顺序。 另外前边说到 ...
一、概述 类型的连接是指把字节码二进制静态结构合并到运行时状态中去。连接又分为验证、准备和解析三个阶段。 二、验证 验证装载到jvm中的字节码流的合法性。jvm spec没有规定具体做什么验证。根据不同的虚拟机实现大 ...
前边提到了单线程的实现,这里贴出多线程版,此处主要用多线程去处理hash后的小文件:   package com.kingdee.gmis.mass.data.ips; import static com.kingdee.gmis.mass.data.ips.MassIP.K10; import static com.kingdee.gmis.mass.data.ips.MassIP.getPartitionFile; import static com.kingdee.gmis.mass.data.ips.MassIP.partationCount; import static ...
一、概述       类型的生命周期分为装载、连接、初始化、实例的生命周期(使用)和卸载(实例化算是类型生命周期的一部分么?)。装载是指把表示类型信息的二进制字节码装入到内存。连接阶段包括验证、准备和解析, ...
一、概述 运行时数据区是jvm运行时的内存布局,类装载到内存后存放的位置,为执行引擎提供所需指令和数据。运行时数据区包括:堆、栈、方法区、本地方法栈、pc计数器。 接下来会详细介绍各个部分,并介绍直接内存访问和方法区中的常量池,另外对于每个区域可能发生的内存异常用demo做讲解。 二、详细介绍各部分 1、堆 分配运行时产生的对象分配在堆中,但是并不是一定就分配在堆中,随着运行时编译器优化技术的不断进步,逃逸分析和标量替换技术的不断成熟,对象也可以分配到栈中。由于jvm内存是由虚拟机自己分配和回收,不需要开发人员手工干预,所以jvm一般会提供gc功能,但是jvm spec并没有明 ...
一、ClassLoader 负责装载class文件;这个文件来源可能是压缩包、网络、运行时编译出的或者自动生成的class文件,jvm spec没有规定必须从什么地方加载。 jvm中默认提供了三种系统类加载器: 1)、启动类加载器Bootstrap ClassLoader,负责加载%JAVA_HOME%\jre\lib目录下的包, 2)、扩展类加载器Ext ClassLoader,负责加载%JAVA_HOME%\jre\lib\ext目录下的包,或者在java.ext.dirs系统变量锁指定的路径中的所有类库 3)、应用程序类加载器App ClassLoader,负 ...
一、概述 Java的源码编译后的class文件,具有非常严谨的结构,文件各个部分内容的完整性也通过自身描述来校验。 开始描述class文件内容前,我们先定义一些说明:u1代表一个字节,也是两个16进制字符,u2、u4、u8分别代表2、 ...
  国庆放假没买到票,没回家,呆在住的地方,花了三天时间看了下<<深入理解Java虚拟机>>,算是对以前看过的《深入Java虚拟机》的一个有力补充,前者有很多作者实际的例子,后者偏向于理论上的东西,不过后者太老了。接下来对看过的这些东西做一下整理稍微做下记录,由于是读书笔记,内容结构上可能跟原书比较相似。 一、java平台 java平台由四部分组成: 1、java语言 2、java api 3、java class文件结构 4、java viutual machine 二、jvm体系结构 接下来我们就按照jvm arc一部分一部分的分析 ...
前几天椰子在微博上发了消息说匿名函数也可以有名字,我就想了半天,有名字的匿名函数到底是什么情况?? 先来看js中函数的三种定义方式吧: /** * 1、function关键字语句 */ function fn1(){ alert("fn1"); } /** * 2、函数字面量(Function Literals) */ var fn2 = function(){ alert("fn2"); }; /** * 3、Function构造函数型 */ var fn3 = new Function('x','ale ...
Global site tag (gtag.js) - Google Analytics