现在的位置: 首页 > 综合 > 正文

Oracle 内嵌 java 的问题

2013年03月16日 ⁄ 综合 ⁄ 共 768字 ⁄ 字号 评论关闭
用 CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "J1" AS ......建立了一个 java class,用

CREATE OR REPLACE function f1
(
    P1 in varchar2,
    P2 in varchar2
) return varchar2
as language java
name 'J1.M1(java.lang.String,java.lang.String) return java.lang.String';

函数调用,每次数据库新连接后第一次运行很慢,再运行就快了。原因是:

    在一个 session 里第一次运行 Java 时,Oracle 加载与这个 session 关联的 vjvm(一个虚拟的java虚拟机),这个过程需要一些时间。vjvm 加载后,同一会话中的 java 运行时不需要再次加载 vjvm,运行速度也就快了。那能否预先加载 vjvm,这样第一次运行不就也快了。可惜目前 Oracle 还不支持。

    Oracle 基于会话加载 vjvm 的过程是透明的,没有提供显示的命令来启动 session vjvm,所以还不能配置一个 per-session VM。10G 虽然提供了一个 ojvmjava 的应用程序,但并没有解决上面提出的问题。而且有些国外论坛上说在 Oracle 中执行 java 比在外部执行慢10倍。总之 Oracle 虽然内嵌 java,但应用时最好把 java 写在数据库外部,而让 Oracle 只做数据库的事情,这样执行效率会好些。

参考:
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:361617955080
http://forums.oracle.com/forums/thread.jspa?threadID=372527
 

抱歉!评论已关闭.