随笔分类 - java
摘要:一、概述 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 二、类加载的时机 类的生命周期: 类“初始化”的触发条件(有且仅有以下五点): 1.遇到new、getstatic、putstatic
阅读全文
摘要:一、对象的创建 1.类加载检查。虚拟机遇到new指令时,首先去检查指令的参数是否能在常量池中定位到一个类的符号引用,并检查这个符号引用的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。 2.为新生对象分配内存。(对象所需内存的大小在类加载完成后便可以完全确定) 内存分配方式:
阅读全文
摘要:一、为什么要使用线程池 线程池复用线程有以下几点优点: 减少资源创建 ⇒ 减少内存开销,创建线程占用内存。使用 new Thread 每次启动线程都需要进行对象和线程; 降低系统开销 ⇒ 创建线程需要时间,会延迟处理的请求; 提高稳定稳定性 ⇒ 避免无限创建线程引起的 OOM; 功能更强大 ⇒ 提供
阅读全文
摘要:J.U.C 是 java.util.concurrent 的缩写,是 jdk 的并发包,包含了很多并发相关的类。下面介绍常用的类。 一、Atomic 原子操作类 1. 原子更新基本类型 使用原子的方式更新基本类型,Atomic 包提供了以下 3 个类: AtomicBoolean AtomicInt
阅读全文
摘要:一、安全发布 1. 对象发布与逸出 发布对象:使对象能够在当前作用域之外的代码中使用 逸出:某个不应该发布的对象被发布 (1)变量逸出原有作用域 程序示例: public class N00_Test { private String[] strs = {"1", "2", "3"}; public
阅读全文
摘要:一、线程安全 1. 线程安全 可以简单的理解为:一个方法或者一个实例可以在多线程环境中使用而不会出现问题。 2. 线程不安全的原因 多个线程使用了相同的资源,如同一内存区(变量、数组或对象)、系统(数据库、web服务等)或文件等。更准确的说,是多个线程对同一资源进行了写操作。多个线程只读取相同的资源
阅读全文
摘要:date: 2020-03-23 00:50:25 一、 基本概念 并发:一个处理器处理多个任务,逻辑上的同时发生。 并行:多个处理器同时处理多个任务,物理上的同时发生。 二、Java 线程基础 1. 线程 进程与线程 进程: 程序运行的一个实例。 线程:程序的执行单元,是程序使用 CPU 的基本单
阅读全文
摘要:date: 2018-10-18 13:03:17 堆的回顾 很多垃圾回收算法,如CMS,使用的堆内存结构如下: 新手代:一个Eden和两个survivor 老年代:old space 持久带:1.8之前的perm space 元空间:1.8之后的metaspace 注:这些space必须是地址连续
阅读全文
摘要:date: 2018-10-16 13:02:54 对象存活判定算法 引用计数法(Reference Counting) 思路很简单,给每个对象中添加一个引用计数器,每当一个地方引用它时,计数器值加一;当引用失效时,计数器值减一。任何时候,当计数器值为0就不可能再被使用了。 引用计数法实现简单,判断
阅读全文
摘要:date: 2018-10-14 13:02:33 前言 目的:监控GC执行和JVM基本内存状态。 Trace跟踪参数 -verbose:gc or -XX:+PrintGC 打印GC的简要信息 在虚拟机发生内存回收时在输出设备显示信息 实例: /** * @author ZenoYang * wi
阅读全文
摘要:date: 2018-10-03 13:01:52 JVM启动流程 JVM基本结构 程序计数器 每个线程拥有一个PC寄存器 在线程创建时创建 指向下一条指令的地址 执行本地方法师,PC的值为undefined 方法区 所有线程共享 存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等
阅读全文