
java基础知识
#农村外出务工人员
不要假装努力,结果不会陪你演戏
展开
-
【java基础知识】『7』JVM调优参数详解
(1)jps显示系统内所有的HotSpot虚拟机进程option参数-l: 输出主类全名或jar路径 -m: 输出JVM启动时传递给main()的参数示例 (1.1)# jps -l -m28920org.apache.catalina.startup.Bootstrapstart(2)jmap生成指定进程的堆使用情况 option参数histo : 显示堆中对象的统计信息 heap : 显示Java堆详细信息示例(2.1)# jma...原创 2021-02-03 15:31:10 · 193 阅读 · 0 评论 -
【java基础知识】『6』java内存屏障&缓存一致性应用&volatile深理解
缓存一致性协议:就是任何一个线程更改了数据,都会通知其它线程从主内存获取最新的数据大家都知道,CPU是计算机的心脏,最终由它来执行所有的运算和程序。主内存是数据(包括代码行)存放的地方。在计算机系统中,CPU高速缓存是用于减少处理器访问内存(主)所需平均时间的部件,当处理器发出内存访问请求时,会先查看缓存是否有请求数据,有:则不访问主内存直接返回该数据;无(失效):则先把主内存中的相应数据载入缓存,再将其返回处理器。CPU缓存层级分为L1(<=256k,一级缓存)、L2(256k-8m,二级缓存)原创 2020-11-26 17:05:45 · 318 阅读 · 0 评论 -
【java基础知识】『5』ThreadLocal@Thread@ThreadLocalMap的关系认识&内存泄漏原因分析
Thread,ThreadLocal,ThreadLocalMap 关系如下图通过源码发现,ThreadLocalMap 是Thread的一个类变量,之所以能让线程之间的数据互相不受影响,就是这个原因,如下:而Entry[]又是ThreadLocalMap的一个成员变量,它是针对一个线程有多个ThreadLocal变量使用的情况,其对象Entry的Key和Value分别是我们的Th...原创 2020-03-13 16:59:37 · 495 阅读 · 2 评论 -
【java基础知识】『3』JVM类生命周期过程
程序运行时,类的生命周期有加载、验证、准备、解析、初始化五个过程。(1)、准备JVM为类变量分配内存以及初始化 java中的变量有2种类型,分别为类变量(被static修饰的变量)和类成员变量(除了类变量的其它变量) 在准备阶段,JVM只会为类变量分配内存, 而不会为类成员变量分配内存,到初始化阶段才会为类成员变量分配内存(1.1)、初始化的类型 在准备阶段,...原创 2019-03-18 16:44:28 · 246 阅读 · 0 评论 -
【java基础知识】『4』JVM内存模型之Heap(堆)内存分析
JVM内存模型中,Heap区被分为新生代和老年代两个区域,新生代又分为Eden+Survivor1+Survivor2新生代收集算法主要是使用复制算法,老年代收集算法主要使用标记-清理或标记-整理算法。堆内存划分如下:新生代在发生首次YGC的时候,Eden内存活的对象会被复制到S1;再发生YGC的时候,Eden内存活的对象和S1内存活的对象复制到S2,同时清除Eden内的对象和S1...原创 2020-02-28 10:41:57 · 563 阅读 · 0 评论 -
【java基础知识】『2』Byte一个字节的数据大小范围为什么是-128~127
一个字节是8位,最高位是符号位,最高位为0则是正数。最高位为1则是负数如果一个数是正数,最大数则为:01111111,转为十进制为127,如果一个数是负数,按照一般人都会觉得是11111111,转为十进制为-127,但是:一个+0表示为:00000000,一个-0表示为:1000000,因为符号位不算在里面,所以就会有两个0,所以从一开始发明二进制的时候,就把-0规定为-128,如此二...原创 2018-12-18 16:32:05 · 2152 阅读 · 0 评论 -
【java基础知识】『1』classpath的几点理解
src不是classpath,而是源码路径, WEB-INF/classes,lib才是classpathWEB-INF/ 是资源目录, 客户端不能直接访问,这话是没错,不过现在的IDE编译器在编译时会把src下的文件(是文件,不是.java)移到WEB-INF/classes下。不过值得注意的是,spring配置文件里这个locations是uri表示,也就是说你写的jdbc.pr原创 2016-08-31 09:51:40 · 700 阅读 · 1 评论 -
【线程池】java线程池执行流程理解
有时候项目中要使用到队列和多线程,写个例子留着随笔,方便后续使用大家都知道,多线程是为了能更高效的运行程序,而线程池是为了控制一个进程中线程过多而导致内存溢出的问题,队列主要是为了解决了某一时刻请求过多而出现的宕机情况,同时能接收处理更多的请求,可以将多个请求放置到队列中,等待线程依次执行,而客户端则可以继续处理其它事情。线程池和队列执行顺序:1、线程池刚创建时,里面没有一个原创 2016-05-31 14:41:44 · 1171 阅读 · 0 评论