
字符串常量
必须区分业务错误和系统错误:业务错误用自定义BizError结构体实现error接口并设唯一错误码,系统错误复用标准库错误;用errors.Is/errors.As判断而非字符串匹配;包装错误需克制且...
JavaString不可变是为了字符串常量池、线程安全和哈希缓存优化,每次操作如substring()都新建对象;频繁拼接导致GC压力大,比较必须用equals();可变场景应选StringBuild...
JavaString不可变是为了字符串常量池、线程安全和哈希缓存优化,每次操作如substring()都新建对象;频繁拼接导致GC压力大,比较必须用equals();可变场景应选StringBuild...
元空间与永久代的核心差异体现在五方面:一、内存归属上,永久代属JVM堆内,元空间用本地内存;二、容量约束上,永久代需显式设上限,元空间默认无硬限;三、GC行为上,永久代依赖Full GC,元空间可异步...
Java元空间存储类的运行时常量池、字段与方法元数据、Klass结构、ClassLoader相关内部对象及JIT编译元信息;其内存仅在类卸载时回收,且JIT编译可能引发内存碎片。
永久代被元空间取代:永久代属堆内存、受-Xmx限制,JDK 8起元空间改用本地内存,存储类元数据,GC更高效,参数-XX:PermSize失效,-XX:MetaspaceSize生效。
String拼接变慢是因为其不可变性导致每次拼接都新建对象并复制内容,10万次循环产生大量临时对象加重GC压力;StringBuilder通过可变字符数组和预扩容机制提升性能,但需注意线程安全、初始容...
Java虚拟机中类元数据存储从JDK 7及之前永久代(PermGen)演进为JDK 8起的元空间(Metaspace),后者基于本地内存、支持动态扩容,并强化类卸载机制,同时引入压缩类空间优化Klas...
堆内存是Java对象实例的唯一存放地,所有通过new创建的对象(包括数组)均分配在堆中,由GC自动管理,但受JVM参数限制,可能引发OutOfMemoryError。
JavaGC是分代、可调优的运行时机制,通过可达性分析判定垃圾,新生代采用Eden/S0/S1复制回收,G1与ZGC设计目标不同:G1基于Region预测回收,ZGC依赖着色指针实现超低延迟。