随笔分类 - java / jvm
摘要:面向对象 01、构造器参数太多怎么办? 如果参数很多,会导致构造方法非常多,拓展性差,代码难编写,且难以看懂。 用 JavaBeans 模式, get 和 set 一行构造编程多行代码实现,需要使用额外机制确保一致性和线程安全。 用 builder 模式, 1、5 个或者 5 个以上的成员变量 2、
阅读全文
摘要:调优的原则 1、 大多数的 java 应用不需要 GC 调优 2、 大部分需要 GC 调优的的,不是参数问题,是代码问题 3、 在实际使用中,分析 GC 情况优化代码比优化 GC 参数要多得多; 4、 GC 调优是最后的手 目的 GC 的时间够小 GC 的次数够少 发生 Full GC 的周期足够的
阅读全文
摘要:JDK 为我们提供的jvm工具 命令行工具 jps 、jstat、jinfo、jmap、jhat、jstack 可视化工具 JMX、Jconsole、visualvm 生产服务器推荐开启 -XX:-HeapDumpOnOutOfMemoryError 默认关闭,建议开启,在 java.lang.Ou
阅读全文
摘要:类加载机制 概述 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7 个
阅读全文
摘要:垃圾回收算法 复制算法(Copying) 将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使 用过的内存空间一次清理掉。这样使得每次都是对整个半区进行内存回收,内存分配时也就不用考虑内存碎片等复杂情况,只要按顺序分配内
阅读全文
摘要:判断对象的存活 引用计数法 给对象添加一个引用计数器,当对象增加一个引用时计数器加 1,引用失效时计数器减 1。引用计数为 0 的对象可被回收。(Python 在用,但主流虚拟 机没有使用) 优点:快,方便,实现简单。 缺陷:对象相互引用时(A.instance=B 同时 B.instance=A)
阅读全文
摘要:虚拟机中的对象 对象的分配 虚拟机遇到一条 new 指令时:根据 new 的参数是否能在常量池中定位到一个类的符号引用,如果没有,说明还未定义该类,抛出ClassNotFoundException 1)检查加载 先执行相应的类加载过程。如果没有,则进行类加载 2)分配内存 根据方法区的信息确定为该类
阅读全文
摘要:一、JVM运行时数据区 JVM运行时数据区是一个抽象概念,主要依赖于寄存器、高速缓存、主内存几个部分组成。 计算机运行 = 指令 + 数据,指令用于执行 方法, 数据 用于指向 存放的数据和对象。 虚拟机栈 用于执行java方法 本地方法栈 执行本地方法(通常时c语言实现的) 程序计数器 用于对 执
阅读全文