Java基础
李大有
这个作者很懒,什么都没留下…
展开
-
【回调消息解决方案】Java手写一个简单的消息存储队列用以存储需要推送的实时数据
一、问题背景有这种场景:当某一些消息由服务器发送到后台时,往往是在一个回调函数中获取。我们如何从回调函数中获取它并可以由不同的个体创建不同的队列,再将实时获取的消息推送出去呢?二、方案雏形一般来说,我们用一个队列存储取得的回调消息,然后在其他我们需要的地方从这个队列中取出消息,由此可以知道需要这么做:1、这个队列由于经常增减,应该是链表形式的2、这个队列应该只有一个实例,这样才能在其他地方取出消息3、当存在多条消息同时向队列存入的情况时,它应该保持原子性以下代码来自这篇博客:https://b原创 2020-09-14 11:17:00 · 562 阅读 · 0 评论 -
【JVM】虚拟机类加载过程以及Java的类加载器结构和机制简述
一、类加载过程简述这里只是简单说明,不了解详细过程的读者可以查阅相关资料。一个类型被加载到虚拟机的内存开始到卸载出内存,它的生命周期经历了以下的阶段:加载——验证——准备——解析——初始化——使用——卸载其中,验证、准备、解析三个阶段被统称为“连接”。1、加载在加载阶段,虚拟机需要完成以下的三件事:1)通过一个类的全限定名来获取定义此类的二进制字节流。2)将这个字节流所代表的的静态存储结构转化为方法区的运行时数据结构。2)在内存中生成一个代表这个类的java.lang.Class对象,作为原创 2020-06-13 17:18:44 · 186 阅读 · 0 评论 -
【JVM 重要了解】class类文件中方法调用涉及的一些概念(简单名称、描述符、全限定名、方法句柄和方法类型、动态调用方法、符号引用)
一二中的概念如图展示:package com.study.method;public class TestClass { private int x; public int addResult() { return x+1; }}一、简单名称没有类型和参数修饰的方法或字段名称比如整形变量x和方法addResult。二、全限定名一个类的全限定名是将类全名的.全部替换为/例如com/study/method/TestClass三、描述符原创 2020-05-28 11:30:53 · 576 阅读 · 0 评论 -
【Java并发】关于之后会涉及到的一些基础概念,以及线程基本操作
1、同步和异步同步:同步方法一旦开始以后,调用者须等到方法调用返回才能进行后续操作异步:异步方法通常会在另一个线程里执行,中途不会阻碍调用者的后续操作2、并发和并行并发:注重多个任务交替执行,而这些任务可能依然都是串行的并行:多个任务是严格的同时执行的3、临界区,阻塞里面是共享资源,即多个线程公共的资源。每一次只能有一个线程访问临界区,其他线程会被挂起,这种情况即称其他线程被阻塞。4、死锁,饥饿,活锁死锁:线程之间互相占用的对方的资源且拒绝释放,造成了线程都无原创 2020-05-11 20:28:22 · 149 阅读 · 0 评论 -
【Java基础】类文件结构(一)(以及两个虚拟机进程查看的自带小工具)
不管是现在安卓使用的kotlin还是groovy,Scala这些,其实都是运行在Java虚拟机之上的,类似这样的特性被称为语言无关性,而这个特性就是今天主要要说的。语言无关性的基础实现语言无关性的基础是虚拟机和字节码存储格式,Java虚拟机只是与class文件这种特定的二进制文件有着关联。对于Java语言来说,其中的语法、关键字之类的最终都会变成多条字节码指令组合来表示,这里也从侧面说...原创 2020-04-20 17:34:21 · 129 阅读 · 0 评论 -
【JVM】内存分配与回收概念详解与实例
Java自动内存管理的最根本目标是自动化地解决两个问题:1、自动给对象分配内存2、自动回收分配给对象的内存一、虚拟机中的垃圾收集器判断对象是否存活以及回收的部分算法分析什么时候需要对内存动态分配和内存回收进行监控和调节呢?当我们需要排查各种内存溢出、内存泄漏问题时,以及垃圾收集成为系统达到更高并发量瓶颈的时候。内存分配与回收的讨论主要指Java堆及方法区(这里是保存系统类信...原创 2020-04-13 15:05:02 · 339 阅读 · 0 评论 -
【JVM】自动内存管理实例测试
一、运行时数据区域如下图,Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。目前只作了了解,还未深入学习。二、HotSpot虚拟机对象的访问定位主流的对象访问方式有句柄访问和直接指针访问,以下是图解:句柄访问的最大好处是对象移动时只会改变句柄中的实例数据指针,而对对象的引用本身不需要修改。直接指针访问的最大好处是速度更快。因为它节...原创 2020-04-06 17:50:22 · 140 阅读 · 0 评论 -
【JVM】编译openJDK8,以及配置相关工具的过程(以及耗时四天并没有成功的失败经历)
一、编译前准备及编译环境1.1本机环境配置我在编译openJDK8时准备的虚拟机是ubuntu16.04版本,本机上使用的是CLion,配置上Cygwin类Linux环境来阅读openJDK8的源码关于CLion配置Cygwin的详细过程见这篇博文:https://blog.csdn.net/qq_36819130/article/details/78668249作者:ming_514...原创 2020-03-30 13:35:23 · 426 阅读 · 0 评论 -
【总论+了解】Java发展史
本文中提到的一些技术点会在之后继续更详细地更新Java技术体系组成部分:Java程序设计语言各种硬件平台上的Java虚拟机实现Class文件格式Java类库API来自商业机构和开源社区的第三方Java类库JDK:Java程序设计语言、Java虚拟机、Java类库 支持Java程序开发的最小环境JRE:JavaSE API子集、Java虚拟机 支持Java程序运行的标准环境Jav...原创 2020-03-23 14:02:45 · 160 阅读 · 0 评论