当前位置: 首页>>代码示例>>Java>>正文


Java ResolvedJavaMethod.getCode方法代码示例

本文整理汇总了Java中jdk.vm.ci.meta.ResolvedJavaMethod.getCode方法的典型用法代码示例。如果您正苦于以下问题:Java ResolvedJavaMethod.getCode方法的具体用法?Java ResolvedJavaMethod.getCode怎么用?Java ResolvedJavaMethod.getCode使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在jdk.vm.ci.meta.ResolvedJavaMethod的用法示例。


在下文中一共展示了ResolvedJavaMethod.getCode方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: beginGroup

import jdk.vm.ci.meta.ResolvedJavaMethod; //导入方法依赖的package包/类
/**
 * Starts a new group of graphs with the given name, short name and method byte code index (BCI)
 * as properties.
 */
@Override
public void beginGroup(DebugContext debug, String name, String shortName, ResolvedJavaMethod method, int bci, Map<Object, Object> properties) {
    beginGroup();
    beginProperties();
    printProperty("name", name);
    if (properties != null) {
        for (Entry<Object, Object> entry : properties.entrySet()) {
            printProperty(entry.getKey().toString(), entry.getValue().toString());
        }
    }
    endProperties();
    beginMethod(name, shortName, bci);
    if (method != null && method.getCode() != null) {
        printBytecodes(new BytecodeDisassembler(false).disassemble(method));
    }
    endMethod();
}
 
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:22,代码来源:IdealGraphPrinter.java

示例2: tryFastInlineAccessor

import jdk.vm.ci.meta.ResolvedJavaMethod; //导入方法依赖的package包/类
/**
 * Tries to inline {@code targetMethod} if it is an instance field accessor. This avoids the
 * overhead of creating and using a nested {@link BytecodeParser} object.
 */
private boolean tryFastInlineAccessor(ValueNode[] args, ResolvedJavaMethod targetMethod) {
    byte[] bytecode = targetMethod.getCode();
    if (bytecode != null && bytecode.length == ACCESSOR_BYTECODE_LENGTH &&
                    Bytes.beU1(bytecode, 0) == ALOAD_0 &&
                    Bytes.beU1(bytecode, 1) == GETFIELD) {
        int b4 = Bytes.beU1(bytecode, 4);
        if (b4 >= IRETURN && b4 <= ARETURN) {
            int cpi = Bytes.beU2(bytecode, 2);
            JavaField field = targetMethod.getConstantPool().lookupField(cpi, targetMethod, GETFIELD);
            if (field instanceof ResolvedJavaField) {
                ValueNode receiver = invocationPluginReceiver.init(targetMethod, args).get();
                ResolvedJavaField resolvedField = (ResolvedJavaField) field;
                genGetField(resolvedField, receiver);
                notifyBeforeInline(targetMethod);
                printInlining(targetMethod, targetMethod, true, "inline accessor method (bytecode parsing)");
                notifyAfterInline(targetMethod);
                return true;
            }
        }
    }
    return false;
}
 
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:27,代码来源:BytecodeParser.java

示例3: getCodeTest

import jdk.vm.ci.meta.ResolvedJavaMethod; //导入方法依赖的package包/类
/**
 * @see ResolvedJavaMethod#getCode()
 */
@Test
public void getCodeTest() {
    for (Map.Entry<Method, ResolvedJavaMethod> e : methods.entrySet()) {
        ResolvedJavaMethod m = e.getValue();
        byte[] code = m.getCode();
        if (code == null) {
            assertTrue(m.getCodeSize() == 0);
        } else {
            if (m.isAbstract()) {
                assertTrue(code.length == 0);
            } else if (!m.isNative()) {
                assertTrue(code.length > 0);
            }
        }
    }
}
 
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:20,代码来源:TestResolvedJavaMethod.java

示例4: checkSize

import jdk.vm.ci.meta.ResolvedJavaMethod; //导入方法依赖的package包/类
private static boolean checkSize(ResolvedJavaMethod method, ValueNode[] args, StructuredGraph graph) {
    int bonus = 1;
    for (ValueNode v : args) {
        if (v.isConstant()) {
            bonus++;
        }
    }
    return method.getCode().length <= TrivialInliningSize.getValue(graph.getOptions()) * bonus;
}
 
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:10,代码来源:InlineDuringParsingPlugin.java

示例5: testGetBytecodes

import jdk.vm.ci.meta.ResolvedJavaMethod; //导入方法依赖的package包/类
@Test
public void testGetBytecodes() throws NoSuchMethodException {
    Method reflectionMethod = String.class.getDeclaredMethod("hashCode");
    ResolvedJavaMethod method = metaAccess.lookupJavaMethod(reflectionMethod);

    /*
     * ResolvedJavaMethod provides all information that you want about a method, for example,
     * the bytecodes.
     */
    byte[] bytecodes = method.getCode();

    /*
     * BytecodeDisassembler shows you how to iterate bytecodes, how to access type information,
     * and more.
     */
    String disassembly = new BytecodeDisassembler().disassemble(method);

    /*
     * We don't want test cases to print any output, so we check the validity of the output
     * instead.
     */
    Pattern disassemblyLineRE = Pattern.compile(" *\\d+: [a-z][\\w_]+");
    for (String line : disassembly.split("\\n")) {
        Assert.assertTrue(line, disassemblyLineRE.matcher(line).find());
    }
    Assert.assertTrue(bytecodes.length > 0);
}
 
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:28,代码来源:GraalTutorial.java

示例6: getByteCode

import jdk.vm.ci.meta.ResolvedJavaMethod; //导入方法依赖的package包/类
private static byte getByteCode(Call call) {
    ResolvedJavaMethod m = call.debugInfo.getBytecodePosition().getMethod();
    int callPosition = call.debugInfo.getBytecodePosition().getBCI();
    byte[] code = m.getCode();
    return code[callPosition];
}
 
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:7,代码来源:CallInfo.java

示例7: methodCode

import jdk.vm.ci.meta.ResolvedJavaMethod; //导入方法依赖的package包/类
@Override
public byte[] methodCode(ResolvedJavaMethod method) {
    return method.getCode();
}
 
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:5,代码来源:BinaryGraphPrinter.java


注:本文中的jdk.vm.ci.meta.ResolvedJavaMethod.getCode方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。