
后端开发进阶
文章平均质量分 64
分享关于后端开发的经验技巧
程序员小迷
从前有只猫,它不去抓老鼠,而是想吃面包店的面包,最终它变成了人.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
谈魔兽世界服务器和客户端交互的架构
我没有做过网络游戏开发,前一段时间研究了魔兽世界私服,对于魔兽世界的服务器端和客户端交互有了一定的理解,在这里分享一下。对于多人在线网络游戏来说,服务器的低位当然是很重要的。因为,一个服务器上,存在数个客户端和它连接,可能是5000~10000人,需要及时和服务器交互,并且需要将角色或者场景的变化信息更新到客户端,服务器必须要应付得了这些请求。当然,不要以为游戏客户端那么绚丽,原创 2024-08-04 11:30:07 · 2092 阅读 · 0 评论 -
内存屏障和同步屏障傻傻分不清楚
在大多数处理器的实现中,这个屏障是个万能屏障,兼具其它三种内存屏障的功能。这是因为在同步区内对变量的写入操作,在离开同步区时就将当前线程内的数据刷新到主内存中,而对数据的读取也不能从缓存读取,只能从主内存中读取,这样就保证了数据的读写有效性。原创 2024-05-19 12:46:47 · 644 阅读 · 0 评论 -
WebSocket概述
7、HTTP规范要求浏览器将并发连接数限制为每个主机名2个连接,但使用WebSocket时,当握手完成后,该限制就不存在了,因为此时的连接已经不再是HTTP连接了。8、WebSocket协议支持扩展,用户可扩展协议,实现部分自定义的子协议。原创 2024-05-10 19:31:54 · 270 阅读 · 0 评论 -
垃圾收集器你不知道的点
2.在JDK1.7正式引入,采用分区回收的思维,将堆内存划分为多个大小相等的区域,优先回收价值最大的区域,基本不牺牲吞吐量的前提下完成低停顿的内存回收。可预测的停顿是其最大的优势。3)重新标记-短暂,为了修正并发标记期间因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段稍长一些,但远比并发标记的时间短。由于整个过程中耗时最长的并发标记和并发清除过程收集器线程都可以与用户线程一起工作,所以,从总体上来说,CMS收集器的内存回收过程是与用户线程一起并发执行的。原创 2024-05-05 12:20:45 · 1010 阅读 · 1 评论 -
堆内存分配策略傻傻不清楚
6.空间分配担保:新生代中有大量的对象存活,Survivor空间不够,当出现大量对象在Minor GC后仍然存活的情况(最极端的情况就是内存回收后新生代中所有对象都存活),就需要老年代进行分配担保,把Survivor无法容纳的对象直接进入老年代。原创 2024-05-04 11:44:04 · 537 阅读 · 0 评论 -
垃圾回收算法你不知道的奥秘
空间整合:与CMS的"标记—清理"算法不同,G1从整体来看是基于"标记—整理"算法实现的收集器,从局部(两个Region之间)上来看是基于"复制"算法实现的,但无论如何,这两种算法都意味着G1运作期间不会产生内存空间碎片,收集后能提供规整的可用内存。使用G1收集器时,Java堆的内存布局就与其他收集器有很大差别,它将整个Java堆划分为多个大小相等的独立区域(Region),虽然还保留有新生代和老年代的概念,但新生代和老年代不再是物理隔离的了,它们都是一部分Region(不需要连续)的集合。原创 2024-05-03 12:33:06 · 959 阅读 · 0 评论 -
逃逸分析、栈上分配、标量替换大展神威
因为启用逃逸分析和标量替换默认是打开的,所以,JVM的参数只用-server时一样可以有栈上分配的效果。当然不是,这个可以通过配置文件来永久性的调整。1.虚拟机提供的一种优化技术,基本思想是,对于线程私有的对象,将它分配在栈上,而不分配在堆上。原创 2024-05-02 14:07:03 · 536 阅读 · 2 评论 -
虚拟机中new指令的秘密
类的加载、链接(验证类文件格式、准备类的静态变量、解析符号引用)和初始化(执行类的静态初始化代码和静态字段赋值)是在首次使用该类时(如:创建类的实例、访问类的静态字段或调用类的静态方法)由JVM的类加载器自动完成的。内存空间会被初始化为零值。原创 2024-05-01 11:43:48 · 407 阅读 · 3 评论 -
指针碰撞、空闲列表和内存分配的并发安全问题的底层秘密
如果Java堆中的内存并不是规整的,已使用的内存和空闲的内存相互交错,那就没有办法简单地进行指针碰撞了,虚拟机就必须维护一个列表,记录上哪些内存块是可用的,在分配的时候从列表中找到一块足够大的空间划分给对象实例,并更新列表上的记录,这种分配方式称为"空闲列表"。如果Java堆中内存是绝对规整的,所有用过的内存都放在一边,空闲的内存放在另一边,中间放着一个指针作为分界点的指示器,那分配内存就仅仅是把那个指针向空闲空间那边挪动一段与对象大小相等的距离,这种分配方式称为"指针碰撞"。四、内存分配的并发安全问题。原创 2024-04-30 11:47:11 · 339 阅读 · 2 评论 -
JVM内存参数调优大展神威
例如,若-XX:SurvivorRatio=8,则一个Survivor区域的大小将是Eden区域大小的1/8。例如,若 -XX:NewRatio=3,则新生代占整个堆的1/4,老年代占3/4。直接内存不是java虚拟机规范中定义的内存区域。原创 2024-04-29 13:44:05 · 720 阅读 · 1 评论 -
如何让Linux服务器下基于Netty的应用程序支持几十万乃至百万长连接
ulimit 命令分软限制和硬限制,加-H就是硬限制,加-S就是软限制。默认显示的是软限制,如果运行ulimit 命令修改时没有加上-H或-S,就是两个参数一起改变。硬限制就是实际的限制,而软限制是警告限制,它只会给出警告。原创 2024-04-23 16:40:28 · 613 阅读 · 2 评论