• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Java OutputAnalyzer类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了Java中com.oracle.java.testlibrary.OutputAnalyzer的典型用法代码示例。如果您正苦于以下问题:Java OutputAnalyzer类的具体用法?Java OutputAnalyzer怎么用?Java OutputAnalyzer使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。



OutputAnalyzer类属于com.oracle.java.testlibrary包,在下文中一共展示了OutputAnalyzer类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Java代码示例。

示例1: main

import com.oracle.java.testlibrary.OutputAnalyzer; //导入依赖的package包/类
public static void main(String[] args) throws Exception, Throwable {
    ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
            "-XX:InitialHeapSize=" + INITIAL_HEAP_SIZE,
            "-Xmn" + MINIMAL_YOUNG_SIZE,
            "-XX:MinHeapFreeRatio=10",
            "-XX:MaxHeapFreeRatio=11",
            "-XX:+UseG1GC",
            "-XX:G1HeapRegionSize=" + REGION_SIZE,
            "-XX:-ExplicitGCInvokesConcurrent",
            "-verbose:gc",
            GCTest.class.getName()
    );

    OutputAnalyzer output = ProcessTools.executeProcess(pb);
    output.shouldHaveExitValue(0);
}
 
开发者ID:ojdkbuild,项目名称:lookaside_java-1.8.0-openjdk,代码行数:17,代码来源:TestShrinkDefragmentedHeap.java


示例2: testGCLogs

import com.oracle.java.testlibrary.OutputAnalyzer; //导入依赖的package包/类
private static void testGCLogs() throws Exception {

    ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC",
                                               "-Xms128M",
                                               "-Xmx128M",
                                               "-Xmn16M",
                                               "-XX:G1HeapRegionSize=1M",
                                               "-XX:+PrintGC",
                                               "-XX:+UnlockExperimentalVMOptions",
                                               "-XX:G1LogLevel=finest",
                                               "-XX:+G1TraceEagerReclaimHumongousObjects",
                                               GCTest.class.getName());

    OutputAnalyzer output = new OutputAnalyzer(pb.start());

    // As G1EagerReclaimHumongousObjects is set(default), below logs should be displayed.
    // And GCTest doesn't have humongous objects, so values should be zero.
    output.shouldContain("[Humongous Reclaim");
    output.shouldContain("[Humongous Total: 0]");
    output.shouldContain("[Humongous Candidate: 0]");
    output.shouldContain("[Humongous Reclaimed: 0]");

    output.shouldHaveExitValue(0);
  }
 
开发者ID:ojdkbuild,项目名称:lookaside_java-1.8.0-openjdk,代码行数:25,代码来源:TestG1TraceEagerReclaimHumongousObjects.java


示例3: testHumongousObjectGCLogs

import com.oracle.java.testlibrary.OutputAnalyzer; //导入依赖的package包/类
private static void testHumongousObjectGCLogs() throws Exception {
  ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC",
                                             "-Xms128M",
                                             "-Xmx128M",
                                             "-Xmn16M",
                                             "-XX:G1HeapRegionSize=1M",
                                             "-XX:+PrintGC",
                                             "-XX:+UnlockExperimentalVMOptions",
                                             "-XX:G1LogLevel=finest",
                                             "-XX:+G1TraceEagerReclaimHumongousObjects",
                                             GCWithHumongousObjectTest.class.getName());

  OutputAnalyzer output = new OutputAnalyzer(pb.start());

  // As G1ReclaimDeadHumongousObjectsAtYoungGC is set(default), below logs should be displayed.
  output.shouldContain("[Humongous Reclaim");
  output.shouldContain("[Humongous Total");
  output.shouldContain("[Humongous Candidate");
  output.shouldContain("[Humongous Reclaimed");

  // As G1TraceReclaimDeadHumongousObjectsAtYoungGC is set and GCWithHumongousObjectTest has humongous objects,
  // these logs should be displayed.
  output.shouldContain("Live humongous");
  output.shouldContain("Dead humongous region");
  output.shouldHaveExitValue(0);
}
 
