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内存相关(已完结)

《成神之路-基础篇》JVM——Java内存模型(已完结)


Java虚拟机的内存组成以及堆内存介绍

Java虚拟机的内存组成以及堆内存介绍

Java GC工作原理

Java GC工作原理


排名Top 16的Java实用类库

排名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举例

Add a Comment

您的电子邮箱地址不会被公开。 必填项已用*标注