自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 面试题:new String(“ab“) 和 new String(“a“) + new String(“b“) 分别会创建几个对象?

相信大部分同学对于String可以说是既熟悉又陌生, 熟悉的是我们每天的代码都离不开String, 陌生的是每当同学们看到String相关的面试题第一眼会认为很简单 , 但是往往对答案的时候却是大失所望 ,接下来让我们熟悉下String。这里面通过字节码能够很清楚的看到就是两个对象。字节码显示创建了6个对象。我们转换成字节码来查看。

2022-09-02 17:08:00 1689 1

原创 JMM是什么?

JVM规范中试图定义一种Java内存模型〈java Memory Model,简称JMM)来屏蔽掉各种硬件和操作系统的内存访问速度差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。JMM(Java内存模型Java Memory Model,简称JMM)本身是一种抽象的概念并不真实存在它仅仅描述的是一组约定或规范,通过这组规范定义了程序中(尤其是多线程)各个变量的读写访问方式并决定一个线程对共享变量的写入何时以及如何变成对另一个线程可见,关键技术点都是围绕多线程的原子性、可见性和有序性。...

2022-09-01 11:25:41 2184

原创 数据库之三大范式

第一范式主要是确保数据表中每个字段的值必须具有原子性,也就是说数据表中每个字段的值不可再次拆分的最小数据单元; 第二范式要求,在满足第一范式的基础上,还要"满足数据表中的每一条数据记录,都是可唯一标识的(主键),而且所有非主键字段,都必须完全依赖主键,不能只依赖主键的一部分",如果知道主键的所有属性的值,就可以检索到任何元组(行)的任何属性的值,(要求中的主键,其实可以拓展为候选键).第三范式是在第二范式的基础上,确保数据表中的每一个非主键字段都和主键字段直接相关,也就是说,要求数据表中的所有非主键

2022-08-30 15:40:09 1914

原创 为什么永久代要被元空间替代?

有些人认为方法区(如 HotSpot 虚拟机中的元空间或者永久代)是没有垃圾收集行为的,其实不然。《Java 虚拟机规范》对方法区的约束是非常宽松的,提到过可以不要求虚拟机在方法区中实现垃圾收集。一般来说这个区域的回收效果比较难令人满意,尤其是类型的卸载,条件相当苛刻。以前 sun 公司的 Bug 列表中,曾出现过的若干个严重的 Bug 就是由于低版本的 HotSpot 虚拟机对此区域未完全回收而导致内存泄漏。由于类的元数据分配在本地内存中,元空间的最大可分配空间就是系统可用内存空。...

2022-08-30 15:24:59 233

原创 面试官: jdk7之前与jdk8后的方法区有何变化?

首先明确:只有 Hotspot 才有永久代。 BEA JRockit、 IBMJ9 等来说,是不存在永久代的概念的。原则上如何实现方法区属于虚拟机实现细节,不受《Java 虚拟机规范》管束,并不要求统一Hotspot 中方法区的变化:JRockit 是和 HotSpot 融合后的结果,因为 JRockit 没有永久代,所以他们不需要配置永久代随着 Java8 的到来, HotSpot VM 中再也见不到永久代了。但是这并不意味着类的元数据信息也消失了。这些数据被移到了一个与堆不相连的本地内存区域,这个区域

2022-08-26 21:35:56 510

原创 堆是分配对象的唯一选择么?

在《深入理解 Java 虚拟机》中关于 Java 堆内存有这样一段描述:随着 JIT 编译期的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术将会导致一些微妙的变化,所有的对象都分配到堆上也渐渐变得不那么“绝对”了。在 Java 虚拟机中,对象是在 Java 堆中分配内存的,这是一个普遍的常识。但是,有一种特殊情况,那就是如果经过逃逸分析( Escape Analysis)后发现,一个对象并没有逃逸出方法的话,那么就可能被优化成栈上分配。这样就无需在堆上分配内。

2022-08-24 10:35:32 259

原创 VisualVM安装VisualGC插件

在我们安装的JDK中,提供了一个很棒的JVM调优工具,也就是 Java VisualVM,通过它我们能够看到很多关于我们Java程序的信息,比如查看 Eden,Survivor From, Survivor To区的空间使用情况,以及排查程序中那些对象造成OOM。

2022-08-23 17:10:30 611

原创 #浅谈ArrayList及扩容机制

通过将上面的方法进行梳理,我们能够总结出以下的几点当我们add进第一个元素到ArrayList的时候,elementData.length为0(因为还是一个空的list,有种懒加载的感觉??),但是此时执行了ensureCapacityInternal() 方法,通过默认的比较,此时会得到minCapacity为10,此时minCapacity - elementData.length > 0满足,所以会进入grow(minCapacity)方法。

2022-08-23 09:39:53 84

原创 MySQL主从复制原理深度解析

在实际工作中,我们常常将Redis作为缓存与MySQL配合来使用,当有请求的时候,首先会从缓存中进行查找,如果存在就直接取出。如果不存在再访问数据库,这样就提升了读取的效率,也减少了对后端数据库的访问压力。Redis的缓存架构是高并发架构中非常重要的一环。此外,一般应用对数据库而言都是“ 读多写少 ”,也就说对数据库读取数据的压力比较大,有一个思路就是采用数据库集群的方案,做 主从架构 、进行 读写分离 ,这样同样可以提升数据库的并发处理能力。

2022-08-22 18:24:02 1677

原创 JVM内存模型详解

Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁。另外一些则是与线程一一对应的,这些与线程对应的数据区域会随着线程开始和结束而创建和销毁。即:- 每个线程:独立包括程序计数器、栈、本地栈。- 线程间共享:堆、堆外内存(永久代或元空间、代码缓存)

2022-08-22 09:40:17 384

原创 Java面试题全集

2022最新Java面试题合集,包括 Java 集合、JVM、多线程、并发编程、设计模式、SpringBoot、SpringCloud、Java、MyBatis、ZooKeeper、Dubbo、、MongoDB、Redis、MySQL、RabbitMQ、

2022-08-21 18:52:15 767 1

原创 类加载子系统

在Java的日常应用程序开发中,类的加载几乎是由上述3种类加载器相互配合执行的,在必要时,我们还可以自定义类加载器,来定制类的加载方式。为什么要自定义类加载器?隔离加载类修改类加载的方式扩展加载源防止源码泄漏开发人员可以通过继承抽象类ava.1ang.ClassLoader类的方式,实现自己的类加载器,以满足一些特殊的需求。

2022-08-21 12:02:53 75

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除