开发者ID:ojdkbuild,项目名称:lookaside_java-1.8.0-openjdk,代码行数:27,代码来源:TestG1TraceEagerReclaimHumongousObjects.java


示例4: main

import com.oracle.java.testlibrary.OutputAnalyzer; //导入依赖的package包/类
public static void main(String[] args) throws Exception {
    ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
        "-XX:+UseG1GC",
        "-Xms128M",
        "-Xmx128M",
        "-Xmn16M",
        "-XX:+PrintGC",
        ReclaimRegionFast.class.getName());

    Pattern p = Pattern.compile("Full GC");

    OutputAnalyzer output = new OutputAnalyzer(pb.start());

    int found = 0;
    Matcher m = p.matcher(output.getStdout());
    while (m.find()) { found++; }
    System.out.println("Issued " + found + " Full GCs");
    Asserts.assertLT(found, 10, "Found that " + found + " Full GCs were issued. This is larger than the bound. Eager reclaim seems to not work at all");

    output.shouldHaveExitValue(0);
}
 
开发者ID:ojdkbuild,项目名称:lookaside_java-1.8.0-openjdk,代码行数:22,代码来源:TestEagerReclaimHumongousRegions.java


示例5: main

import com.oracle.java.testlibrary.OutputAnalyzer; //导入依赖的package包/类
public static void main(String[] args) throws Exception {
    ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
        "-XX:+UseG1GC",
        "-Xms128M",
        "-Xmx128M",
        "-Xmn16M",
        "-XX:+PrintGC",
        ReclaimRegionFast.class.getName());

    Pattern p = Pattern.compile("Full GC");

    OutputAnalyzer output = new OutputAnalyzer(pb.start());

    int found = 0;
    Matcher m = p.matcher(output.getStdout());
    while (m.find()) {
        found++;
    }
    System.out.println("Issued " + found + " Full GCs");

    assertLessThan(found, 10, "Found that " + found + " Full GCs were issued. This is larger than the bound. Eager reclaim of objects once referenced from old gen seems to not work at all");
    output.shouldHaveExitValue(0);
}
 
开发者ID:ojdkbuild,项目名称:lookaside_java-1.8.0-openjdk,代码行数:24,代码来源:TestEagerReclaimHumongousRegionsWithRefs.java


示例6: main

import com.oracle.java.testlibrary.OutputAnalyzer; //导入依赖的package包/类
public static void main(String[] args) throws Exception {
    ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
        "-XX:+UseG1GC",
        "-Xms128M",
        "-Xmx128M",
        "-Xmn2M",
        "-XX:G1HeapRegionSize=1M",
        "-XX:InitiatingHeapOccupancyPercent=0", // Want to have as much as possible initial marks.
        "-XX:+PrintGC",
        "-XX:+VerifyAfterGC",
        "-XX:ConcGCThreads=1", // Want to make marking as slow as possible.
        "-XX:+IgnoreUnrecognizedVMOptions", // G1VerifyBitmaps is develop only.
        "-XX:+G1VerifyBitmaps",
        ReclaimRegionFast.class.getName());
    OutputAnalyzer output = new OutputAnalyzer(pb.start());
    output.shouldHaveExitValue(0);
}
 
开发者ID:ojdkbuild,项目名称:lookaside_java-1.8.0-openjdk,代码行数:18,代码来源:TestEagerReclaimHumongousRegionsClearMarkBits.java


示例7: main

