javaコメント_JVM内部詳細分析
java命令 | |
http://blog.csdn.net/huaweitman/article/details/78122723 | |
Java命令学习系列 | |
http://www.hollischuang.com/archives/tag/java%E5%91%BD%E4%BB%A4%E5%AD%A6%E4%B9%A0%E7%B3%BB%E5%88%97 | |
jhat | |
功能 | |
一般与jmap搭配使用,用来分析jmap生成的堆转储文件。 | |
由于有很多可视化工具(Eclipse Memory Analyzer 、IBM HeapAnalyzer)可以替代,所以很少用。不过在没有可视化工具的机器上也是可用的。 | |
常用指令 | |
jmap -dump:format=b,file=heapDump 3331 + jhat heapDump:解析Java堆转储文件,并启动一个 web server | |
ヒープダンプをEclipse Memory Analyzerで解析しよう! | |
http://tech.furyu.jp/blog/?p=3554 | |
https://www.eclipse.org/mat/ | |
jcnsole | |
jvisualvm | |
https://visualvm.github.io/index.html | |
Eclipse Memory Analyzer | |
IBM HeapAnalyzer 使用方法 | |
https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/W3b463571efc8_4f02_99af_3cbc0da42ddc/page/IBM%20HeapAnalyzer%20Information | |
http://jinwooh.wixsite.com/java | |
java -Xmx1000m -jar D:\00_tool\IBM_HeapAnalyzer.jar | |
如何精确地测量java对象的大小 | |
http://blog.csdn.net/xorxos/article/details/51707746 | |
java虚拟机规范(java se 7版) pdf |
线程Dump的分析 | |
http://www.hollischuang.com/archives/110 |
Classファイルの中身でJavaのいろいろな概念を理解する。
Java字节码生成开源框架介绍–Javassist:
class文件用jd-guiで見れる。
这个运行时生成的动态代理对象是可以导出到文件的,方法有两种
1. 在代码中加入System.setProperty(“sun.misc.ProxyGenerator.saveGeneratedFiles”, “true”);
2. 在运行时加入jvm 参数 -Dsun.misc.ProxyGenerator.saveGeneratedFiles=true
java コマンドの後ろに -verbose:class でClassのLoad情報が表示できる。
装载时机与方式
读者可仔细查看两者的区别,可以发现只有当 类A 被使用时,该类对应的 A.class 才会被装载。总结起来,一个类的加载条件是:
1. 当使用 new 操作符执行某类时。比如 SomeClass some = new SomeClass()。
2. 当已加载类中有一个静态引用指向某类时。 比如 System.out 。
初始化时机与方式
在Java中,一个类被加载完毕后,不会立即执行类的初始化工作。当类中的符号被第一次使用时,该类才开始被初始化。
在初始化顺序方面:JVM会首先完成父类的初始化,再执行子类的初始化;对于类中静态的常量,会按照定义的先后顺序完成初始化;最后会保证在初始化之前,每个属性都会有一个默认值
JVM 如何装载和初始化一个Java class(类) http://www.tiantianbianma.com/jvm-load-class.html/
深入分析Java的HelloWorld程序 http://www.tiantianbianma.com/java-helloworld.html/
深入分析Java规范中JVM的内存布局模型 http://www.tiantianbianma.com/jvm-memory.html/
Java程序员的技术进阶成长路线 http://www.tiantianbianma.com/java-study-guide.html/
深入理解Java中为什么内部类可以访问外部类的成员 http://blog.csdn.net/zhangjg_blog/article/details/20000769
Java知识点总结篇:Java的内存模型、线程安全、进程和线程的区别
http://blog.csdn.net/zhongwen7710/article/details/25008183
《成神之路-基础篇》JVM——Java内存相关(已完结)
Java虚拟机的内存组成以及堆内存介绍
Java GC工作原理
排名Top 16的Java实用类库
java 汎型 http://www.importnew.com/19740.html
http://blog.csdn.net/lonelyroamer/article/details/7868820 泛型的内部原理:类型擦除以及类型擦除带来的问题
http://blog.csdn.net/lonelyroamer/article/details/7864531 泛型的基本介绍和使用
http://blog.csdn.net/lonelyroamer/article/details/7927212 通配符
Javaの参加者:PG、Compiler、JVM
genericの存在価値:
因为有无限的可能性,就只有程序员和运行期的虚拟机才知道这个Object到底是个什么类型的对象。
在编译期间,编译器无法检查这个Object的强制转型是否成功,如果仅仅依赖程序员去保障这项操作的正确性,许多ClassCastException的风险就会被转嫁到程序运行期之中。
Java语言中的泛型则不一样,它只在程序源码中存在,在编译后的字节码文件中,就已经被替换为原来的原始类型(Raw Type,也称为裸类型)了,
并且在相应的地方插入了强制转型代码,因此对于运行期的Java语言来说,ArrayList<int>与ArrayList<String>就是同一个类。
所以说泛型技术实际上是Java语言的一颗语法糖,Java语言中的泛型实现方法称为类型擦除,基于这种方法实现的泛型被称为伪泛型
类型限定在泛型类、泛型接口和泛型方法中都可以使用,不过要注意下面几点:
1、不管该限定是类还是接口,统一都使用关键字 extends
2、可以使用&符号给出多个限定,比如
[java]
1. public static <T extends Comparable&Serializable> T get(T t1,T t2)
public static <T extends Comparable&Serializable> T get(T t1,T t2)
3、如果限定既有接口也有类,那么类必须只有一个,并且放在首位置
[java]
1. public static <T extends Object&Comparable&Serializable> T get(T t1,T t2)
Java泛型的实现方法:类型擦除
Java中的泛型基本上都是在编译器这个层次来实现的。在生成的Java字节码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会在编译器在编译的时候去掉。这个过程就称为类型擦除。
範型:おもに「=」左の引用の制限を定義している。
通配符有三种:
1、无限定通配符 形式<?>
2、上边界限定通配符 形式< ? extends Number> //用Number举例
3、下边界限定通配符 形式< ? super Number> //用Number举例