Ryan's Blog

Threadlocal的应用场景有哪些?

ThreadLocal的应用场景有哪些? 典型回答 什么是ThreadLocal,如何实现的? ThreadLocal 提供了一种线程级别的数据存储机制。每个线程都拥有自己独立的 ThreadLocal 副本,这意味着每个线程都可以独立地、安全地操作这些变量,而不会影响其他线程。 ThreadLocal其实在工作中应该是非常常见的,以下是一些比较典型的使用场景: 用户身份信息存储:...

Threadlocal为什么会导致内存泄漏?如何解决的?

ThreadLocal为什么会导致内存泄漏?如何解决的? 典型回答 什么是ThreadLocal,如何实现的? ThreadLocal的内存泄露问题是一个比较典型的问题,可以说这个问题,ThreadLocal帮我们解决了一半,还有一半需要开发者自己解决。 内存泄漏和内存溢出的区别是什么? 内存泄漏来自哪? 会导致ThreadLocal内存泄漏的部分其实就是他在堆上存储的Thr...

运行时常量池和字符串常量池的关系是什么?

运行时常量池和字符串常量池的关系是什么? 典型回答 运行时常量池,是runtime constant pool,是Java虚拟机规范中定义的一块逻辑区域,它是方法区的一部分,规范中说明了,它是用于存储常量、符号引用和一些编译期已知的常量数据。 因为Java虚拟机规范并没有规定要如何实现方法区,所以在不同的HotSpot的JDK版本中,方法区所处的位置是不同的,所以运行时常量池所处的位置...

说一说jvm的并发回收和并行回收

说一说JVM的并发回收和并行回收 典型回答 很多人知道并发和并行的概念,并发指的是一个CPU不断的通过时间片切换来执行不同的任务,并行是指多个CPU同时执行不同的任务。 什么是并发,什么是并行? 在Java的GC中,也有并发回收和并行回收的概念,但是这两个概念和我们前面提到的并发和并行之间的区别没啥关系。 我们说的并行回收其实就是Parallel GC,具体到垃圾收集器的实现上,就...

虚拟机中的堆一定是线程共享的吗?

虚拟机中的堆一定是线程共享的吗? 并不一定哦! 为了保证对象的内存分配过程中的线程安全性,HotSpot虚拟机提供了一种叫做TLAB(Thread Local Allocation Buffer)的技术。 在线程初始化时,虚拟机会为每个线程分配一块TLAB空间,只给当前线程使用,当需要分配内存时,就在自己的空间上分配,这样就不存在竞争的情况,可以大大提升分配效率。 所以,“堆是线程共...

类的生命周期是怎么样的?

类的生命周期是怎么样的? 典型回答 一个类从诞生到卸载,大体分为如下几步: 大的阶段可以分为类的加载、类的使用、以及类的卸载。 其中类的加载阶段又分为加载、链接、初始化。其中连接过程又包含了验证、准备和解析。 加载阶段 Java中类加载的过程是怎么样的? 类使用过程 类的使用,即是类在加载完毕后,会有代码段来引用该类,如初始化该类的对象,或者通过反射获取该类的元数据。 类...

简单介绍一下jit优化技术?

简单介绍一下JIT优化技术? 典型回答 我们知道,想要把高级语言转变成计算机认识的机器语言有两种方式,分别是编译和解释,虽然Java转成机器语言的过程中有一个步骤是要编译成字节码,但是,这里的字节码并不能在机器上直接执行。 所以,JVM中内置了解释器(interpreter),在运行时对字节码进行解释翻译成机器码,然后再执行。 解释器的执行方式是一边翻译,一边执行,因此执行效率很低。...