import com.oracle.java.testlibrary.OutputAnalyzer; //导入依赖的package包/类
public static void main(String[] args) throws Exception {
  ArrayList<String> testArguments = new ArrayList<String>();

  testArguments.add("-XX:+UseG1GC");
  testArguments.add("-Xmx2g");
  testArguments.add("-version");

  ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(testArguments.toArray(new String[0]));

  OutputAnalyzer output = new OutputAnalyzer(pb.start());

  // Avoid failing test for setups not supported.
  if (output.getOutput().contains("Could not reserve enough space for 2097152KB object heap")) {
    // Will fail on machines with too little memory (and Windows 32-bit VM), ignore such failures.
    output.shouldHaveExitValue(1);
  } else if (output.getOutput().contains("G1 GC is disabled in this release")) {
    // G1 is not supported on embedded, ignore such failures.
    output.shouldHaveExitValue(1);
  } else {
    // Normally everything should be fine.
    output.shouldHaveExitValue(0);
  }
}
 
开发者ID:ojdkbuild,项目名称:lookaside_java-1.8.0-openjdk,代码行数:24,代码来源:Test2GbHeap.java


示例8: testGCId

import com.oracle.java.testlibrary.OutputAnalyzer; //导入依赖的package包/类
private static void testGCId(String gcFlag, String logFlag) throws Exception {
  // GCID logging enabled
  ProcessBuilder pb_enabled =
    ProcessTools.createJavaProcessBuilder("-XX:+" + gcFlag, "-XX:+" + logFlag, "-Xmx10M", "-XX:+PrintGCID", GCTest.class.getName());
  verifyContainsGCIDs(new OutputAnalyzer(pb_enabled.start()));

  // GCID logging disabled
  ProcessBuilder pb_disabled =
    ProcessTools.createJavaProcessBuilder("-XX:+" + gcFlag, "-XX:+" + logFlag, "-Xmx10M", "-XX:-PrintGCID", GCTest.class.getName());
  verifyContainsNoGCIDs(new OutputAnalyzer(pb_disabled.start()));

  // GCID logging default
  ProcessBuilder pb_default =
    ProcessTools.createJavaProcessBuilder("-XX:+" + gcFlag, "-XX:+" + logFlag, "-Xmx10M", GCTest.class.getName());
  verifyContainsNoGCIDs(new OutputAnalyzer(pb_default.start()));
}
 
开发者ID:ojdkbuild,项目名称:lookaside_java-1.8.0-openjdk,代码行数:17,代码来源:TestGCId.java


示例9: testDynamicNumberOfGCThreads

import com.oracle.java.testlibrary.OutputAnalyzer; //导入依赖的package包/类
private static void testDynamicNumberOfGCThreads(String gcFlag) throws Exception {
  // UseDynamicNumberOfGCThreads and TraceDynamicGCThreads enabled
  String[] baseArgs = {"-XX:+" + gcFlag, "-Xmx10M", "-XX:+PrintGCDetails",  "-XX:+UseDynamicNumberOfGCThreads", "-XX:+TraceDynamicGCThreads", GCTest.class.getName()};

  // Base test with gc and +UseDynamicNumberOfGCThreads:
  ProcessBuilder pb_enabled = ProcessTools.createJavaProcessBuilder(baseArgs);
  verifyDynamicNumberOfGCThreads(new OutputAnalyzer(pb_enabled.start()));

  // Ensure it also works on uniprocessors or if user specifies -XX:ParallelGCThreads=1:
  String[] extraArgs = {"-XX:+UnlockDiagnosticVMOptions", "-XX:+ForceDynamicNumberOfGCThreads", "-XX:ParallelGCThreads=1"};
  String[] finalArgs = new String[baseArgs.length + extraArgs.length];
  System.arraycopy(extraArgs, 0, finalArgs, 0,                extraArgs.length);
  System.arraycopy(baseArgs,  0, finalArgs, extraArgs.length, baseArgs.length);
  pb_enabled = ProcessTools.createJavaProcessBuilder(finalArgs);
  verifyDynamicNumberOfGCThreads(new OutputAnalyzer(pb_enabled.start()));
}
 
开发者ID:ojdkbuild,项目名称:lookaside_java-1.8.0-openjdk,代码行数:17,代码来源:TestDynamicNumberOfGCThreads.java


示例10: run

