<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[flystarfly的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/flystarfly</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; flystarfly]]></copyright><item><title><![CDATA[对象的内存布局]]></title><link>https://blog.youkuaiyun.com/flystarfly/article/details/137152295</link><guid>https://blog.youkuaiyun.com/flystarfly/article/details/137152295</guid><author>flystarfly</author><pubDate>Fri, 29 Mar 2024 17:39:24 +0800</pubDate><description><![CDATA[说明：占位符起占位作用，因为对象的大小必须是8字节的整数倍，而因HotSpot VM的要求对象起始地址必须是8字节的整数倍，且对象头部分正好是8字节的倍数。因此，当对象实例数据部分没有对齐时（即对象的大小不是8字节的整数倍），就需要通过对齐填充来补全。存储对象自身的运行时数据，如：哈希码、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳。存储对象类型指针，即对象指向类元数据的指针，JVM可以确定这个对象属于哪个类的实例。如果是数组，对象头中还有一块记录数组长度的数据。]]></description><category></category></item><item><title><![CDATA[JVM 里 new 对象时的线程安全问题]]></title><link>https://blog.youkuaiyun.com/flystarfly/article/details/136871338</link><guid>https://blog.youkuaiyun.com/flystarfly/article/details/136871338</guid><author>flystarfly</author><pubDate>Wed, 20 Mar 2024 11:29:00 +0800</pubDate><description><![CDATA[虚拟机1.8默认使用的是 TLAB 方式来进行内存分配的，如果想要使用CAS方式，可以通过设置 -XX：-UseTLAB 参数来关闭TLAB功能即可。默认情况下，TLAB 空间的内存非常小，仅占有整个 Eden 空间的 1%，我们可以通过 -XX:TLABWasteTargetPercent 设置 TLAB 空间所占用 Eden 空间的百分比大小。对象创建在虚拟机中是非常频繁的操作，即使仅仅修改一个指针所指向的位置，在并发情况下也会引起线程不安全。]]></description><category></category></item><item><title><![CDATA[对象内存分配方式]]></title><link>https://blog.youkuaiyun.com/flystarfly/article/details/136863138</link><guid>https://blog.youkuaiyun.com/flystarfly/article/details/136863138</guid><author>flystarfly</author><pubDate>Wed, 20 Mar 2024 08:58:30 +0800</pubDate><description><![CDATA[虚拟机为新对象分配内存，从堆中划出一块确定大小的内存，因为对象所需内存的大小在类加载完后可以完全确定。Java堆是否规整 由所采用的垃圾收集器是否带有压缩整理功能决定。堆内存是否规整是由垃圾收集器是否带有压缩整理功能决定的。]]></description><category></category></item><item><title><![CDATA[JVM中对象创建过程]]></title><link>https://blog.youkuaiyun.com/flystarfly/article/details/136808616</link><guid>https://blog.youkuaiyun.com/flystarfly/article/details/136808616</guid><author>flystarfly</author><pubDate>Mon, 18 Mar 2024 14:35:48 +0800</pubDate><description><![CDATA[从虚拟机的角度来看，一个新的对象已经创建完毕。但从Java程序的角度来看，对象创建才刚开始，所有的字段还是零值，所以需要程序员进行初始化操作，这样一个真正可用的对象才算完全产生出来。为对象进行必要的设置：虚拟机为对象进行设置，如设置对象属于哪个类的实例、如何找到类的元数据信息、对象的哈希码、对象的GC分代年龄等信息，这些信息存放在对象头中。类加载检查：如果类没有被类加载器加载，则执行类加载流程（将class信息加载到JVM的运行时数据区的过程），对象所需内存大小在类加载完后可以完全确定。]]></description><category></category></item><item><title><![CDATA[JVM的内存区域]]></title><link>https://blog.youkuaiyun.com/flystarfly/article/details/136564198</link><guid>https://blog.youkuaiyun.com/flystarfly/article/details/136564198</guid><author>flystarfly</author><pubDate>Fri, 08 Mar 2024 15:47:10 +0800</pubDate><description><![CDATA[从回收内存的角度看，由于现代垃圾收集器大部分都是基于分代收集理论设计的，所以Java堆中经常会出现新生代、老年代、Eden空间、From Survivor空间、To Survivor空间等名词，需要注意的是这种划分只是根据垃圾回收机制来进行的划分，不是Java虚拟机规范本身制定的。对于Java应用程序来说，Java堆（Java Heap）是虚拟机所管理的内存中最大的一块。JVM内存分为线程私有区和线程共享区，其中方法区和堆是线程共享区，虚拟机栈、本地方法栈和程序计数器是线程隔离的数据区。]]></description><category></category></item><item><title><![CDATA[JVM类加载机制]]></title><link>https://blog.youkuaiyun.com/flystarfly/article/details/136501337</link><guid>https://blog.youkuaiyun.com/flystarfly/article/details/136501337</guid><author>flystarfly</author><pubDate>Wed, 06 Mar 2024 11:38:48 +0800</pubDate><description><![CDATA[在JDK8中的这个Extension ClassLoader，主要用于加载jre环境下的lib下的ext下的jar包。当想要扩展Java的功能的时候，把jar包放到这个ext文件夹下。然而这样的做法并不安全，不提倡使用。JDK8以后，使用平台类加载器（Platform ClassLoader）替换了原来的扩展类加载器（Extension ClassLoader）。上面的类加载过程主要是通过类加载器来实现的，Java里有如下几种类加载器。总之，扩展能力被取代了又不安全，所以被废弃。的天然的扩展能力所取代。]]></description><category></category></item><item><title><![CDATA[类的生命周期]]></title><link>https://blog.youkuaiyun.com/flystarfly/article/details/136478142</link><guid>https://blog.youkuaiyun.com/flystarfly/article/details/136478142</guid><author>flystarfly</author><pubDate>Tue, 05 Mar 2024 14:34:42 +0800</pubDate><description><![CDATA[和。其中的连接又分为和三个步骤。如下图所示。]]></description><category></category></item><item><title><![CDATA[程序员最重要的解决问题方式——假说]]></title><link>https://blog.youkuaiyun.com/flystarfly/article/details/136036142</link><guid>https://blog.youkuaiyun.com/flystarfly/article/details/136036142</guid><author>flystarfly</author><pubDate>Mon, 05 Feb 2024 09:33:20 +0800</pubDate><description><![CDATA[程序员遇到问题，除了不停地修改代码，还可以先用假说的方式思考一下]]></description><category></category></item><item><title><![CDATA[windows 下新装docker desktop必优化点]]></title><link>https://blog.youkuaiyun.com/flystarfly/article/details/134972437</link><guid>https://blog.youkuaiyun.com/flystarfly/article/details/134972437</guid><author>flystarfly</author><pubDate>Wed, 13 Dec 2023 15:27:13 +0800</pubDate><description><![CDATA[windows系统刚装的docker，虽然已经可以用了，但是总会几个不舒服的地方，下面是总结。]]></description><category></category></item><item><title><![CDATA[navicat连接kingbase数据库]]></title><link>https://blog.youkuaiyun.com/flystarfly/article/details/134435287</link><guid>https://blog.youkuaiyun.com/flystarfly/article/details/134435287</guid><author>flystarfly</author><pubDate>Thu, 16 Nov 2023 10:03:31 +0800</pubDate><description><![CDATA[navicat其实是可以直接链接kingbase数据库的，网上没找到什么教程,其实kingbase是PostgreSql基础上的二开，直接用新建连接——选择PostgreSql就行了。其他方式和PostgreSql一样，填入IP，默认数据库 用户名密码。]]></description><category></category></item><item><title><![CDATA[sprignboot新依赖nacos，报错一直连接本地的localhost:8848解决]]></title><link>https://blog.youkuaiyun.com/flystarfly/article/details/134427504</link><guid>https://blog.youkuaiyun.com/flystarfly/article/details/134427504</guid><author>flystarfly</author><pubDate>Wed, 15 Nov 2023 19:36:11 +0800</pubDate><description><![CDATA[本人项目刚从eureka换到nacos，然后不停的报错“currentServerAddr:http://localhost:8848, err : Connection refused”。但是明明在application.yml文件里面配置了。后来看网上说的要加bootstrap.properties，但是我把配置文件写里面也没用。最后没办法了 尝试着把config也加入bootstrap.properties。居然可以了，注册成功。]]></description><category></category></item><item><title><![CDATA[JAVA面试必看，基础知识之类加载器和加载机制]]></title><link>https://blog.youkuaiyun.com/flystarfly/article/details/123554431</link><guid>https://blog.youkuaiyun.com/flystarfly/article/details/123554431</guid><author>flystarfly</author><pubDate>Thu, 17 Mar 2022 19:14:35 +0800</pubDate><description><![CDATA[首先要厘清一个问题，为什么JAVA需要类加载。不明白这个问题，直接说加载机制就是空中楼阁。

