`
glutinit
  • 浏览: 47168 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
文章列表
    Class文件是JVM虚拟机可以理解的字节码文件,class文件并不是JAVA的专用文件,现在有很多语言都会生成可在JVM上运行的.class文件,比如JRuby,Groovy等等。     这里介绍一下.class文件的具体结构。     Class文件是二进制流, ...
如果想创建一个新的表,让其与一个已有表的定义(列设置)相同。怎么办? 比如,有一个已知表 TABLE_OLD,你想创建一个和其结构一样的表TABLE_NEW 在不同的数据库中,操作会不太一样: Oracle, MySQL,PostgreSQL   create table TABLE_NEW as   select * from TABLE_OLD where 1 = 0 DB2   create table TABLE_NEW like TABLE_OLD SQL Server   select *   into TABLE_NEW   from TABLE_OLD   whe ...
    【题外话】只要学过编译原理,计算机组成类似的课程的,就不会觉得JVM的字节码太难理解。有兴趣的人,只要边看书,边写几个例子后,再javap一下慢慢看几个就大概心里有数了,其实学习JVM的东西,主要是为了让自己对它的运行方式多一些了解,在实际编程过程中心里有个概念,有些特性的底层实现心里有数就行。         毕竟在大多数编程中,JVM的知识不会直接的影响到你的编程思路,但会潜移默化的让你绕过一些潜在的风险或者障碍。     下面稍微介绍两个概念:接收参数 和 方法调用     接收参数 实例方法(非静态方法)和类方法(静态方法)的实现是略有不同的,因为当调用一个实例方法时, ...
【题外话】由于有大牛在论坛里贴出翻译的《Java虚拟机规范》,我也就不用写那么详细了,哈哈,觉得那里需要写就写一下吧 Java代码的字节码可以通过 javap 命令生成 JVM的指令通用格式为: <index> <opcode> [<operand1> [<operand2>...]] [<comment>] 可以认为,方法的JVM字节码存放在一个Code[]数组中, • <index>就是该数组中存放的操作码的索引, • <opcode>是操作码的助记符号 • <operandN>是指令的操 ...
    一个JVM的指令包含了1个字节的操作码,该操作码用来表示要操作的动作,然后是0个或多个表示操作码的操作对象:参数或者其他数据。许多指令都没有操作数,而只有一个操作码。     不考虑异常的损耗,JVM解释器的内 ...

JVM摘要--Frames

    博客分类:
  • JVM
Frames (帧) 帧是用来存储数据和部分结果(Partial results)的,同时,也用与动态链接,方法的返回值并分发异常等。 当一个方法被调用时,就会创建一个新的帧(即方法和帧是紧密关联的)。当方法调用结束后(包括正常结束或异常退出,比如抛出一个未被捕捉的异常),帧会被销毁。帧是从JVM的栈里得到内存空间的。每一个帧都有它们自己的局域变量数组(Array of local variables),自己的操作数栈和一个指向当前方法所在类的常量池的指针。 局域变量数组和操作数栈的尺寸大小是在编译时就决定的,与该帧关联的方法的代码有关。 在一个指定的控制线程中,就只有正在被执行的方法(exe ...
Heap(堆) 所有的JVM线程共享一个Heap。 Heap中存放的是所有类的instances和数组。Heap在VM启动时就创建了,堆中的存储空间是由一个自动空间管理系统(也称之为垃圾回收器)来负责回收的;对象从不明确的被释放(Objects are never explicitly deallocated.),JVM没有强调用何种垃圾回收技术。堆的尺寸也可以是固定或者动态增减的。堆中的内存空间不需要连续。堆的初始尺寸,最大最小尺寸值也是可以设定的。 堆中的异常: 如果请求的堆空间大于automatic Storage management system允许的范围,则抛出OutOfMemory ...
1.PC Register(Program Counter Register); 即程序计数器寄存器 JVM支持同一时间同时运行多个线程,每一个线程都有它们自己的pc register。在同一个时刻,JVM的线程只能运行一个单独方法中的代码,此方法称为该线程的当前方法(Current Method)。 如果这个当前方法不是native的,PC register就指向正在被执行的JVM指令的地址。而如果一个当前方法是native的,则pc register中的值是不确定的。Pc register有足够的空间来存储returnAddress或者native指针。 2.JVM stacks 每一个J ...
今天在Oracle上新建了一个表,把key的长度设置为了long,后来想把另一个列的type也设置为long,发现oracle报错,网上goo了一把,发现Oracle中Long是不能随便乱用的...它并不是表示长整形,而是“Character data of variable length (A bigger version the VARCHAR2 datatype)”最大可以到2G,难怪一张表中只能有一列是Long型的... 以前一般Java bean中的long我都会写成 number(30,0), 今天疏忽后发现了这么个问题... 下面是Oracle中LONG 型的一些限制 1、 ...
【题外话】最近在坛子上看到了一篇介绍JVM的牛文,其中提到了一本书《The Java™ Virtual Machine Specification》,由于是英文的,啃起来颇为费劲,所以写一点摘要以免忘记... 写的很零散,主要是给自己看的,望海涵 JVM可以执行的编译后的JAVA代码是与硬件和操作系统无关的二进制文件;一般都存在一个文件当中,即.class文件。 宏观上讲,JVM有两种数据类型:原语类型(原始数据类型)和引用类型; Java的类型检查都是由编译器完成的,所以一般不需要JVM来做类型检查;JVM的指令集可以通过专门用于某些类型的操作指令来区分它所操作的数值类型是什么。比如ia ...
select xxx_name, count(*) as counter from table_y where where_condition group by xxx_name having having_condition order by zzz 当我们看到一个类似上述的包含了where, group by, having, order by等关键字的SQL时,我们要首先要知道其执行顺序是怎样的,才能判断出其所表达的含义; 下面列出其执行顺序: 1. 根据where子句选择行; 2. 根据group by 子句组合行; 3. 为每个组计算分组函数的结果; 4. 根据having子句筛选组 ...
Oracle在数值处理方面有诸多强大的函数,但很多在通常情况下我都很少会想起来使用,所以记在这里   Oracle的函数会处理三类数值:单值,值组(Groups of Value), 值列表;     其函数表示法为FUNCTION(value, [,option])     下面针对三类数值的函数分别介绍:    单值:    1. 加减乘除分别为(+,-,*,/)自不在话下    2. NULL       NULL不是0,NULL应该被视为一个未知值,所以与NULL发生的计算结果都被视为NULL。        3. NVL,空值转换       比如,NVL(Price, ...
oracle有两种字符串类型:Char 和Varchar2(其实还有Varchar,但也许Oracle在今后会有一些变化,所以为了安全起见,还是使用Varchar2)    其中Char是定长的,如果设置了小于Char长度的字符串,Oracle会用空格填充为等长的串,而且在比较CHAR时,也会有空格填充的问题,比如两个CHAR串“ComiCoder”和“ComiCoder ”被认为是一样的。    而Varchar2是变长的,为了节约空间等原因,通常都使用VARCHAR,除非你知道某个字符串是固定长度的。   下面是Oracle中的SQL提供的一些字符串函数 函数名               ...
继续上文 当我们利用自定义的抽象类型创建出一个表之后应该怎么插入数据,如何查看其内容? 首先,我们要利用racle提供的构造器方法(Constructor Method)来向数据库中插入抽象类型的数据,比如:      insert into CUSTOMER values      (1, PERSON_TY('ComiCoder', ADDRESS_TY('WYXL ST','HZ','ZJ',310000)));      然后,我们就可以看到CUSTOMER表中出现了一个新列;      但是我们能否通过如下的语句来查看该CUSTOMER的Name呢?       Select ...
【题外话】我不是很喜欢好几天都看一本书,而更习惯于tick-by-tick式的轮巡方式来慢慢的读好几本书的方式,所以,这两天又开始读Oracle的书啦(当然,代码大全和MySQL的学习笔记还是会继续的),哈哈;Oracle之前的项目虽然有接触,但都被Hibernate堵在后面了,没怎么深入了解过,所以还是希望认识它多一点... [本文参考了《Oracle参考手册》] 传统的数据库大多是关系型数据库(RDBMS),而Oracle8之后引入了面向对象的概念,这种数据库就称之为“对象关系型数据库管理系统”(ORDBMS) 使用过关系型数据库或者使用过数据库中关系型功能的朋友一定会问,为什么要在数 ...
Global site tag (gtag.js) - Google Analytics