import com.oracle.java.testlibrary.OutputAnalyzer; //导入依赖的package包/类
private static OutputAnalyzer run(boolean enableUnloading) throws Exception {
  ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
    "-Xbootclasspath/a:.",
    "-XX:+UnlockDiagnosticVMOptions",
    "-XX:+WhiteBoxAPI",
    "-Xmx128m",
    "-XX:CMSMaxAbortablePrecleanTime=1",
    "-XX:CMSWaitDuration=50",
    "-XX:MetaspaceSize=" + MetaspaceSize,
    "-Xmn" + YoungGenSize,
    "-XX:+UseConcMarkSweepGC",
    "-XX:" + (enableUnloading ? "+" : "-") + "CMSClassUnloadingEnabled",
    "-XX:+PrintHeapAtGC",
    "-XX:+PrintGCDetails",
    "-XX:+PrintGCTimeStamps",
    TestCMSClassUnloadingEnabledHWM.AllocateBeyondMetaspaceSize.class.getName(),
    "" + MetaspaceSize);
  return new OutputAnalyzer(pb.start());
}
 
开发者ID:ojdkbuild,项目名称:lookaside_java-1.8.0-openjdk,代码行数:20,代码来源:TestCMSClassUnloadingEnabledHWM.java


示例11: run

import com.oracle.java.testlibrary.OutputAnalyzer; //导入依赖的package包/类
private static OutputAnalyzer run(boolean enableUnloading) throws Exception {
  ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
    "-Xbootclasspath/a:.",
    "-XX:+UnlockDiagnosticVMOptions",
    "-XX:+WhiteBoxAPI",
    "-XX:MetaspaceSize=" + MetaspaceSize,
    "-Xmn" + YoungGenSize,
    "-XX:+UseG1GC",
    "-XX:" + (enableUnloading ? "+" : "-") + "ClassUnloadingWithConcurrentMark",
    "-XX:+PrintHeapAtGC",
    "-XX:+PrintGCDetails",
    TestG1ClassUnloadingHWM.AllocateBeyondMetaspaceSize.class.getName(),
    "" + MetaspaceSize,
    "" + YoungGenSize);
  return new OutputAnalyzer(pb.start());
}
 
开发者ID:ojdkbuild,项目名称:lookaside_java-1.8.0-openjdk,代码行数:17,代码来源:TestG1ClassUnloadingHWM.java


示例12: runTest

import com.oracle.java.testlibrary.OutputAnalyzer; //导入依赖的package包/类
private static OutputAnalyzer runTest(String subset) throws Exception {
    ArrayList<String> vmOpts = new ArrayList();

    Collections.addAll(vmOpts, getTestJavaOpts());
    Collections.addAll(vmOpts, new String[] {"-XX:+UnlockDiagnosticVMOptions",
                                             "-XX:+VerifyBeforeGC",
                                             "-XX:+VerifyAfterGC",
                                             "-XX:VerifySubSet="+subset,
                                             RunSystemGC.class.getName()});
    ProcessBuilder pb =
        ProcessTools.createJavaProcessBuilder(vmOpts.toArray(new String[vmOpts.size()]));
    OutputAnalyzer output = new OutputAnalyzer(pb.start());

    System.out.println("Output:\n" + output.getOutput());
    return output;
}
 
开发者ID:ojdkbuild,项目名称:lookaside_java-1.8.0-openjdk,代码行数:17,代码来源:TestVerifySubSet.java


示例13: main

import com.oracle.java.testlibrary.OutputAnalyzer; //导入依赖的package包/类
public static void main(String args[]) throws Exception {

        OutputAnalyzer output;

        output = runTest("heap, threads, codecache, metaspace");
        output.shouldContain("Heap");
        output.shouldContain("Threads");
        output.shouldContain("CodeCache");
        output.shouldContain("MetaspaceAux");
        output.shouldNotContain("SymbolTable");
        output.shouldNotContain("StringTable");
        output.shouldNotContain("SystemDictionary");
        output.shouldNotContain("CodeCache Oops");
        output.shouldHaveExitValue(0);

        output = runTest("hello, threads, codecache, metaspace");
        output.shouldContain("memory sub-system is unknown, please correct it");
        output.shouldNotContain("Threads");
        output.shouldNotContain("CodeCache");
        output.shouldNotContain("MetaspaceAux");
        output.shouldHaveExitValue(1);
    }
 
