ASM

ASM 知识详解

我怕爱的太早我们不能终老 提交于 2019-12-08 10:04:08
ASM 知识详解 做了几次RAC,最近复习了一下 ASM 相关知识,总结了一下。 [@more@] 一、 ASM 概述 ASM 的实现要创建一个普通的 ORACLE 实例 , 其中参数 INSTANCE_TYPE=ASM 被设置为数据库驻留的节点上某个 ASM 的值。该实例并没有相关的数据库,而只是用来管理被数据库访问的磁盘。 ASM 可以创建一个或多个磁盘(通常是 RAW 格式,标准的 NFS 存储也可以)组成的 ASM 磁盘组。在组里可以存放所有的 ORACLE 文件,如 spfile,controlfile,redolog,datafile 。 并且在 1MB 的大小区间中存放文件,尽管有很多磁盘是可用的。区间的大小是 1M ,这对于除控制文件和日志文件之外的文件都是一样的,重做日志,控件文件和日志文件默认使用的是细粒度分割带,其区间大小是 128K 。这是将大 I/O 分割成较小的块,并由更多的磁盘进行处理,从而提高这些类型文件的性能。 在磁盘组生成时需设置冗余级别。假设使用一般的冗余(双重镜像),而我们磁盘组里有五个盘。如果在该组上创建一个 10MB 的文件,那么第一个 1MB 的区间可能被镜像在磁盘 3 和磁盘 5 上,下一个 1MB 的区间可能被镜像在磁盘 2 和磁盘 4 上,再下一个区间可能被镜像在磁盘 1 和磁盘 3 上,如此下去。镜像完成后,每个区间都被镜像了

ASM原理详解,以及使用附代码,AOP利器

雨燕双飞 提交于 2019-12-08 10:03:49
少年,git代码,带你快速理解: https://github.com/singgel/eight-sorting-algorithms/tree/master/src/test/java/com/hks/eightsortingalgorithms/asm 一、什么是ASM   ASM是一个java字节码操纵框架,它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java class 被存储在严格格式定义的 .class文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称、方法、属性以及 Java 字节码(指令)。ASM从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。asm字节码增强技术主要是用来反射的时候提升性能的,如果单纯用jdk的反射调用,性能是非常低下的,而使用字节码增强技术后反射调用的时间已经基本可以与直接调用相当了   使用ASM框架需要导入asm的jar包,下载链接:asm-3.2.jar。 二、如何使用ASM   ASM框架中的核心类有以下几个:   ① ClassReader:该类用来解析编译过的class字节码文件。   ② ClassWriter:该类用来重新构建编译后的类,比如说修改类名、属性以及方法

ASM(一) 利用Core API 解析和生成字节码

*爱你&永不变心* 提交于 2019-12-08 10:03:21
ASM 是一个提供字节码解析和操作的框架。Cglib框架就是基于ASM框架实现的,被广泛应用的Hibernate,Spring就是基于Cglib 实现了AOP技术。 在说到AOP的Java实现,可能会优先想到java的Proxy api,通过invoke方法拦截处理相应的代码逻辑,但是proxy 是面向接口的,被代理的class的所有方法调用都会通过反射调用invoke 方法,相对性能开销大。另外的还有Java 5提供的Instrument,比较适用于监控检查方面,但在处理灵活的代码逻辑方面并不合适。 ASM 框架对用户屏蔽了整个类字节码的长度,偏移量,能够更加灵活和方便得实现对字节码的解析和操作。其主要提供了两部分主要的API,Core Api 及Tree Api。 ASM 提供了两组API:Core和Tree: Core是基于访问者模式来操作类 Tree是基于树节点来操作类的 本文先从Core Api的解析和生成字节码开始介绍。 ASM 内部采用 访问者模式 将 .class 类文件的内容从头到尾扫描一遍,每次扫描到类文件相应的内容时,都会调用 ClassVisitor 内部相应的方法。 比如: 扫描到类文件时,会回调 ClassVisitor 的 visit() 方法; 扫描到类注解时,会回调 ClassVisitor 的 visitAnnotation() 方法;

Oracle ASM 详解

我与影子孤独终老i 提交于 2019-12-08 10:02:37
ASM:Automatic Storage Management , 是 Oracle 主推的一种面向 Oracle 的存储解决方案, ASM 和 RDBMS 非常相似, ASM 也是由实例和文件组成, 也可以通过 sqlplus 工具来维护。 ASM 实例的创建和删除也可以用 DBCA 这个命令来操作 。 在 dbca 的第一个界面选择 配置自动存储管理 就可以了。 ASM 实例需要 CSS 进程, 如果是非 RAC 环境, 在启动 ASM 实例之前会提示用脚本 $ORACLE_HOME/bin/localconfig add 启动 CSS 。 1. ASM 实例由 SGA 和后台进程组成。 1.1 SGA 组成 : ASM 实例的 SGA 包括 Buffer Cache , Share Pool , Large Pool 等。 需要注意的是 Share Pool , 因为 Extent Map 要放在这部分的内存中,需要更具数据量来估计 Extent Map 的大小做相应的调整。 Extent Map 的大小可以根据所有文件大小的和来估算,使用下面的语句来计算所有文件和: Select sum(bytes)/(1024*1024*1024) from v$datafile; Select sum(bytes)/(1024*1024*1024) from v$logfile a,

ASM核心API-元数据