JAVA程序员用编程工具编写的代码生成的都是拓展名为.java的文件，显然这个文件是不能直接被计算机识别并运行里面程序的，需要经过Java编译器编译成拓展名为".class"的文件，".class"文件中保存着Java代码经转换后的虚拟机指令。

当需要使用某个类时，JAVA虚拟机将会加载它的".class"文件，并创建对应的class对象，将class文件加载到虚拟机的内存，这个过程称为类加载。

加载需要加载器]]></description><category></category></item><item><title><![CDATA[nginx访问其它FASTDFS服务器上的文件]]></title><link>https://blog.youkuaiyun.com/flystarfly/article/details/122944604</link><guid>https://blog.youkuaiyun.com/flystarfly/article/details/122944604</guid><author>flystarfly</author><pubDate>Tue, 15 Feb 2022 14:53:52 +0800</pubDate><description><![CDATA[当你的FASTDFS文件服务和NGINX前端服务器不是同一台的时候，如果要把FASTDFS文件搞能够对外提供访问的外链地址，只能通过跳转的方式，需要如下设置：

前端服务器的NGINX配置

# fastdfs 图片和pdf文件转发

server {

listen 33333;

location ~ .*\.(gif|jpg|jpeg|png|pdf)$ {

rewrite /(.*)$ /$1 break;

autoindex on;

proxy_pass http://ip; //文件服务器]]></description><category></category></item><item><title><![CDATA[关于元宇宙几问]]></title><link>https://blog.youkuaiyun.com/flystarfly/article/details/122405546</link><guid>https://blog.youkuaiyun.com/flystarfly/article/details/122405546</guid><author>flystarfly</author><pubDate>Mon, 10 Jan 2022 14:21:36 +0800</pubDate><description><![CDATA[刚结束不久的2021年，突然冒出了元宇宙这个新词。有人说这代表着未来，有人说这是圈钱的忽悠人的。鄙人看了一些元宇宙的文章，里面的各种可能让人心潮澎湃。但是仔细思索了一下，心中还是有一些不解的问题。

一、元宇宙的运营方问题。如果未来技术真的达到了这个程度，那么谁来运营这个元宇宙，也就是说谁来创世。

如果只是一家公司来做，那么怎么保障它的第三方公正性和独立性，以及整个元宇宙的稳定性。要知道元宇宙是目前是被定义成并行于现实世界的另外一个社会了，那么稳定性肯定不容置疑，上帝也不能随便想做什么就做什么，不然里面的]]></description><category></category></item><item><title><![CDATA[程序员成长的点线面]]></title><link>https://blog.youkuaiyun.com/flystarfly/article/details/113785982</link><guid>https://blog.youkuaiyun.com/flystarfly/article/details/113785982</guid><author>flystarfly</author><pubDate>Thu, 06 Jan 2022 09:54:10 +0800</pubDate><description><![CDATA[作为一名已经很老的程序员中的菜鸟，是的，过了这么多年还是菜鸟。比起大厂的程序员来说技术上毫无优势，甚至都没做过大并发量的项目，一直在各种技术要求不高的公司里面混，是不是很失败？

