
JDK
文章平均质量分 94
__如风__
一切很好,不缺烦恼
展开
-
Java线程(持续更新中)
从上面可以看出,Java中的RUNNABLE涵盖了操作系统层面的可运行、运行和阻塞,Java中的BLOCKED、WAITING、TIME_WAITING是对操作系统层面阻塞状态的细分。RUNNABLE:可运行线程的线程状态。addWorker 里会再判断ctl,防止启动多余的线程,保证execute方法的线程安全。DiscardOldestPolicy:丢弃任务队列中最早的任务,然后重试,除非线程池关闭才放弃当前任务。BLOCKED:线程阻塞等待监视器锁的线程状态。运行状态:CPU执行线程代码。原创 2023-03-30 08:50:40 · 69 阅读 · 0 评论 -
虚拟机内存管理
事实上,Java虚拟机可以看作一个阉割版的操作系统。C、C++运行在操作系统上,Java字节码运行在虚拟机上。虚拟机的设计几乎都可以在操作系统中找到影子,其中,内存管理是不得不说的一块。Java与C++之间有一堵由动态内存分配和垃圾收集技术所围成的高墙。原创 2023-03-10 21:07:24 · 184 阅读 · 0 评论 -
虚拟机类加载器
通过灵活定义classloader的加载机制,我们可以完成很多事情,例如解决类冲突问题,实现热加载以及热部署,甚至可以实现jar包的加密保护。更多内容可以查看以上参考《深入理解Java虚拟机第三版》Oracle官方Java虚拟机规范机第三版》Oracle官方Java虚拟机规范。原创 2023-03-10 21:08:15 · 67 阅读 · 0 评论 -
虚拟机类加载机制-虚拟机类加载
Java虚拟机把描述类的数据从加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以直接使用的Java类型,这个过程被称为虚拟机的类加载机制。原创 2023-03-10 21:11:55 · 89 阅读 · 0 评论 -
虚拟机对象探秘-虚拟机对象探秘
对象的内存分配过程并不是线程安全的,一般有两种解决方案: - 对分配内存空间的动作进行同步处理,采用CAS配上失败重试的方式保证更新操作的原子性 - 每个线程在Java堆中预先分配一块内存,称为本地线程分配缓冲(Thread Local Allocation Buffer,TLAB),线程中的对象分配直接在线程内部完成,只有本地的TLAB用完了,分配新的内存才需要同步锁定3. 内存分配之后,虚拟机将对象分配到的内存空间(不包括对象头)都初始化为零值原创 2023-03-10 21:13:15 · 92 阅读 · 0 评论 -
Java动态代理
JDK的动态代理是基于反射实现。JDK通过反射,生成一个代理类,这个代理类实现了原来那个类的全部接口,并对接口中定义的所有方法进行了代理。当我们通过代理对象执行原来那个类的方法时,代理类底层会通过反射机制,回调我们实现的InvocationHandler接口的invoke方法。并且这个代理类是Proxy类的子类。这就是JDK动态代理大致的实现方式。优点JDK动态代理是JDK原生的,不需要任何依赖即可使用;通过反射机制生成代理类的速度要比CGLib操作字节码生成代理类的速度更快;缺点。原创 2023-03-30 08:33:04 · 1218 阅读 · 0 评论 -
JVM内存区域
程序计数器:当前线程所执行的字节码的行号指示器,相当于计算机系统中的PC寄存器,每个线程有一个独立的程序计数器。如果线程正在执行Java方法,计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行本地方法,这个计数器的值为空。- Java虚拟机栈:线程私有,生命周期与线程相同,相当于计算机系统中函数调用的栈。虚拟机栈描述的是Java方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都是同步创建一个栈桢(Stack Frame)用于存储局部变量表,操作数栈、动态连接、方法出口等信息。方原创 2023-03-30 08:58:29 · 92 阅读 · 0 评论 -
Java、Redis、Jackson序列化与反序列化
序列化:简单来说就是将应用程序中的数据转化为特定的格式,可以用于网络传输,保存到磁盘,数据库等。例如Java中的ObjectOutputStream、Python中的pickle是专门的序列化类、Hadoop中各节点数据传输。反序列化:将序列化对象从磁盘、网络等位置重新转化为程序中的对象信息。## 为什么需要序列化> 实现数据的跨语言使用实现数据的跨平台使用数据去内存地址降低磁盘存储空间1. 存储对象在存储介质中,以便在下次使用的时候,可以很快捷的重建一个副本。直接从磁盘、网络等位置转化为原创 2023-04-10 13:09:32 · 2278 阅读 · 0 评论