垃圾回收器选型


[原创]个人理解,请批判接受,有误请指正。转载请注明出处: https://heyfl.gitee.io/JVM/jvm-gc.html

总揽

吞吐量和最短停顿时间本来就互相矛盾
Parallel Old追求的是吞吐量,CMS追求的是STW的最短
而G1通过把堆分成多个相对独立的Region块,并行的进行选择性的回收,实现一个两者兼顾的回收器

Parallel GC:

阅读更多

报表JVM调优


[原创]个人理解,请批判接受,有误请指正。转载请注明出处: https://heyfl.gitee.io/JVM/report-jvm-optimize.html

忘记记录了。。凭记忆记录下😂,下面是大概流程

背景

之前上线的一个新报表项目,我们的报表服务主要通过定时任务异步生成报表,报表比较大,每次运行时长长,实时性要求较低。
但在生产环境普罗米修斯监控中,发现服务频繁进行GC,且GC前后释放的内存不多,GC期间CPU占用略高。但是GC时长看着很短,为了解决这个问题,我进行了一次针对报表服务的JVM调优

阅读更多

Java I/O模型与系统I/O模型

[原创]个人理解,请批判接受,有误请指正。转载请注明出处: https://heyfl.gitee.io/system/IO-model2.html

接: IO模型

Java I/O模型与系统I/O模型的映射关系

Java的I/O模型是建立在底层系统I/O模型之上的,它通过对底层系统I/O调用的封装,提供了更高层次的抽象和统一的I/O接口。Java的I/O类库支持的I/O模型和底层系统I/O模型之间的映射关系如下:

  1. 阻塞式I/O模型

    Java的I/O类库默认使用阻塞式I/O模型。在该模型下,I/O操作会一直阻塞,直到数据准备好或者操作完成才返回。对应的系统I/O模型是传统的阻塞式I/O模型。主要对应的系统I/O模型是Linux系统中的read(), write()

    这里主要是各种Stream、Reader、Writer、Socket的读写,其中Socket为:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();

    // 监听 8080 端口进来的 TCP 链接
    serverSocketChannel.socket().bind(new InetSocketAddress(8080));

    while (true) {

    // 这里会阻塞,直到有一个请求的连接进来
    SocketChannel socketChannel = serverSocketChannel.accept();

    // 开启一个新的线程来处理这个请求,然后在 while 循环中继续监听 8080 端口
    SocketHandler handler = new SocketHandler(socketChannel);
    new Thread(handler).start();
    }
  2. 非阻塞式I/O模型

    Java的I/O类库可以使用非阻塞式I/O模型。在该模型下,I/O操作会立即返回,不会阻塞,但此时数据可能还没有准备好或者操作没有完成。需要使用轮询的方式检查操作是否完成。对应的系统I/O模型是非阻塞式I/O模型。主要对应的系统I/O模型是Linux系统中的select()或poll()函数
    java中主要是通过selector轮询socket的事件:

阅读更多

IO模型

[原创]个人理解,请批判接受,有误请指正。转载请注明出处: https://heyfl.gitee.io/system/IO-model.html

背景

服务器网络模型
这篇IO模型是《每天进步一点点》里的第一篇学习记录,真的是忘了看看了忘了。。其实不用记服务器的,大概理一下JAVA自己的就简单多了,这里稍微总结一下:

JAVA IO模型

JAVA的IO模型分为BIO、NIO、AIO三种,其中BIO是阻塞IO,NIO是非阻塞IO,AIO是异步IO

阅读更多

深入理解Java虚拟机-阅读整理


[原创]个人理解,请批判接受,有误请指正。转载请注明出处: https://heyfl.gitee.io/JVM/JVM-Xmind.html

看完《深入理解Java虚拟机》了(好像是教这个名字吧😂),花了小几个月边看边整理,终于呕心沥血地整理完的,书籍作者基于jdk7写的,加入分析对比了一些jdk8的新特性,以及官方文献的引用,因为JVM还是比较底层灰色,难免有些地方可能有误,欢迎指正。

图片很大,需要放大看,实在看不清,可以去github上自取源Xmind文件:点这里跳转
(有一章类结构偷懒没看,自我感觉用处不是很大)

img.png

java虚拟机栈的内存结构


[原创]个人理解,请批判接受,有误请指正。转载请注明出处: https://heyfl.gitee.io/JVM/JVM-Memory-Structure-Stack.html

学习JVM的可以去我的GitHub 上查看我的Xmind详细笔记 对整本《深入理解JVM》都有详尽的笔记,帮助理解

一、 前言

Java栈分为两种:

  1. Java虚拟机栈:
    • 描述java【方法】执行的【内存模型】
    • 每个线程进入每个方法对应一个栈帧
  2. 本地方法栈(本文不做描述)
    • 同虚拟机栈,区别在于:虚拟机栈服务于Java方法(字节码),本地方法栈服务于Native方法
      本文主要讲Java虚拟机栈的内存结构

一图胜千言

Java虚拟机栈

阅读更多

JVM内存结构-总纲


[原创]个人理解,请批判接受,有误请指正。转载请注明出处: https://heyfl.gitee.io/JVM/JVM-Memory-Structure-Menu.html

学习JVM的可以去我的GitHub 上查看我的Xmind详细笔记 对整本《深入理解JVM》都有详尽的笔记,帮助理解

前言

网上有不少描述JVM内存结构的文章,但是要么比较老久了,要么描述有误,今天根据自己的理解整理下,有误请指正。

整体图解

JVM内存区域


程序计数器

记录Java程序运行到哪里

阅读更多

常见查找算法应用总结2

接: 常见排序算法应用总结

前言

其实多算法涉及不是很深,也不打算在使用前深究,究了没多久就忘了纯属浪费时间。这里做下记录,日后用到直接来这里找就完事啦~~

常见搜索算法及其特点

1. 线性搜索(Linear Search)

阅读更多

常见排序算法应用总结

前言

其实多算法涉及不是很深,也不打算在使用前深究,究了没多久就忘了纯属浪费时间。这里做下记录,日后用到直接来这里找就完事啦~~

常见排序算法时间:

1. 冒泡排序(Bubble Sort)

  • 时间复杂度:最好情况 O(n),最坏情况 O(n^2)
  • 空间复杂度:O(1)
  • 使用场景:适用于数据规模较小的情况,且数据分布情况不明显
  • 优势:实现简单易懂
  • 缺点:效率较低,不适用于大规模数据的排序
  • 具体案例:对于一个由数值大小不一的小数组进行排序,例如对一个长度为 10 的数组进行排序
阅读更多