然而毕竟也做了这么些年了，经历过了许多公司，被面试和面试过了许多人，也接触了不同性格的各种程序员，可以说对这个行业有一定的了解。

程序员，作为一个入门容易，进步更容易，但是要学的东西特别多，天花板特别高的行业，可以说并不是一个适合大多数人的理想职业，并不是培训机构学了几个月就能精通，就能直接拿到高薪。

从入门开始作为初级程序员]]></description><category></category></item><item><title><![CDATA[Mybatis报错 Result Maps collection already contains value for 原因汇总]]></title><link>https://blog.youkuaiyun.com/flystarfly/article/details/106195858</link><guid>https://blog.youkuaiyun.com/flystarfly/article/details/106195858</guid><author>flystarfly</author><pubDate>Mon, 18 May 2020 16:39:47 +0800</pubDate><description><![CDATA[当Mybatis报错 Result Maps collection already contains value for的时候，有哪些原因呢？

一、Mybatis-Generator根据配置文件生成XML的锅

Mybatis-Generator生成xml等又快有方便，但是如果同名xml之前已经存在，那么生成的时候会在xml里面在之前的代码后面继续追加，而不会覆盖同名的语句。因此有可能报这个错误

解决方案

如果是再次生成代码，必须先将已经生成的代码删除，仔细检查一下xml文件看是否存在两个id为Bas]]></description><category></category></item><item><title><![CDATA[JAVA日期格式的各种坑]]></title><link>https://blog.youkuaiyun.com/flystarfly/article/details/105675227</link><guid>https://blog.youkuaiyun.com/flystarfly/article/details/105675227</guid><author>flystarfly</author><pubDate>Wed, 22 Apr 2020 13:33:52 +0800</pubDate><description><![CDATA[java的日期格式是我们在开发中Very常用，几乎到了离不开的程度。但是Javad的日期格式也为我们留下了各种坑。

