GC

1. 如何定位垃圾

垃圾就是没有引用的对象,那么如何确定是否还存在引用呢

  • 引用计数(ReferenceCount):存在循环引用问题
  • 根可达算法(RootSearching):从跟开始寻找(线程栈变量,静态变量,常量池,JNI指针),找不到的就算垃圾

线程和线程池

1. 线程和进程的区别

进程:资源分配的基本单位,是程序(硬盘上的QQ.exe)的一个实例,比如双击QQ.exe,程序启动,进入内存

线程:程序执行的基本单位,是一个任务,比如软件管家可以同时清理垃圾和扫描病毒

volatile

1. 线程之间可见性

1.1 问题引出

Volatile到底是用来干嘛的,来看一段程序

锁和同步

引言

本文将介绍synchronized,cas等概念

java中的引用

强引用(NormalReference)

我们平时用的基本上都是强引用M m = new M();

只要强引用在,gc不回收该对象

ThreadLocal

作用

  1. 多个线程之间的数据隔离
  2. 单个线程内部的简化参数(传递上下文)

反射和类加载器

1. 程序运行阶段

  1. 代码阶段(硬盘阶段):比如编写一个Person.java,编译成字节码Person.class,这都是存在硬盘的,而程序运行是要在内存中的
  2. 类加载器ClassLoader阶段:在第一阶段和第二阶段中间,也就是本文要讲的内容,先卖个关子,知道有这个阶段
  3. Runtime运行时阶段:也就是new Person(),那么此时已经在内存中
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×