Up Top

Serviceability 機能 : JVMTI に関するソースコードの構成


参考(for your information)

http://openjdk.java.net/groups/hotspot/docs/jvmtiImpl.pdf : JVM Tool Interface (JVM TI) Implementation in HotSpot, Copyright 2007, Sun Microsystems, Inc

概要(Summary)

JVMTI 関係のソースコードは hotspot/src/share/vm/prims/ ディレクトリ下にある (See: here for details).

ただし, JVMTI 関係のソースコードの中には, ビルド時に hotspot/src/share/vm/prims/jvmti.xml という XML ファイルから XSLT で自動生成されるものがある.

そのため, ビルド手順は以下のようになっている.

  1. まず jvmtiGen.class という XSLT 処理用プログラムをビルドする.
  2. 次にそのプログラムを使って jvmti.xml からソースコードを生成する
  3. 最後にそのソースコードを使って HotSpot をビルドする

備考(Notes)

備考(Notes)

以下, 生成されるソースコードと生成元の一覧.

Generated Files Original Files
jvmtiEnter.cpp jvmtiEnter.xsl (パラメータは interface jvmti)
jvmtiEnterTrace.cpp jvmtiEnter.xsl (パラメータは trace Trace)
jvmtiEnvRecommended.cpp jvmtiEnv.xsl (※)
jvmtiEnv.hpp jvmtiHpp.xsl
jvmti.h jvmtiH.xsl
bytecodeInterpreterWithChecks.cpp bytecodeInterpreterWithChecks.xml, bytecodeInterpreterWithChecks.xsl
jvmti.html jvmti.xsl

(※) 正確には, まず jvmtiEnv.xsl から jvmtiEnvStub.cpp を作成し, その後 jvmtiEnvFill.class という Java プログラムで jvmtiEnvRecommended.cpp を生成する. jvmtiEnvStub.cpp は JvmtiEnv クラスのメソッド定義を書いたファイル. ただし各メソッドの body 部分には単に "return JVMTI_ERROR_MUST_POSSESS_CAPABILITY" とだけ書かれている. その後で jvmtiEnvFill.class プログラムが jvmtiEnv.cpp から各関数の中身を抽出してくることで jvmtiEnvRecommended.cpp が生成される. (ところで jvmtiEnvRecommended.cpp は何のためのファイル?? #TODO)

参考(for your information): 該当する Makefile 中の指示箇所

    ((cite: hotspot/make/linux/makefiles/jvmti.make))
    $(JvmtiOutDir)/jvmtiEnter.cpp: $(both) $(JvmtiSrcDir)/jvmtiEnter.xsl
        @echo Generating $@
        $(XSLT) -IN $(JvmtiSrcDir)/jvmti.xml -XSL $(JvmtiSrcDir)/jvmtiEnter.xsl -OUT $(JvmtiOutDir)/jvmtiEnter.cpp -PARAM interface jvmti
    ((cite: hotspot/make/linux/makefiles/jvmti.make))
    $(JvmtiOutDir)/jvmtiEnterTrace.cpp: $(both) $(JvmtiSrcDir)/jvmtiEnter.xsl
        @echo Generating $@
        $(XSLT) -IN $(JvmtiSrcDir)/jvmti.xml -XSL $(JvmtiSrcDir)/jvmtiEnter.xsl -OUT $(JvmtiOutDir)/jvmtiEnterTrace.cpp -PARAM interface jvmti -PARAM trace Trace
    ((cite: hotspot/make/linux/makefiles/jvmti.make))
    $(JvmtiOutDir)/jvmtiEnvRecommended.cpp: $(both) $(JvmtiSrcDir)/jvmtiEnv.xsl $(JvmtiSrcDir)/jvmtiEnv.cpp $(JvmtiEnvFillClass)
        @echo Generating $@
        $(XSLT) -IN $(JvmtiSrcDir)/jvmti.xml -XSL $(JvmtiSrcDir)/jvmtiEnv.xsl -OUT $(JvmtiOutDir)/jvmtiEnvStub.cpp
        $(QUIETLY) $(REMOTE) $(RUN.JAVA) -classpath $(JvmtiOutDir) jvmtiEnvFill $(JvmtiSrcDir)/jvmtiEnv.cpp $(JvmtiOutDir)/jvmtiEnvStub.cpp $(JvmtiOutDir)/jvmtiEnvRecommended.cpp
    ((cite: hotspot/make/linux/makefiles/jvmti.make))
    $(JvmtiOutDir)/jvmtiEnv.hpp: $(both) $(JvmtiSrcDir)/jvmtiHpp.xsl
        @echo Generating $@
        $(XSLT) -IN $(JvmtiSrcDir)/jvmti.xml -XSL $(JvmtiSrcDir)/jvmtiHpp.xsl -OUT $(JvmtiOutDir)/jvmtiEnv.hpp
    ((cite: hotspot/make/linux/makefiles/jvmti.make))
    $(JvmtiOutDir)/jvmti.h: $(both) $(JvmtiSrcDir)/jvmtiH.xsl
        @echo Generating $@
        $(XSLT) -IN $(JvmtiSrcDir)/jvmti.xml -XSL $(JvmtiSrcDir)/jvmtiH.xsl -OUT $(JvmtiOutDir)/jvmti.h
    ((cite: hotspot/make/linux/makefiles/jvmti.make))
    $(JvmtiOutDir)/bytecodeInterpreterWithChecks.cpp: $(JvmtiGenClass) $(InterpreterSrcDir)/bytecodeInterpreter.cpp $(InterpreterSrcDir)/bytecodeInterpreterWithChecks.xml $(InterpreterSrcDir)/bytecodeInterpreterWithChecks.xsl
        @echo Generating $@
        $(XSLT) -IN $(InterpreterSrcDir)/bytecodeInterpreterWithChecks.xml -XSL $(InterpreterSrcDir)/bytecodeInterpreterWithChecks.xsl -OUT $(JvmtiOutDir)/bytecodeInterpreterWithChecks.cpp 
    ((cite: hotspot/make/linux/makefiles/jvmti.make))
    $(JvmtiOutDir)/jvmti.html: $(both) $(JvmtiSrcDir)/jvmti.xsl
        @echo Generating $@
        $(XSLT) -IN $(JvmtiSrcDir)/jvmti.xml -XSL $(JvmtiSrcDir)/jvmti.xsl -OUT $(JvmtiOutDir)/jvmti.html

This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.