- 浏览: 191136 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (124)
- java (25)
- 项目学习 (7)
- Web JSP (14)
- English study (1)
- windows (17)
- Thinking in Java (2)
- SSD4 VB (1)
- VB.NET (9)
- CSS (11)
- JQuery (4)
- Struts2 (0)
- spring (1)
- Hibernate (1)
- Dojo (0)
- Prototype (0)
- JSON (1)
- Ajax (1)
- my life my computer (1)
- html (1)
- JavaCC (0)
- c# (1)
- C/C++ (1)
- SQL (0)
- PS (1)
- Linux (21)
- Flex (1)
- mysql (1)
最新评论
-
wshy33:
按照这个“去掉/jre/lib/ext/目录下的jaxen.j ...
xpath的使用遇到的问题 -
白色蜻蜓:
什么是ssh
Linux ---SSH密钥问题解决 -
lucane:
今天请教R大一个问题,然后用他提到的hsdis跑代码看,但是我 ...
JVM 反汇编动态运行代码 -
igotti:
原来-XX:+PrintAssembly还需要安装插件
JVM 反汇编动态运行代码 -
RednaxelaFX:
嗯Good,继续有新的同好开始鼓捣这些东西真好 ^_^我在编译 ...
JVM 反汇编动态运行代码
Java HotSpot(TM) Server VM warning: PrintAssembly is enabled; turning on DebugNonSafepoints to gain additional output
CompilerOracle: dontinline *GenericClass.*
Could not load hsdis-i386.so; library not loadable; PrintAssembly is disabled
//尝试 输出动态的反汇编Code时 ,提示上面的错误。 没有hsdir这个可加载的反汇编的插件(an externally loadable disassembler plugin) 。
对该插件的阐述如下
对该插件的安装等详细参考 http://hg.openjdk.java.net/jdk7/hotspot/hotspot/file/9ad1548c6b63/src/share/tools/hsdis/README
安装过程中需要 binutils这个软件,这个软件版本至少是2.17 , 如果是编译为windows 平台下的dll 则版本至少是2.19。
我采用了当前最新版本。下载地址:http://directory.fsf.org/project/binutils/
下载完加压在 build/目录下,目录结构如下图:
开始编译 ,提供的编译很几种,查看Makefile文件或者README文件可知如下几种:
1, make all
2, make both
3, make demo
4, make clean
(不解释,阴文你懂的)
我选择make all 。
第一编译,得到一个 Warning : 提醒没有安装makeinfo。然后出现该死的Error
OK,安装makeinfo
// sudo apt-get install makeinfo
第二次编译 得到如下错误
没有找到 sysdep.h文件 。
// 查找
find -name sysdep.h
//output
./build/binutils/bfd/sysdep.h
./build/binutils/binutils/sysdep.h
./build/binutils/ld/sysdep.h
./build/binutils/opcodes/sysdep.h
而上面错误提示中编译时 头文件查找路径是
-I/bfd 这是根路径下啊!
查看Makefile 代码 121行。
CPPFLAGS += -I$(BINUTILSDIR)/include -I$(BINUTILS)/bfd -I$(TARGET_DIR)/bfd
以及关于 BINUTILS 值
ifeq ($(BINUTILS),) # Pop all the way out of the workspace to look for binutils. # ...You probably want to override this setting. BINUTILSDIR = $(shell cd build/binutils;pwd) else BINUTILSDIR = $(shell cd $(BINUTILS);pwd) endif
如果未指定 BINUTILS 的话,即 BINUTILS为空, BINUTILSDIR 为 build/binutils
而我编译的时候未指定 BINUTILS ,所以为空。 所以出现 “-I/bfd ”
纠正办法:
1,修改Makefile , (我使用)
-I$(BINUTILS)/bfd
改成
-I$(BINUTILSDIR)/bfd
2 ,编译的时候 加上 参数 BINUTILS = "build/binutils" (未测试)
第三次编译 ,通过。在 bulid/Linux-i586/目录下生成了 hsdis-i386.so
最后,安装.so文件了。方法有二 :
1, Copy hsdis-i386.so 到 java虚拟机安装目录的 jre/lib/i386/client/ 或者 (或和) jre/lib/i386/server/ 下 (跟libjvm.so同一目录)。
2, 将 hsdis-i386.so 添加到 LD_LIBRARY_PATH 里。
vim ~/.bashrc
// 最后一行添加
#HotSpot support hsdis export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:....(省略)hsdis/build/linux-i586
source ~/.bashrc
测试 :
java -Xcomp -XX:CompileCommand=dontinline,*GenericClass.* -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly Z > comp.log
生成 comp.log , 里面6万多行。如果要做比较,只能用diff工具。
补上参考:
http://hllvm.group.iteye.com/group/topic/21769 X86 asm代码 是怎么才能看到?
http://wikis.sun.com/display/HotSpotInternals/PrintAssembly PrintAssembly使用
http://directory.fsf.org/project/binutils/ Binutils工具
http://hllvm.group.iteye.com/group/topic/25910#183635 Java泛型的性能损耗
http://hg.openjdk.java.net/jdk7/hotspot/hotspot/file/tip/src/share/tools/hsdis/ hsdis 工具
http://kenai.com/projects/base-hsdis/lists/dev/archive/2009-11/message/0 类似编译问题
评论
2.6.35-28-generic #50-Ubuntu SMP i686 GNU/Linux
javac 1.6.0_25
Java HotSpot(TM) Client VM warning: PrintAssembly is enabled; turning on DebugNonSafepoints to gain additional output
CompilerOracle: dontinline TestC2BranchPrediction2.conditionalBranch
CompilerOracle: dontinline TestC2BranchPrediction2.marker
Loaded disassembler from hsdis-i386.so
我的两个配置文件如下,
dontinline TestC2BranchPrediction2 marker
+PrintAssembly
跑出来的日志的method相关如下:
# {method} 'hashCode' '()I' in 'java/lang/String' # {method} 'charAt' '(I)C' in 'java/lang/String' # {method} 'encodeArrayLoop' '(Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult;' in 'sun/nio/cs/UTF_8$Encoder' # {method} 'indexOf' '(II)I' in 'java/lang/String' # {method} 'lastIndexOf' '(II)I' in 'java/lang/String' # {method} 'equals' '(Ljava/lang/Object;)Z' in 'java/lang/String' # {method} 'replace' '(CC)Ljava/lang/String;' in 'java/lang/String' # {method} 'indexOf' '([CII[CIII)I' in 'java/lang/String' # {method} '<init>' '()V' in 'java/lang/Object' # {method} 'encodePath' '(Ljava/lang/String;Z)Ljava/lang/String;' in 'sun/net/www/ParseUtil' # {method} 'arraycopy' '(Ljava/lang/Object;ILjava/lang/Object;II)V' in 'java/lang/System' # {method} 'startsWith' '(Ljava/lang/String;I)Z' in 'java/lang/String' # {method} 'normalize' '(Ljava/lang/String;)Ljava/lang/String;' in 'java/io/UnixFileSystem' # {method} 'readLine' '(Z)Ljava/lang/String;' in 'java/io/BufferedReader' # {method} 'decodeArrayLoop' '(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;' in 'sun/nio/cs/UTF_8$Decoder' # {method} 'min' '(II)I' in 'java/lang/Math' # {method} 'getChars' '(II[CI)V' in 'java/lang/String' # {method} 'mayContain' '(Ljava/lang/String;)Z' in 'sun/misc/MetaIndex' # {method} 'startsWith' '(Ljava/lang/String;)Z' in 'java/lang/String' # {method} 'getProperties' '(I)I' in 'java/lang/CharacterDataLatin1' # {method} 'hashValue' '([BII)I' in 'com/sun/tools/javac/util/Name' # {method} 'chars2utf' '([CI[BII)I' in 'com/sun/tools/javac/util/Convert' # {method} 'equals' '([BI[BII)Z' in 'com/sun/tools/javac/util/Name' # {method} '<init>' '(II[C)V' in 'java/lang/String' # {method} 'append' '(Ljava/lang/String;)Ljava/lang/AbstractStringBuilder;' in 'java/lang/AbstractStringBuilder' # {method} 'indexFor' '(II)I' in 'java/util/HashMap' # {method} 'hash' '(I)I' in 'java/util/HashMap' # {method} 'substring' '(II)Ljava/lang/String;' in 'java/lang/String' # {method} 'getLoader' '(I)Lsun/misc/URLClassPath$Loader;' in 'sun/misc/URLClassPath' # {method} 'getResource' '(Ljava/lang/String;Z)Lsun/misc/Resource;' in 'sun/misc/URLClassPath' # {method} 'get' '(Ljava/lang/Object;)Ljava/lang/Object;' in 'java/util/HashMap' # {method} 'indexOf' '(I)I' in 'java/lang/String' # {method} '<init>' '([CII)V' in 'java/lang/String' # {method} 'copyOfRange' '([CII)[C' in 'java/util/Arrays' # {method} 'RangeCheck' '(I)V' in 'java/util/ArrayList' # {method} 'getResource' '(Ljava/lang/String;Z)Lsun/misc/Resource;' in 'sun/misc/URLClassPath$JarLoader' # {method} 'allowArraySyntax' '()Z' in 'sun/misc/VM' # {method} 'checkName' '(Ljava/lang/String;)Z' in 'java/lang/ClassLoader' # {method} 'equalsIgnoreCase' '(Ljava/lang/String;)Z' in 'java/lang/String' # {method} 'append' '(Ljava/lang/String;)Ljava/lang/StringBuilder;' in 'java/lang/StringBuilder' # {method} 'lastIndexOf' '(I)I' in 'java/lang/String' # {method} 'copyOf' '([CI)[C' in 'java/util/Arrays' # {method} 'expandCapacity' '(I)V' in 'java/lang/AbstractStringBuilder' # {method} 'toLowerCase' '(C)C' in 'java/lang/Character' # {method} 'toLowerCase' '(I)I' in 'java/lang/Character' # {method} 'toLowerCase' '(I)I' in 'java/lang/CharacterDataLatin1' # {method} 'access$300' '(Ljava/util/zip/ZipFile;)J' in 'java/util/zip/ZipFile' # {method} 'readEntry' '(ILjava/util/List;Ljava/util/Map;)I' in 'com/sun/tools/javac/zip/ZipFileIndex$ZipDirectory' # {method} 'position' '(I)Ljava/nio/Buffer;' in 'java/nio/Buffer' # {method} 'isUnderflow' '()Z' in 'java/nio/charset/CoderResult' # {method} 'compareTo' '(Ljava/lang/String;)I' in 'java/lang/String' # {method} 'compareTo' '(Ljava/lang/Object;)I' in 'com/sun/tools/javac/zip/ZipFileIndexEntry' # {method} 'compareTo' '(Lcom/sun/tools/javac/zip/ZipFileIndexEntry;)I' in 'com/sun/tools/javac/zip/ZipFileIndexEntry' # {method} 'get4ByteLittleEndian' '([BI)I' in 'com/sun/tools/javac/zip/ZipFileIndex' # {method} 'getSecurityManager' '()Ljava/lang/SecurityManager;' in 'java/lang/System' # {method} 'intern' '()Ljava/lang/String;' in 'java/lang/String' # {method} 'currentThread' '()Ljava/lang/Thread;' in 'java/lang/Thread' # {method} 'limit' '(I)Ljava/nio/Buffer;' in 'java/nio/Buffer' # {method} '<init>' '(IIII)V' in 'java/nio/Buffer' # {method} 'get' '()Ljava/lang/Object;' in 'java/lang/ref/SoftReference' # {method} 'arrayOffset' '()I' in 'java/nio/ByteBuffer' # {method} 'arrayOffset' '()I' in 'java/nio/CharBuffer' # {method} 'getMap' '(Ljava/lang/Thread;)Ljava/lang/ThreadLocal$ThreadLocalMap;' in 'java/lang/ThreadLocal' # {method} 'hasRemaining' '()Z' in 'java/nio/Buffer' # {method} 'hasArray' '()Z' in 'java/nio/CharBuffer' # {method} '<init>' '(IIII[BI)V' in 'java/nio/ByteBuffer' # {method} 'byteOrder' '()Ljava/nio/ByteOrder;' in 'java/nio/Bits' # {method} 'hasArray' '()Z' in 'java/nio/ByteBuffer' # {method} 'isOverflow' '()Z' in 'java/nio/charset/CoderResult' # {method} '<init>' '(IIII[CI)V' in 'java/nio/CharBuffer' # {method} 'wrap' '([CII)Ljava/nio/CharBuffer;' in 'java/nio/CharBuffer' # {method} '<init>' '([CII)V' in 'java/nio/HeapCharBuffer' # {method} 'get' '()Ljava/lang/Object;' in 'java/lang/ThreadLocal' # {method} 'deref' '(Ljava/lang/ThreadLocal;)Ljava/lang/Object;' in 'java/lang/StringCoding' # {method} 'access$000' '(Ljava/lang/ThreadLocal$ThreadLocalMap;Ljava/lang/ThreadLocal;)Ljava/lang/ThreadLocal$ThreadLocalMap$Entry;' in 'java/lang/ThreadLocal$ThreadLocalMap' # {method} 'getEntry' '(Ljava/lang/ThreadLocal;)Ljava/lang/ThreadLocal$ThreadLocalMap$Entry;' in 'java/lang/ThreadLocal$ThreadLocalMap' # {method} 'access$000' '(IF)I' in 'java/lang/StringCoding' # {method} 'scale' '(IF)I' in 'java/lang/StringCoding' # {method} 'wrap' '([BII)Ljava/nio/ByteBuffer;' in 'java/nio/ByteBuffer' # {method} '<init>' '([BII)V' in 'java/nio/HeapByteBuffer' # {method} 'ensureCapacity' '(I)V' in 'java/util/ArrayList' # {method} 'add' '(Ljava/lang/Object;)Z' in 'java/util/ArrayList' # {method} 'decode' '(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;Z)Ljava/nio/charset/CoderResult;' in 'java/nio/charset/CharsetDecoder' # {method} 'decodeLoop' '(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;' in 'sun/nio/cs/UTF_8$Decoder' # {method} 'checkBounds' '([BII)V' in 'java/lang/String' # {method} 'reset' '()Ljava/nio/charset/CharsetDecoder;' in 'java/nio/charset/CharsetDecoder' # {method} 'maxCharsPerByte' '()F' in 'java/nio/charset/CharsetDecoder' # {method} '<init>' '([BIILjava/lang/String;)V' in 'java/lang/String' # {method} 'decode' '(Ljava/lang/String;[BII)[C' in 'java/lang/StringCoding' # {method} 'decode' '([BII)[C' in 'java/lang/StringCoding$StringDecoder' # {method} 'wrap' '([C)Ljava/nio/CharBuffer;' in 'java/nio/CharBuffer' # {method} 'flush' '(Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;' in 'java/nio/charset/CharsetDecoder' # {method} 'implFlush' '(Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;' in 'java/nio/charset/CharsetDecoder' # {method} 'access$100' '([CILjava/nio/charset/Charset;)[C' in 'java/lang/StringCoding' # {method} 'safeTrim' '([CILjava/nio/charset/Charset;)[C' in 'java/lang/StringCoding' # {method} 'access$1000' '()Lcom/sun/tools/javac/util/List;' in 'com/sun/tools/javac/zip/ZipFileIndex' # {method} 'put' '(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;' in 'java/util/HashMap' # {method} 'buildIndex' '()V' in 'com/sun/tools/javac/zip/ZipFileIndex$ZipDirectory' # {method} 'mergeSort' '([Ljava/lang/Object;[Ljava/lang/Object;III)V' in 'java/util/Arrays' # {method} 'swap' '([Ljava/lang/Object;II)V' in 'java/util/Arrays' # {method} 'transfer' '([Ljava/util/HashMap$Entry;)V' in 'java/util/HashMap' # {method} '<init>' '()V' in 'java/util/AbstractCollection' # {method} 'substring' '(I)Ljava/lang/String;' in 'java/lang/String' # {method} 'nonEmpty' '()Z' in 'com/sun/tools/javac/util/List' # {method} '<init>' '(Ljava/lang/Object;Lcom/sun/tools/javac/util/List;)V' in 'com/sun/tools/javac/util/List' # {method} 'setTail' '(Lcom/sun/tools/javac/util/List;)Lcom/sun/tools/javac/util/List;' in 'com/sun/tools/javac/util/List' # {method} 'prependList' '(Lcom/sun/tools/javac/util/List;)Lcom/sun/tools/javac/util/List;' in 'com/sun/tools/javac/util/List' # {method} 'reverse' '()Lcom/sun/tools/javac/util/List;' in 'com/sun/tools/javac/util/List' # {method} 'get' '(I)Ljava/lang/Object;' in 'java/util/ArrayList' # {method} 'lastIndexOf' '([CII[CIII)I' in 'java/lang/String' # {method} 'hashCode' '()I' in 'java/lang/Object' # {method} '<init>' '(I)V' in 'java/lang/AbstractStringBuilder' # {method} 'getClass' '()Ljava/lang/Class;' in 'java/lang/Object' # {method} 'append' '(C)Ljava/lang/AbstractStringBuilder;' in 'java/lang/AbstractStringBuilder' # {method} 'append' '(C)Ljava/lang/StringBuilder;' in 'java/lang/StringBuilder' # {method} '<init>' '(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/HashMap$Entry;)V' in 'java/util/HashMap$Entry' # {method} 'charCount' '(I)I' in 'java/lang/Character' # {method} 'isHighSurrogate' '(C)Z' in 'java/lang/Character' # {method} 'codePointAt' '(I)I' in 'java/lang/String' # {method} 'codePointAtImpl' '([CII)I' in 'java/lang/Character' # {method} 'isIdentifier' '(Ljava/lang/CharSequence;)Z' in 'javax/lang/model/SourceVersion' # {method} 'isJavaIdentifierPart' '(I)Z' in 'java/lang/Character' # {method} 'isJavaIdentifierPart' '(I)Z' in 'java/lang/CharacterDataLatin1' # {method} 'addEntry' '(ILjava/lang/Object;Ljava/lang/Object;I)V' in 'java/util/HashMap' # {method} 'endsWith' '(Ljava/lang/String;)Z' in 'java/lang/String' # {method} 'isEmpty' '()Z' in 'com/sun/tools/javac/util/List' # {method} 'toString' '()Ljava/lang/String;' in 'java/lang/StringBuilder' # {method} 'indexedBinarySearch' '(Ljava/util/List;Ljava/lang/Object;)I' in 'java/util/Collections' # {method} '<init>' '()V' in 'java/lang/StringBuilder' # {method} 'lookup' '(Lcom/sun/tools/javac/util/Name;)Lcom/sun/tools/javac/code/Scope$Entry;' in 'com/sun/tools/javac/code/Scope' # {method} 'getBytes' '([BI)V' in 'com/sun/tools/javac/util/Name' # {method} 'lastIndexOf' '(Ljava/lang/String;I)I' in 'java/lang/String' # {method} 'lastIndexOf' '(Ljava/lang/String;)I' in 'java/lang/String' # {method} 'nil' '()Lcom/sun/tools/javac/util/List;' in 'com/sun/tools/javac/util/List' # {method} 'hashCode' '()I' in 'java/lang/Enum' # {method} '<init>' '(Ljava/net/URL;Ljava/lang/String;Ljava/net/URLStreamHandler;)V' in 'java/net/URL'
这是自己运行的代码
TestC2BranchPrediction2.java
import java.util.Random; public class TestC2BranchPrediction2 { public static void main(String[] args) { Random rand = new Random(); int count0 = 0; int count2 = 0; for (int i = 0; i < 10000000L; i++) { int state = rand.nextInt(10); switch (state) { case 0: if(20 >= count0) { conditionalBranch(state); count0++; } break; case 1: conditionalBranch(state); break; case 2: if(200 >= count2) { conditionalBranch(state); count2++; } break; } } } public static void conditionalBranch(int flag) { if (0 == flag) { marker("DO SOMETHING A"); } else if (1 == flag) { marker("DO SOMETHING B"); } else if (2 == flag) { marker("DO SOMETHING C"); } } public static void marker(String message) { try { message.intern(); } catch (Exception e) { } } }
我在编译hsdis的时候是直接把sysdep.h的include给删了,毫无影响。在Ubuntu上编译的。以前记过,在这里:https://gist.github.com/673705
发表评论
-
Android rpg 游戏开发
2011-04-23 15:36 2424Android 游戏开发 记录点滴 rpg 游戏的地图 ... -
xpath的使用遇到的问题
2011-01-06 20:40 2916org.dom4j.InvalidXPathException ... -
Boolean的构造函数,你懂的
2010-11-27 20:52 1173学java不看源码是上不了一个等级的! ========== ... -
maven project 转化为eclipse project
2010-10-10 16:42 1460There is actually a very easy s ... -
UDAS
2010-09-24 12:31 1057UDAS 的全称:uniform data access s ... -
Java备忘
2010-05-02 09:12 1290/////////////////////////////// ... -
Java 虚拟机
2010-05-01 12:50 868//////////////////////////// ... -
cmm解释器--java实现
2010-04-18 13:02 1463目录: cmm编译器-cmm 语言词法分析-java实现 ... -
cmm编译器-cmm 语言LL1解释器构造-java实现
2010-04-18 12:57 2193附件是整个实验的文档和代码(由三人Hyvi,Heger,AJ负 ... -
cmm编译器-cmm 语言LL1语法分析-java实现
2010-04-18 12:11 2478cmm编译器-cmm 语言LL1语法分析-java实现 附件 ... -
cmm编译器-cmm 语言语法分析-javacc实现
2010-04-18 12:01 5360Cmm的文法: //程序开始 programàstmt-s ... -
cmm编译器-cmm 语言词法分析-java实现
2010-04-18 11:51 2764词法设计理念 1. 注释处理: 在处理注释的问题 ... -
Linux 下 Java环境的详细信息
2010-03-14 01:08 1237先把代码贴上: 1 import java.uti ... -
神奇的“按钮”
2010-03-11 23:12 821早期的反模式:神奇的按钮 神奇的Servlet ... -
RUBY
2009-06-10 14:23 950# rail:良好的惯例高于配 ... -
switch 与default 与break
2009-02-19 21:36 1073public class B { public s ... -
2008期末Collections&arrays总结
2009-01-16 00:48 842全部是静态方法 public static int binar ... -
2008年期末考试复习总结
2009-01-15 17:13 771类成员访问修饰符与继承的关系 私有的(private)类成员 ... -
Exercise 2
2008-11-26 17:12 1232Background This assignment ask ... -
SingleTon
2008-11-07 13:34 842大二期--中考试Java程序设计最后一题如下 Write do ...
相关推荐
synchronize底层实现原理 Java文件想要看字节码通常使用 javap 命令将java的class文件反汇编,具体操作步骤如下:...经过以上3步骤,你会看到一些字节码指令,其实这才是最终运行在jvm上的机器指令代码。 public class
1. 假设你要反汇编的是app.apk,那么先改名成app.zip 2. 解压 3. 在解压出来的里面找到classes.dex,这个就是目标的程序的二进制文件 4. 用附件的dex2jar,在Windows命令行下运行 dex2jar classes.dex 5. 生成...
其他工具包括反汇编程序,启动程序,调试器,Java 命令行脚本外壳或策略创建和管理实用程序。 大眼仔(www.dayanzai.me)在这里提示的是,Java 开发工具包集成了一组功能强大的工具,无论其知识水平如何,它们都...
Javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。 Jconsole: Java进行系统调试和监控的工具常用的package java.lang: 这个是系统的基础类,比如String等都是这里面的,这个...
其他工具包括反汇编程序,启动程序,调试器,Java 命令行脚本外壳或策略创建和管理实用程序。 大眼仔在这里提示的是,Java 开发工具包集成了一组功能强大的工具,无论其知识水平如何,它们都可以帮助程序员实现 Java...
4.2.7 HSDIS:JIT生成代码反汇编 4.3 JDK的可视化工具 4.3.1 JConsole:Java监视与管理控制台 4.3.2 VisualVM:多合一故障处理工具 4.4 本章小结 第5章 调优案例分析与实战 5.1 概述 5.2 案例分析 5.2.1 高...
Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当...
目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当...
汇编语言 10 高级语言 10 其他高级语言 11 JAVA发展简史 12 JAVA为什么能够流行? 13 JAVA各版本的含义 13 JAVA技术体系架构 14 JAVA的特性和优势 14 JAVA应用程序的运行机制 15 JVM(JAVA VIRTUAL MACHINE) 16 Java...
目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当...
目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当...
目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当...
目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当...
目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当...
目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当...
目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当...
目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当...