文章介绍了Java中Class对象的五种创建方式:通过对象.getClass()获取、使用Class.forName("类全路径")、通过类名.class获取、基本类型的包装类.TYPE属性,以及获取父类的Class对象。每种方式都能获得类的Class对象,其中前三种最常用,且同一个类的Class对象具有相同的hashCode值。

本文详细介绍了JVM主要垃圾收集器,包括Serial(单线程,Client模式默认)、ParNew(Serial多线程版本,Server模式首选)、Parallel Scavenge(吞吐量优先,自适应策略)、Serial Old(Serial老年代版本)、Parallel Old(Parallel Scavenge老年代版本)、CMS(并发标记清除,低停顿)和G1(可预测停顿,简单调优)。各收集器针对不同场景优化:Serial适合小内存应用,ParNew与CMS配合,Parallel追求高吞吐,CMS关注低停顿,G1提供统一内存管理和可调优停顿时间。

Java泛型在编译期通过类型擦除实现,泛型信息不会保留到运行时。类型擦除会将泛型类型参数替换为Object(无上限时)或指定的上限类型(如T extends CharSequence替换为CharSequence)。示例中,泛型类Message<Integer>和Message<String>在JVM中均视为原始类型Message,其getClass()结果相同;Point2<Integer>的字段类型擦除后变为Object,而Point6<String>的字段类型因上限变为CharSequence。尽管泛型提供类型安全检查,但通过反射仍可绕过限制向Integer集合添加字符串,证明运行时泛型类型已被擦除。类型擦除确保了与旧版本Java的兼容性,但牺牲了部分泛型类型信息。