开发者ID:ojdkbuild,项目名称:lookaside_java-1.8.0-openjdk,代码行数:23,代码来源:TestVerifySubSet.java


示例14: runTest

import com.oracle.java.testlibrary.OutputAnalyzer; //导入依赖的package包/类
private static OutputAnalyzer runTest(boolean verifySilently) throws Exception {
  ArrayList<String> vmOpts = new ArrayList();

  Collections.addAll(vmOpts, getTestJavaOpts());
  Collections.addAll(vmOpts, new String[] {"-XX:+UnlockDiagnosticVMOptions",
                                           "-XX:+VerifyDuringStartup",
                                           "-XX:+VerifyBeforeGC",
                                           "-XX:+VerifyAfterGC",
                                           "-XX:" + (verifySilently ? "+":"-") + "VerifySilently",
                                           RunSystemGC.class.getName()});
  ProcessBuilder pb =
    ProcessTools.createJavaProcessBuilder(vmOpts.toArray(new String[vmOpts.size()]));
  OutputAnalyzer output = new OutputAnalyzer(pb.start());

  System.out.println("Output:\n" + output.getOutput());
  return output;
}
 
开发者ID:ojdkbuild,项目名称:lookaside_java-1.8.0-openjdk,代码行数:18,代码来源:TestVerifySilently.java


示例15: expect

import com.oracle.java.testlibrary.OutputAnalyzer; //导入依赖的package包/类
public void expect(Flag... expectedFlags) throws Exception {
  if (useFlags == null) {
    throw new IllegalStateException("Must run use() before expect()");
  }

  OutputAnalyzer output = executeNewJVM(useFlags);

  for (Flag flag : expectedFlags) {
    System.out.println("Looking for: " + flag.flagString());
    String strValue = output.firstMatch(".* " + flag.name() +  " .* :?= (\\S+).*", 1);

    if (strValue == null) {
      throw new RuntimeException("Flag " + flag.name() + " couldn't be found");
    }

    if (!flag.value().equals(strValue)) {
      throw new RuntimeException("Wrong value for: " + flag.name()
                                 + " expected: " + flag.value()
                                 + " got: " + strValue);
    }
  }

  output.shouldHaveExitValue(0);
}
 
开发者ID:ojdkbuild,项目名称:lookaside_java-1.8.0-openjdk,代码行数:25,代码来源:TestLargePagesFlags.java


示例16: main

import com.oracle.java.testlibrary.OutputAnalyzer; //导入依赖的package包/类
public static void main(String[] args) throws Exception {
    if (args.length == 1) {
        // This should guarantee to throw:
        // java.lang.OutOfMemoryError: Requested array size exceeds VM limit
        try {
            Object[] oa = new Object[Integer.MAX_VALUE];
            throw new Error("OOME not triggered");
        } catch (OutOfMemoryError err) {
            throw new Error("OOME didn't terminate JVM!");
        }
    }

    // else this is the main test
    ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+ExitOnOutOfMemoryError",
            "-Xmx64m", TestExitOnOutOfMemoryError.class.getName(), "throwOOME");
    OutputAnalyzer output = new OutputAnalyzer(pb.start());

    /*
     * Actual output should look like this:
     * Terminating due to java.lang.OutOfMemoryError: Requested array size exceeds VM limit
     */
    output.shouldHaveExitValue(3);
    output.shouldContain("Terminating due to java.lang.OutOfMemoryError: Requested array size exceeds VM limit");
    System.out.println("PASSED");
}
 
