JVM(5):类加载机制 Posted on 2018-09-27 | In Java JVM把class文件加载的内存,并对数据进行校验、转换解析和初始化,最终形成JVM可以直接使用的Java类型的过程就是加载机制。 类加载生命周期 加载(Loading) 验证(Verifycation) 准备(Preparation) 解析(Resolution) 初始化(Initialization) 使用(Using) 卸载(Unloading) Read more »
springboot线程池优雅关闭 Posted on 2018-09-27 | In web 在我们停止springboot项目时,我们希望线程池中的任务能够继续执行完再完全停掉服务。一般有两种做法: 线程池配置参数在spring应用中,如果需要停止服务,而线程池没有优雅的关闭,就会造成线程池中的任务被强行停止,导致部分任务执行失败。我们只需要在配置线程池时增加两个参数即可: waitForTasksToCompleteOnShutdown awaitTerminationSeconds Read more »
JVM(4):虚拟机性能监控 Posted on 2018-09-26 | In Java 要进行虚拟机性能监控光有理论还不够,还需要实践。JDK为我们提供了一些命令行工具以及图形化洁面工具进行虚拟机性能监控实践。 Read more »
JVM(3):垃圾收集GC Posted on 2018-09-26 | In Java Java内存结构中程序计数器、虚拟机栈、本地方法栈都是线程私有的,随着方法的结束或者线程的结束,内存会被回收。所以垃圾收集主要针对Java堆和方法区。 判断对象是否可以回收 引用计数法 每个对象有一个引用计数器,每当有一个地方引用,计数器就加1,当引用失效,计数器就减1,计数器为0的对象会被回收。引用计数不能解决循环引用的问题。 Read more »
JVM(2):虚拟机对象探秘 Posted on 2018-09-25 | In Java 对象的创建对象的创建一般有四种方式:new关键字、反射、clone、序列化。对象创建主要分三步: 检查类是否加载 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。 Read more »
JVM(1):内存结构 Posted on 2018-09-25 | In Java 程序计数器 程序计数器是内存结构中很小的一块,属于线程私有的。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的指令,分支、循环、跳转、异常处理、线程恢复都要依赖这个计数器来实现。程序计数器是内存结构中唯一一个没有定义OOM的区域。 Read more »