- 博客(19)
- 收藏
- 关注
原创 Buffer缓冲区理解(capacity,limit,position)
Java NIO中的Buffer用于和NIO通道进行交互。Buffer类型:ByteBuffer,MappedByteBuffer,CharBuffer,DoubleBuffer,FloatBuffer,IntBuffer,LongBuffer,ShortBufferMappedByteBuffer:操作大文件的方式,其读写性能极高。Buffer中有三个重要的参数:capacity:最大容量,永远不能为负数,并且不会变化。limit:限制,可读数据,永远不能为负数,并且不会大于capacity。
2020-09-26 16:07:08 2813 2
原创 jvm深入理解:基础故障处理工具总结
出入:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)基础工具:用于支持基本的程序创建和运行安全:用于程序签名、设置安全测试等国际化:用于创建本地语言文件远程方法调用:用于跨Web或网络的服务交互Java IDL与RMI-IIOP:在JDK 11中结束了十余年的CORBA支持,这些工具不再提供部署工具:用于程序打包、发布和部署Java Web Start性能监控和故障处理:用于监控分析Java虚拟机运行信息,排查问题WebService工具:与CORBA一起在JD
2020-08-30 21:10:01 199
原创 jvm深入理解:基础故障处理工具(jps、jstat、jinfo、 jmap、jhat、jstack)
出入:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)jps:虚拟机进程状况工具JDK的很多小工具的名字都参考了UNIX命令的命名方式,jps(JVM ProcessStatus Tool)是其中的典型。除了名字像UNIX的ps命令之外,它的功能也和ps命令类似:可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及这些进程的本地虚拟机唯一ID(LVMID,LocalVirtual Machine Identifier)。虽然功能比较单一,
2020-08-27 21:25:02 342
原创 jvm深入理解:内存分配与回收策略(优先在Eden分配、大对象直接进入老年代、长期存活的对象将进入老年代、动态对象年龄判定、空间分配担保)
出入:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)Java技术体系的自动内存管理,最根本的目标是自动化地解决两个问题:自动给对象分配内存以及自动回收分配给对象的内存。象的内存分配,从概念上讲,应该都是在堆上分配(而实际上也有可能经过即时编译后被拆散为标量类型并间接地在栈上分配)。在经典分代的设计下,新生对象通常会分配在新生代中,少数情况下(例如对象大小超过一定阈值)也可能会直接分配在老年代。对象分配的规则并不是固定的,《Java虚拟机规范》并未规定新对象的创建和存储细节,这取决于虚拟机当前
2020-08-25 20:31:49 1038
原创 jvm垃圾收集器之Epsilon收集器
出入:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)总结:Epsilon收集器不做垃圾收集,负责堆的管理与布局、对象的分配、与解释器的协作、与编译器的协作、与监控子系统协作等职责。隔离垃圾收集器与Java虚拟机解释、编译、监控等子系统的关系。如果应用只要运行数分钟甚至数秒,只要Java虚拟机能正确分配内存,在堆耗尽之前就会退出,那显然运行负载极小、没有任何回收行为的Epsilon便是很恰当的选择。Epsilon收集器在G1、Shenandoah或者ZGC这些越来越复杂、越来越先进的垃圾收集
2020-08-20 21:39:45 341
原创 netty源码知识点整理三(serverBootstrap.bind-->AbstractBootstrap.doBind)
学习netty源码知识点整理,理解的地方注释,不理解的地方依然不理解。ChannelFuture future = serverBootstrap.bind(9090).sync();底层调用是AbstractBootstrap.doBind方法private ChannelFuture doBind(final SocketAddress localAddress) { // 初始化和注册,用户自己设置的参数,设置连接初始化的Pipeline(也就是我们handler里面设置的参数)
2020-08-18 21:54:05 197
原创 netty源码知识点整理二(NioEventLoopGroup)
学习netty源码知识点整理创建工作线程:EventLoopGroup workerGroup=new NioEventLoopGroup()new NioEventLoopGroup()最底层源码MultithreadEventExecutorGroup//nThreads如果不传默认是0 如果是0的话 就获取CPU核数的两倍//executor默认为null//chooserFactory事件执行策略工厂//args包含:selectorProvider用来创建ServerSocke
2020-07-21 20:49:28 154
原创 jvm如何选择适合的垃圾收集器
出入:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)学习后,整理一下怎么选择垃圾收集器。使用经典垃圾收集器选择1、单CPU或内存较小,使用Serial收集器它依然是HotSpot虚拟机运行在客户端模式下的默认新生代收集器,有着优于其他收集器的地方,那就是简单而高效(与其他收集器的单线程相比),对于内存资源受限的环境,它是所有收集器里额外内存消耗(Memory Footprint)最小的;对于单核处理器或处理器核心数较少的环境来说,Serial收集器由于没有线程交互的开销,专心做垃圾收集
2020-07-20 22:20:10 834
原创 netty源码知识点整理一(线程模型)
最近跟着一些netty源码视频,学习了netty源码,netty的类太多,记不住,这里将理解了的知识点整理一下,免得忘了。不断更新中,,,,示例代码public static void main(String[] args) throws InterruptedException { // 就是一个死循环,不停地检测IO事件,处理IO事件,执行任务 // 主线程指定多个线程,绑定几个端口用几个线程,绑定一个端口,只用一个线程 // 创建一个线程组:接受客户
2020-07-18 21:30:48 278
原创 jvm低延迟垃圾收集器(ZGC)
出入:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)ZGC全称Z Garbage Collector,是一款在JDK 11中新加入的具有实验性质的低延迟垃圾收集器,是由Oracle公司研发的。2018年Oracle创建了JEP 333将ZGC提交给OpenJDK,推动其进入OpenJDK 11的发布清单之中。ZGC下一个这样的定义来概括它的主要特征:ZGC收集器是一款基于Region内存布局的,(暂时)不设分代的,使用了读屏障、染色指针和内存多重映射等技术来实现可并发的标记-整理算法的,以低
2020-07-16 20:17:09 486
原创 Java NIO和IO的区别整理
最近在学习netty的源码,类有点多,有点复杂,重点知识点整理一下。同步:被调用者未处理完请求之前,调用不返回,调用者会一直等待结果的返回。异步:调用者无需等待被调用者返回,返回之前可以做其他事情,被调用者处理完后,通过回调或者其他方式通知调用者。阻塞:等待条件就绪后,才会往下执行,否则当前线程挂起。非阻塞:无需等待条件就绪,可以干其他的事情。条件就绪后再去处理它。java三种io模型:同步堵塞io模型(BIO)、同步非阻塞的I/O模型(NIO)、异步非阻塞的IO模型(AIO)同步堵塞io模型
2020-07-15 20:42:08 347
原创 jvm低延迟垃圾收集器(Shenandoah)
出入:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)衡量垃圾收集器的三项最重要的指标是:内存占用(Footprint)、吞吐量(Throughput)和延迟(Latency),三者共同构成了一个“不可能三角”。三者总体的表现会随技术进步而越来越好,但是要在这三个方面同时具有卓越表现的“完美”收集器是极其困难甚至是不可能的,一款优秀的收集器通常最多可以同时达成其中的两项。内存占用、吞吐量和延迟这三项指标里,延迟成为垃圾收集器最被重视的性能指标。其原因是随着计算机硬件的发展、性能的提升,我们越
2020-07-13 20:06:38 533
原创 jvm经典垃圾收集器
出入:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)本节标题中“经典”二字并非情怀,它其实是讨论范围的限定语,这里讨论的是在JDK 7Update 4之后(在这个版本中正式提供了商用的G1收集器,此前G1仍处于实验状态)、JDK11正式发布之前,OracleJDK中的HotSpot虚拟机所包含的全部可用的垃圾收集器。使用“经典”二字是为了与几款目前仍处于实验状态,但执行效果上有革命性改进的高性能低延迟收集器区分开来,这些经典的收集器尽管已经算不上是最先进的技术,但它们曾在实践中千锤百炼,足够成
2020-07-12 20:00:04 308
原创 HotSpot的算法细节实现
出入:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)看到这一章,自己也有些模棱两可,无法归纳出自己的见解,后面慢慢理解吧。根节点枚举我们以可达性分析算法中从GC Roots集合找引用链这个操作作为介绍虚拟机高效实现的第一个例子。固定可作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表)中,尽管目标明确,但查找过程要做到高效并非一件容易的事情,现在Java应用越做越庞大,光是方法区的大小就常有数百上千兆,里面的类、常量等更是恒河沙数,若要
2020-07-08 22:42:49 632
原创 jvm垃圾收集算法和分代收集理论
出入:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)从如何判定对象消亡的角度出发,垃圾收集算法可以划分为“引用计数式垃圾收集”(Reference Counting GC)和“追踪式垃圾收集”(Tracing GC)两大类,这两类也常被称作“直接垃圾收集”和“间接垃圾收集”。本节介绍的所有算法均属于追踪式垃圾收集的范畴。分代收集理论当前商业虚拟机的垃圾收集器,大多数都遵循了“分代收集”(Generational Collection)的理论进行设计,分代收集名为理论,实质是一套符合大多数
2020-07-08 22:42:22 424 1
原创 jvm垃圾收集之对象已死
判断对象‘死亡’算法1、引用计数算法在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。主流的Java虚拟机里面都没有选用引用计数算法来管理内存,譬如单纯的引用计数就很难解决对象之间相互循环引用的问题。2、可达性分析算法当前主流的商用程序语言(Java、C#,上溯至前面提到的古老的Lisp)的内存管理子系统,都是通过可达性分析(Reachability Analysis)算法来判定对象是否存活的。算法的基本
2020-07-05 21:20:44 259
转载 java对象创建、内存布局和访问定位
出入:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)1.1对象创建当Java虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。这里常量池应该是方法区-》运行时常量池。新生对象内存分配方式:指针碰撞(Bump The Pointer):假设Java堆中内存是绝对规整的,所有被使用过的内存都被放在一边,空闲的内存被放在另一边,中间放着一个指针作
2020-07-02 21:16:17 1430
原创 JDK软件开发工具包介绍
出入:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)我们可以把Java程序设计语言、Java虚拟机、Java类库这三部分统称为JDK(JavaDevelopment Kit),JDK是用于支持Java程序开发的最小环境。JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。可以把Java类库API中的Java SE API子集和Java虚拟机这两部分统称为JRE(Java Runtime Environment),JRE是支持Java程序运行的
2020-07-01 22:04:10 480
原创 jvm深入理解:运行时数据区知识点梳理
2020年初,得知周志明老师出了深入理解java虚拟机第三版,之前一直听说这个系列的书籍是java中的圣经,所以买了本进行了研读,这里将重要知识点整理一下,再配合写一些自己的理解,以便以后的一个复习。一、运行时数据区Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。1.1 程序计数器占用内存小,字节码的行号指示器。程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。线程私有。...
2020-07-01 21:34:52 262
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人