开发者ID:ojdkbuild,项目名称:lookaside_java-1.8.0-openjdk,代码行数:26,代码来源:TestExitOnOutOfMemoryError.java


示例17: main

import com.oracle.java.testlibrary.OutputAnalyzer; //导入依赖的package包/类
public static void main (String args[]) throws Exception {
    if (args.length == 1) {
        final int loops = Integer.parseInt(args[0]);
        for (int i = 0; i < loops; i++) {
            _num.addAndGet(1);
        }
    } else {
        ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
                "-XX:+IgnoreUnrecognizedVMOptions",
                "-XX:-TieredCompilation",
                "-XX:+UseBiasedLocking",
                "-XX:BiasedLockingStartupDelay=500",
                "-XX:+SafepointTimeout",
                "-XX:SafepointTimeoutDelay=2000",
                "-XX:+UseCountedLoopSafepoints",
                "UseCountedLoopSafepoints",
                "2000000000"
                );
        OutputAnalyzer output = new OutputAnalyzer(pb.start());
        output.shouldNotContain("Timeout detected");
        output.shouldHaveExitValue(0);
    }
}
 
开发者ID:ojdkbuild,项目名称:lookaside_java-1.8.0-openjdk,代码行数:24,代码来源:UseCountedLoopSafepoints.java


示例18: main

import com.oracle.java.testlibrary.OutputAnalyzer; //导入依赖的package包/类
public static void main(String args[]) throws Exception {
  ArrayList<String> vmOpts = new ArrayList<>();
  String testVmOptsStr = System.getProperty("test.java.opts");
  if (!testVmOptsStr.isEmpty()) {
    String[] testVmOpts = testVmOptsStr.split(" ");
    Collections.addAll(vmOpts, testVmOpts);
  }
  Collections.addAll(vmOpts, new String[] {"-Xmx3072m", "-XX:MaxPermSize=1024m", "-version"});

  ProcessBuilder pb
    = ProcessTools.createJavaProcessBuilder(vmOpts.toArray(new String[vmOpts.size()]));
  OutputAnalyzer output = new OutputAnalyzer(pb.start());

  String dataModel = System.getProperty("sun.arch.data.model");
  if (dataModel.equals("32")) {
    output.shouldContain("The size of the object heap + perm gen exceeds the maximum representable size");
    if (output.getExitValue() == 0) {
      throw new RuntimeException("Not expected to get exit value 0");
    }
  }
}
 
开发者ID:alexkasko,项目名称:openjdk-icedtea7,代码行数:22,代码来源:TestHandleExceedingProcessSizeLimitIn32BitBuilds.java


示例19: main

import com.oracle.java.testlibrary.OutputAnalyzer; //导入依赖的package包/类
public static void main(String args[]) throws Exception {
  ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseSerialGC", "-version");
  OutputAnalyzer output = new OutputAnalyzer(pb.start());
  output.shouldNotContain("warning");
  output.shouldNotContain("error");
  output.shouldHaveExitValue(0);
}
 
开发者ID:arodchen,项目名称:MaxSim,代码行数:8,代码来源:TestSerialGC.java


示例20: main

import com.oracle.java.testlibrary.OutputAnalyzer; //导入依赖的package包/类
public static void main(String args[]) throws Exception {
  ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseParallelGC", "-XX:-UseParallelOldGC", "-version");
  OutputAnalyzer output = new OutputAnalyzer(pb.start());
  output.shouldNotContain("warning");
  output.shouldNotContain("error");
  output.shouldHaveExitValue(0);
}
 
开发者ID:arodchen,项目名称:MaxSim,代码行数:8,代码来源:TestParallelScavengeSerialOld.java



注:本文中的com.oracle.java.testlibrary.OutputAnalyzer类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Java PackageExplorerPart类代码示例发布时间:2022-05-22
下一篇:
Java COSObject类代码示例发布时间:2022-05-22
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap