摘要:
synchronized锁的是对象,所以我们是通过对象里面的对象头来判断是否有锁。 对象头 无锁和偏向锁的锁标志位都为01,轻量级锁为00,重量级锁为10。无锁和偏向锁通过倒数第三位来判断是否是偏向锁。 无锁升级偏向锁过程: 线程A执行到同步代码块时,检查对象头锁标志位是否为01,再看偏向锁标志位是 阅读全文
摘要:
接口类 public interface People { void eat(String name); void run(); } 实现类: public class Man implements People{ @Override public void eat(String name) { S 阅读全文
摘要:
IO模型 BIO:同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时,服务器端就会启动一个线程进行处理,无论这个客户端的这次请求做不做任何事,都会创建线程从而造成不必要的开销。 NIO:同步非阻塞,服务器实现模式为一个线程处理多个请求连接,即客户端发送的连接请求都会注册到多路复用器上 阅读全文
摘要:
1.ThreadLocal为什么能做到线程隔离? public class ThreadLocal1 { static ThreadLocal<People> t1 = new ThreadLocal<>(); public static void main(String[] args) { new 阅读全文
摘要:
什么是垃圾? 垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是垃圾。 如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。甚至导致内存溢出。 标记阶段:对象存活判断 垃圾标记阶段:堆里存放着几乎所有的Java对象实例,在 阅读全文
摘要:
String存储结构改变? 有char改为byte,String再也不用char[]来存储,改为byte[]加上编码标记,节约了一些空间 String s1 = "a"; String s2 = "b"; String s3 = “ab”; String s4 = s1+s2; 等价于StringB 阅读全文
摘要:
创建对象的方式? 1.new 2.Class的newInstance() 3.Constructor的newInstance(xxx) 4.使用clone() 5.使用反序列化 6.第三方库Objenesis 创建对象的步骤? 1.判断对象对应的类是否加载、链接、初始化 2.为对象分配内存 3.处理 阅读全文
摘要:
方法区存储什么? 存储已被虚拟机加载的类型信息、常量、静态变量、即时编译期编译后的代码缓存等。 类型信息(类class、接口interface、枚举enum、注解annotation): 这个类型的完整有效名称(包名.类名) 这个类型直接父类的完整有效名(对于interface或是java.lang 阅读全文
摘要:
消息应答机制:消费者在接收到消息并且处理该消息之后,告诉rabbitmq他已经处理了,rabbitmq可以把该消息删除了。 自动应答:生产者消息发出,就认为发送消息成功。消费者如果消费失败,这条数据就丢失了。--适合高吞吐量但数据安全性不高的。 手动应答:消费者确认消费了,才将这条信息进行删除 交换 阅读全文
摘要:
SpringBootTest如何测试? 1.@RunWith(SpringRunner.class):让自动注入的注解生效 2.其次是测试类要和该项目下的启动类的目录保持一致。 package com.wxy; import com.wxy.config; import org.junit.Test 阅读全文