jvm
文章平均质量分 59
zlpzlpzyd
成长路上......
展开
-
linux支持的零拷贝(zero copy)类型以及java对应的支持
如上述表格,在传统 io 的基础上,mmap 方式少了一次 cpu 复制,sendfile 相比 mmap 少了1次用户态切换,1次内核态切换,系统调用少了1次,sendfile+DMA scatter/gather 在单纯的 sendfile 调用基础上少了1次cpu复制,后面的 direct io、splice、tee 在资源消耗上类似。将内核中的读缓冲区与用户空间的缓冲区进行映射,所有的IO都在内核中完成。将 cpu 的复制操作交给网卡去做,需要网卡支持并且提供对应的驱动程序。原创 2024-01-01 11:50:04 · 462 阅读 · 0 评论 -
linux 的直接direct io O_DIRECT
Direct IO也叫无缓冲IO,裸IO(rawIO),意思是使用无缓冲IO对文件进行读写,不会经过page cache。通常,我们使用的文件流读取、内存映射都属于 Cache IO,因为将数据写入文件,首先会写入cache,最终再落盘到 IO device 或者称为 disk上。cache IO 使得我们在写入、读取(预读取、顺序读取等特性)文件数据的时候,性能得以提升,能够从cache(内存)中读取数据。原创 2024-01-01 01:06:08 · 998 阅读 · 0 评论 -
java零拷贝zero copy MappedByteBuffer
java零拷贝zero copy MappedByteBuffer原创 2023-12-31 22:13:16 · 874 阅读 · 0 评论 -
java中的缓冲类HeapByteBuffer和DirectByteBuffer的区别
通过分析可以得出如下HeapByteBuffer 使用简单,每次执行数据读取写入间接创建 DirectByteBuffer,效率低。DirectByteBuffer 使用相对麻烦,但是效率高,需要考虑到通过 ByteBuffer 分配的缓冲区与 jvm 参数 -XX:MaxDirectMemorySize 是否合理的问题,不然的在运行过程中会出现内存溢出问题。原创 2023-12-30 18:28:40 · 898 阅读 · 0 评论 -
java中PhantomReference WeakReference SoftReference垃圾回收触发时机以及使用场景
java中PhantomReference WeakReference SoftReference垃圾回收触发时机以及使用场景原创 2023-12-30 19:55:18 · 1041 阅读 · 0 评论 -
操作系统用户态和内核态的由来以及区别
操作系统用户态和内核态的区别 虚拟线程原创 2023-12-29 15:22:02 · 712 阅读 · 0 评论 -
java伪共享问题
java 伪共享原创 2023-11-22 12:49:12 · 100 阅读 · 0 评论 -
java中的Closeable与AutoCloseable
然后通过语法糖 try-with-resources 在 try 关键字后添加一个小括号,针对 Closeable 或 AutoCloseable 的实现类在编译器编译源代码的时候添加异常处理逻辑来处理流关闭的问题,从而实现了。针对这个,让我想到了虚拟线程的实现 alibaba dragonwell,在 openjdk 8 的基础上修改 jvm 底层源码,在不改变源码的基础上支持一对多的线程模型。其实推出的这些新功能最大的好处就是让语言的使用者偷懒了,因为在底层把这个问题处理了(哈哈哈)原创 2023-11-14 00:39:16 · 170 阅读 · 0 评论 -
jdk版本与class文件格式major版本对应关系
jdk版本与class文件格式major版本对应关系原创 2023-10-27 14:43:21 · 91 阅读 · 0 评论 -
java项目运行时信息获取
大体思路如下,想要获取启动时处理器数量、jvm 相关信息,操作系统信息、运行机器信息。原创 2023-10-21 23:04:06 · 1097 阅读 · 0 评论 -
java项目容器化(docker)部署注意点
其中,-XX:InitialRAMFraction、-XX:MaxRAMFraction、-XX:MinRAMFraction 标记为过期,对应的替换参数将 Fraction 替换为 Percentage,即 -XX:InitialRAMPercentage、 -XX:MaxRAMPercentage、-XX:MinRAMPercentage。jdk 10原创 2023-10-21 01:56:53 · 374 阅读 · 0 评论 -
jdk对linux cgroup v2容器化环境识别情况
这个影响到 jvm 能否对容器环境进行识别处理。原创 2023-10-21 01:38:31 · 374 阅读 · 0 评论 -
jvm 各个版本支持的参数
知道一些 jvm 调优参数,但是没有找到官网对应的文档,在网上的一些文章偶然发现,记录一下。包含各个版本。原创 2023-10-18 12:50:24 · 432 阅读 · 0 评论 -
jdk 21发布的意义 虚拟线程
lts 支持到 2026年9月,除了 jdk 21,还有 3个lts版本,分别是 jdk 8、jdk 11、jdk17。jdk 8 的 lts 时间最长,到 2030年12月。但是考虑到许可证的问题,一般部署jdk都使用的是 openjdk。现在 spring 官方一直在发布 milestone 版本,过了不久就会发布正式的 spring 6.1 版本相关的组件。spring boot 3.2 开始支持 spring 6.1 相关组件。原创 2023-09-22 10:38:40 · 343 阅读 · 0 评论 -
各种jdk的区别
在周志明的书籍《深入java虚拟机》上看过有azul的产品zing和zulu,但是去官网看了一下,现在改名了。网上一些是在 openjdk 的基础上进行了编译,有的是在这个基础上进行了 jvm 的代码重写进行功能优化。在 openjdk 的基础上,添加了一些商用的功能。这些 jdk 在自己对应的公司内部的服务上经历了验证。看这篇文章说开源了jvm的源码,但是还没找到。官方发布的 docker 镜像。官方发布的 docker 镜像。官方发布的 docker 镜像。官方发布的 docker 镜像。原创 2023-10-17 10:57:44 · 236 阅读 · 0 评论 -
jvm线程栈大小设置 -XX:ThreadStackSize -Xss
XX:ThreadStackSize 的默认值为 512 k字节,即设置值为0的情况下。但是在不同的平台上此参数不同。-Xss 与 -XX:ThreadStackSize 作用相同。原创 2023-03-28 22:41:57 · 795 阅读 · 0 评论 -
java可见性问题的来源
java可见性问题的来源原创 2023-03-20 20:26:35 · 48 阅读 · 0 评论 -
jvm参数
jvm参数原创 2023-03-19 22:24:02 · 42 阅读 · 0 评论 -
jvm gc官方文档
jvm gc官方文档原创 2023-03-19 20:55:08 · 48 阅读 · 0 评论 -
JVM垃圾收集算法
JVM垃圾收集算法原创 2023-03-19 18:32:54 · 52 阅读 · 0 评论 -
java OutOfMemoryError问题原因排查
因为新生代和老年代的默认分配比例为 1:2,所以新生代分配了 1g 内存。由于 Eden 和 Survivor 的比例为 8:1,所以需要进行 gc,但是新生代晋升到老年代对象有两种方式,标红部分为生成文件时导出的文件数据,其中对象占用 86 MB内存,GC Root 引用的对象是 > 1,07 GB。以上两种情况都无法满足,即无法升级到老年代,所以发生了 oom。程序oom后生成了dump文件,使用mat文件分析后如下。原创 2022-12-21 16:18:05 · 283 阅读 · 0 评论 -
java内存模型(jmm)产生的原因
除了增加高速缓存之外,为了使cpu内存的运算单元能进行被充分利用,cpu可能会对输入代码进行乱序执行优化,cpu会在计算之后将乱序执行的结果重组,保证该结果与顺序执行的结果是一致的,但并不保证程序中各个语句计算的先后顺序与输入代码中的顺序一致,因此如果存在一个计算任务依赖另外一个计算任务的中间结果,那么其顺序性并不能靠代码的先后顺序来保证。由于计算机的存储设备与cpu的运算速度有几个数量级的差距,所以现代计算机系统不得不加入一层或者多层使读写速度尽可能接近cpu运算速度的高速缓存来作为内存与cpu的缓冲。原创 2022-10-02 12:52:12 · 460 阅读 · 0 评论 -
软件开发中的时空问题感悟
项目用了k8s,对于k8s不太了解,但是通过lens看到项目的gc使用的是serial,jmap命令执行到后期eden区域总是处于100%无法回收,再接下来就是lens显示重启了,因为项目重启后容器就销毁了,无法查看dump文件,之前这个问题不是很重要,就没在意。因为是调用了定时任务,定时任务中有一个数据导出到excel的问题(使用easyexcel来处理),目前从数据库查询后符合要求的。,这样一来,任务执行时间就长了,还好这个任务不是对时间要求很高的。目前在做的项目遇到了一个问题。原创 2022-09-03 18:27:12 · 163 阅读 · 0 评论 -
jvm参数顺序问题
近期在做gc切换的问题,发现一个问题,如果gc参数设置到后面,会有不生效的情况。gc,内存分配堆大小参数在前面,-jar 参数在最后面。例如 jdk 8 使用 serial gc。原创 2022-09-03 18:00:07 · 553 阅读 · 0 评论 -
java synchronized 对锁对象升级的获得与释放
线程执行到 synchronized 关键字时对 lock 对象的处理情况原创 2022-07-01 15:42:09 · 153 阅读 · 0 评论 -
java String intern() 方法学习笔记
在周志明的《深入理解java虚拟机》,2nd,p57中有一部分代码String str1 = new StringBuilder("计算机").append("软件").toString();System.out.println(str1.intern() == str1);String str2 = new StringBuilder("ja").append("va").toString();System.out.println(str2.intern() == str2);对照着..原创 2022-04-27 11:56:02 · 576 阅读 · 0 评论 -
jvm中普通对象存储位置的思考
Eden区域TLAB分布情况近期在看周志明的《深入理解java虚拟机》,根据内存分布图最终追溯到TLAB中,由此考虑,最终对象分配在这里,不知思考是否对,在此做一下记录。2022.04.25原创 2022-04-25 20:35:21 · 510 阅读 · 0 评论 -
《深入理解java虚拟机》一书中“元数据”名词理解
在周志明的《深入理解java虚拟机》,2nd,p47中有一部分文字如果对象是一个java数组,那在对象投中还必须有一块用于记录数组长度的数据,因为虚拟机可以通过普通java对象的元数据信息确定java对象的大小,但是从数组的元数据中却无法确定数组的大小。元数据即描述数据的数据,类似于mysql数据库中有单独存储了表信息和索引的表。由此考虑到整理的java内存分布图,想到类加载类信息加载到元空间里,其他地方暂时没有存储的地方,想到“元数据”对应的是“元空间”里的类信息。...原创 2022-04-25 20:22:48 · 1836 阅读 · 0 评论