- 博客(16)
- 收藏
- 关注
原创 深入理解jdk动态代理—手动实现一个动态代理
最近在看《Spring5核心原理》,看到代理模式这一节,有一个手动实现动态代理,想要运行一下,理一下整个过程,但是网上找不到源码,于是自己手动敲了一个,在这里做个分享供大家学习和理解动态代理:package porxy;public class Customer implements Person{ @Override public void findLove() { System.out.println("高富帅"); System.out.println("有6块腹肌"); }}
2020-05-12 18:04:10
212
原创 jvm内存分配与回收策略干货
概述java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决两个问题:给对象分配内存以及回收分配给对象的内存。对象的内存分配,往大方向将,就是堆上分配(但也可能经过JIT编译后被拆散为标量类型并间接地栈上分配),对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配。少数情况也可能会直接分配在老年代中,分配的规则并不是百分之百固定,其细节取决于当前...
2020-04-29 15:09:44
246
原创 垃圾收集器知识点汇总
概述如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、不同版本的虚拟机所提供的垃圾收集器可能会有很大差别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器。这里讨论的收集器基于jdk1.7update 14之后的HotSpot虚拟机,这个虚拟机包含的收集器如图3-5所示...
2020-04-29 10:49:17
271
原创 一起理解垃圾回收算法
概述java内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行这出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的(尽管在运行期会由JIT编译器进行一些优化,但现在基于概念模型的讨论中,大体上可以认为是编译期可知的),因此这几个区域的内存分配和回收都具备确定性,在这几个区域内就不需要...
2020-04-28 10:39:13
222
原创 类加载器知识点梳理
类加载器定义虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为”类加载器“。类加载器可以说是java语言的一项创新,也是java语言流行的重要原因之一。1、类与类加载器**类加载器虽然只用于实现类的加载动作,但它在java程序中起到的作用却远远不限于...
2020-04-26 19:49:36
221
原创 虚拟机类加载机制干货知识点
概述虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。与那些在编译时需要进行连接工作的语言不同,在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为java应用程序提供高度的灵活性,在java里天生可以动态扩展的语言...
2020-04-26 19:45:13
172
原创 jvm字节码执行引擎,都帮你整理好了
概述执行引擎是java虚拟机最核心的组成部分之一。“虚拟机”是相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的,而虚拟机的执行引擎是由自己实现的,因此可以自行制定指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。在java虚拟机规范中制定了虚拟机字节码执行引擎的概念模型,这个概念模型成为各种虚...
2020-04-24 11:45:27
197
原创 带你读懂Class类文件
Class文件Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有添加任何分隔符,这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据,没有空隙存在。当遇到需要占用8为字节以上空间的数据项时,则会按照高位在前的方式分割成若干个8位字节进行存储。根据Java虚拟机规范的规定,Class文件格式采用一种类似于C语言结构体的...
2020-04-22 09:11:45
693
1
原创 程序编译与代码优化—运行期优化
即时编译器在部分的商用虚拟机(Sun HotSpot、IBM J9)中,java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”(hot spot code)。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(...
2020-04-20 08:58:17
573
1
原创 程序编译与代码优化—编译期优化
3类编译过程中比较有代表性的编译器前端编译器:Sun的Javac、Eclipse JDT中的增量式编译器(ECJ)JIT编译器:HotSpot VM的C1、C2编译器AOT编译器:GUN Compiler for the java (GCJ)、Excelsior JETJavac编译器从Sun Javac的代码来看,编译过程大致可以分为3个过程:解析与填充符号表过程插入式注解处...
2020-04-14 19:21:54
395
原创 线程安全与锁优化,全是干货!
线程安全当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行其他任何的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的。java语言中的线程安全为了更加深入的理解线程安全,在这里我们可以不把线程安全当做一个非真即假的二元排他选项来看待,按照线程安全的“安全程度”由弱至强来排序,我们可以将java语言中...
2020-04-13 19:31:57
270
原创 深入理解java虚拟机知识点—java内存模型
为什么要并发?一个很重要的原因是计算机的运算速度与它的存储和通信子系统的差距太大,大量的时间都花费在磁盘I/O、网络通信或者数据库访问上。而让计算机同时处理几项任务则是最容易想到、也被证明是非常有效的“压榨”处理器运算能力的手段。除了充分利用计算机处理器的能力外,一个服务端同时对多个客户端提供服务则是另一个更具体的并发应用场景。衡量一个服务性能的高低好坏,**每秒事务处理数(Transact...
2020-04-10 11:13:58
172
原创 一文带你看懂jvm虚拟机内存管理
运行时数据区程序计数器(线程私有)一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。如果线程正在执行的是一个java方法,记录的是正在执行的虚拟机字节码指令的地址;如果执行的是native方法,这个计数器值则为空。注意:此内存区域是唯一 一个在java虚拟机规范中没有规定任何OutOfMemoryError情况的区域java虚拟机栈(线程私有)虚拟机栈描述的是ja...
2020-04-09 16:10:49
208
原创 Linux服务注册小结
主流的Linux大多使用init.d或systemd来注册服务。下面以centos6.6演示init.d注册服务(centos6 没有使用 systemd,所以没有 systemctl 命令);以centos7.1演示systemd注册服务。注意xxxx.sh一定要记得(chmod +x test.sh )添加可执行权限。1. 基于Linux的init.d部署sudo ln -s /e...
2019-03-12 19:23:10
262
原创 CSS 那些坑我帮你都踩了,快来看看吧!
css 那件小事层叠次序一般而言,所有的样式会根据下面的规则层叠于一个新的虚拟样式表中,其中数字 4 拥有最高的优先权。 1. 浏览器缺省设置 2. 外部样式表 3. 内部样式表(位于 标签内部) 4. 内联样式(在 HTML 元素内部)值得不同写法和单位除了英文单词 red,我们还可以使用十六进制的颜色值 #ff0000:p { color: #f...
2018-05-09 10:33:40
352
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