JAVA基础

JAVA基础

简介

内存对象

jvm

  • 程序计数器(PC)
  • 栈(Stack)
    • 虚拟机栈(VM stack)
    • 本地方法栈(Native stack)
  • 堆(Heap)
    • 所有对象
    • 新生代(Eden/Survior)
    • 老年代
    • 持久代
  • 方法区(Method Area)
  • 代码缓存()
  • 直接内存(Direct Memory)

jvm系统线程

  • 虚拟机线程(VM thread)
  • 周期性任务线程
  • GC线程
  • 编译器线程
  • 信号分发线程

GC

  • 垃圾回收
    • 新的对象和数组被创建并放入老年代。
    • Minor垃圾回收将发生在新生代。依旧存活的对象将从 eden 区移到 survivor 区。
    • Major垃圾回收一般会导致应用进程暂停,它将在三个区内移动对象。仍然存活的对象将被从新生代移动到老年代。
    • 每次进行老年代回收时也会进行永久代回收。它们之中任何一个变满时,都会进行回收。
      • 引用计数
      • root可达性分析
        • 复制
        • 标记清除
        • 标记整理

类加载器

JVM类通过不同类加载器加载,每个类加载器由其父类加载, bootstrap加载器由虚拟机直接加载

  • Bootstrp加载器: 初始加载器;
  • Extension加载器: 加载标准Java扩展API类;
  • System加载器: 默认类加载器;
  • 自定义加载器:

对象头

String

  • String

    • String 是一个finally类, String对象初始化后,将无法修改
  • StringBuffer

    • 线程安全
  • StringBuilder

    • 非线程安全

Collection

  • Arrays

    • 实现AbstractArray
  • List接口

    • ArrayList
    • LinkedList
  • Map接口

    • HashMap
    • SortedHashMap
  • Set

    • HashSet
  • Table

    • HashTable

Thread

  • 实现方式

    • 继承Thread类
    • 实现Runnable接口
  • 线程池

    • Excutor

线程间同步

  • synchornized

    • moniter
  • Lock

    • ReentrantLock(可重入锁)
    • ReadLock(读锁)
    • WriteLock(读锁)
  • Semaphore(信号量)

    • 用于多个线程间的并发数控制
    • Semaphore(N): 初始化设置信号量值
    • acquire(): 获取信号量
    • release(): 释放信号量
  • CountDownLatch(计数器)

    • await()
    • countDown()
  • Exchanger(交换者)

    • 仅用于2个线程间交换数据
    • exhange()
  • CyclicBarrier(循环屏障)

    • 用于一组线程同时等待
    • await()

collection

  • CopyOnWriteArrayList:
  • CopyOnWriteArraySet
updatedupdated2024-05-102024-05-10