坑一：YYYY和yyyy

我们开发人员平时写年月日的时候 总不清楚YYYY和yyyy的区别，经常混用。：

有这个问题，比如2019年12月31日



打印结果是：



2019-12-31的YYYY-MM-dd格式化Date后居然是2018年的12月30日？

这个暂且不论...]]></description><category></category></item><item><title><![CDATA[spring boot2.0部署docker简单教程linux部署]]></title><link>https://blog.youkuaiyun.com/flystarfly/article/details/83509500</link><guid>https://blog.youkuaiyun.com/flystarfly/article/details/83509500</guid><author>flystarfly</author><pubDate>Mon, 29 Oct 2018 17:42:49 +0800</pubDate><description><![CDATA[docker容器化逐渐流行，加上已经流行的spring boot2.0。那么两者如何结合一起呢？

首先为了偷懒，直接从https://start.spring.io/上面拉去一个spring boot2.0项目



 可以看到， 官网的spring boot 版本 已经到了2.0.6.生成后，download下来导入我们的ide中。

然后，我们写一个简单的requestMapping



...]]></description><category></category></item><item><title><![CDATA[JAVA线程池小结]]></title><link>https://blog.youkuaiyun.com/flystarfly/article/details/82801667</link><guid>https://blog.youkuaiyun.com/flystarfly/article/details/82801667</guid><author>flystarfly</author><pubDate>Fri, 21 Sep 2018 15:21:29 +0800</pubDate><description><![CDATA[本文的开始，我们提出三个最基础的问题：什么是线程，线程与进程的区别，以及如何在JAVA中实现。并做了简要的回答。

一、什么是线程？

线程是操作系统能够进行运算调度的最小单位，它被包含在进程之中，是进程中的实际运作单位。程序员可以通过它进行多处理器编程，你可以使用多线程对运算密集型任务提速。比如，如果一个线程完成一个任务要100毫秒，那么用十个线程完成改任务只需10毫秒。Java在语言层面对多线...]]></description><category></category></item><item><title><![CDATA[JAVA以及常用开源框架读音发音和介绍]]></title><link>https://blog.youkuaiyun.com/flystarfly/article/details/82788293</link><guid>https://blog.youkuaiyun.com/flystarfly/article/details/82788293</guid><author>flystarfly</author><pubDate>Thu, 20 Sep 2018 15:34:48 +0800</pubDate><description><![CDATA[JAVA['dʒɑ:və]:任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形，最初被命名为Oak，目标设置在家用电器等小型系统的程序语言，应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高，Sun公司放弃了该项计划。随着1990年代互联网的发展，Sun公司看见Oak在互联网上应用的前景，于是改造了Oak，于1995年5月以J...]]></description><category></category></item></channel></rss>