我的梦境 提交于 2019-12-08 10:02:09
AMS4使用指南 实战java虚拟机 泛型 类使用泛型 在类定义当中使用范型时,需要增加Signature字段来添加范型信息。该Signature的组成是 “<范型参数名:范型扩展的类:范型扩展的接口…>父类描述接口描述” cw.visit(V1_7, ACC_PUBLIC, clazzPath, "<T:Ljava/lang/String;G:Ljava/lang/Date;>Ljava/lang/Thread;Ljava/lang/AutoCloseable;" , "java/lang/Thread" , new String [] { "java/lang/AutoCloseable" }); 结果 package cn.asm; public class Generic < T extends String , G extends Date > extends Thread implements AutoCloseable { } 字段使用泛型 cw .visitField (ACC_PRIVATE, "cache" , "Ljava/util/Map;" , "Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;" , null) .visitEnd () ; 结果 private Map < String ,

ASM管理详解

放肆的年华 提交于 2019-12-08 10:01:24
一.创建/删除asm磁盘组: 1.在操作系统创建ASM磁盘 /etc/init.d/oracleasm create VOL4 /dev/sde1 2.在oralce里添加此块asm磁盘 create diskgroup diskgroup_name <high|normal|external> redundancy failgroup failgroup_name disk 'disk_nmae' name asm_disk_name ... ; 说明: failgroup (故障组)的个数的限制: HIGH ---------- failgroup >= 3 NORMAL ---------- failgroup >= 2 EXTERNAL -------- failgroup == 0 (不能指定故障组) SQL>create diskgroup DATA2 external redundancy disk 'ORCL:VOL4'; --如果是创建external磁盘组,那么就无需指定故障组。 SQL>create diskgroup DATA2 normal redundnacy failgroup DATA2_FG_1 disk 'ORCL:VOL4' failgroup DATA2_FG_2 disk 'ORCL:VOL6' / --创建一个normal磁盘组

asm详解

这一生的挚爱 提交于 2019-12-08 09:59:03
ASM:Automatic Storage Management, 是Oracle 主推的一种面向Oracle的存储解决方案, ASM 和 RDBMS 非常相似,ASM 也是由实例和文件组成, 也可以通过sqlplus 工具来维护。 ASM 实例的创建和删除也可以用DBCA 这个命令来操作。在dbca 的第一个界面选择配置自动存储管理就可以了。 ASM 实例需要CSS 进程, 如果是非RAC 环境, 在启动ASM 实例之前会提示用脚本 $ORACLE_HOME/bin/localconfig add 启动CSS。 1. ASM 实例由SGA 和后台进程组成。 1.1 SGA 组成: ASM 实例的SGA包括Buffer Cache, Share Pool, Large Pool等。 需要注意的是Share Pool, 因为Extent Map 要放在这部分的内存中,需要更具数据量来估计Extent Map 的大小做相应的调整。 Extent Map 的大小可以根据所有文件大小的和来估算,使用下面的语句来计算所有文件和: Select sum(bytes)/(1024*1024*1024) from v$datafile; Select sum(bytes)/(1024*1024*1024) from v$logfile a, v$log b where a.Group#=b

asm-giude阅读笔记003(ASM核心API接口和对应组件---读取字节码)

亡梦爱人 提交于 2019-12-08 09:58:46
2.2 接口和组件 2.2.1 介绍 ASM API 生成和转换Java字节码的操作都是基于ClassVisitor这个接口的。这个接口中的方法的方法名都是与字节码文件中节的名字对应的。 ClassVisitor 接口的代码清单: public interface ClassVisitor { void visit(int version, int access, String name, String signature, String superName, String[] interfaces); void visitSource(String source, String debug); void visitOuterClass(String owner, String name, String desc); AnnotationVisitor visitAnnotation(String desc, boolean visible); void visitAttribute(Attribute attr); void visitInnerClass(String name, String outerName, String innerName, int access); FieldVisitor visitField(int access, String name,

Asm 详解

佐手、 提交于 2019-12-08 09:58:35
Asm 是什么? The ASM1 library was therefore designed to work on compiled Java classes. It was also designed to be as fast and as small as possible. Being as fast as possible is important in order not to slow down too much the applications that use ASM at runtime, for dynamic class generation or transformation. And being as small as possible is important in order to be used in memory constrained environments, and to avoid bloating the size of small applications or libraries using ASM. Asm 是用于动态改变或者生成class 文件的。在某些领域是非常方便的。 Asm 核心APi ClassReader : 去读class 文件,包括从文件流里面读取。 ClassWriter :生成class 文件

Java中ASM框架详解

戏子无情 提交于 2019-12-08 09:58:19
什么是asm呢?asm是assembly的缩写,是汇编的称号,对于java而言,asm就是字节码级别的编程。 而这里说到的asm是指objectweb asm,一种.class的代码生成器的开源项目. ASM是一套java字节码生成架构,它可以动态生成二进制格式的stub类或其它代理类, 或者在类被java虚拟机装入内存之前,动态修改类。 现在挺多流行的框架都使用到了asm.所以从aop追溯来到了这。 1.什么是ObjectWeb ASM ObjectWeb ASM是轻量级的Java字节码处理框架。它可以动态生成二进制格式的stub类或其他代理类,或者在类被JAVA虚拟机装入内存之前,动态修改类。 ASM 提供了与 BCEL和SERP相似的功能,只有22K的大小,比起350K的BCEL和150K的SERP来说,是相当小巧的,并且它有更高的执行效率, 是BCEL 的7倍,SERP的11倍以上。 在我看来,ObjectWeb ASM具有如下几个非常诱人的特点 * 小巧、高效 * 源代码实现非常简洁而又优雅,简直就是Gof的《设计模式》非常棒的注解 * 字节码级的控制,能够更高效地实现字节码的控制 ObjectWeb ASM有2组接口: * 基于事件驱动的接口,类似于xml的SAX接口,visitor模式,在访问到类定义某个部分的时候进行回调,实现上比tree接口高效,占用内存更小 *