
Java基础
住手丶让我来
我是革命一块砖,哪里需要哪里搬!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Volatile原理解析
一、实现原理 对于volatile的解释,我相信更直白的说就是对于一个被volatile关键字修饰的变量,在并发情况下Java内存模型(JMM)保证每个线程对该变量的可见性,保证他们读取的数据是一致的,因此volatile实现了数据的可见性,有序性,但不保证原子性(下文会详细解释)。但是怎样保证可见性的呢?在jvm底层对于volatile修饰的共享变量进行写操作的时候主要实现了两个步骤:将当前处理器缓存行的数据写回到系统内存;将其他处理器中缓存了该数据的原创 2020-08-20 16:17:13 · 5023 阅读 · 2 评论 -
Synchronized原理解析
一、为什么出现synchronized 对于程序员而言,不管是在平常的工作中还是面试中,都会经常用到或者被问到synchronized。在多线程并发编程中,synchronized早已是元老级的角色了,很多人都称其为重量级锁,但是随着Java SE 1.6对其进行各种优化之后,便显得不再是那么的重了,原因下面就讲。正是因为多线程并发的出现,便产生了线程安全这样的问题,对于线程安全的主要原因如下:存在共享数据(也称临界资源);存在多条线程共同操作这些共享原创 2020-08-20 11:12:38 · 652 阅读 · 0 评论 -
Objects
一、前言 Objects是自jdk1.7起新增的工具类,这个类由一些实用的静态方法组成,这些方法可以方便我们平时的开发,例如对象比较、获取对象的hash码等。二、源码解析继承了哪些类由上图可知Objects没有继承的父类(除了Object以外)或者实现的接口。构造方法/** * 通过私有化构造器强化不可实例化的能力。 */private Objects() { throw new AssertionError("No java.uti原创 2020-07-31 16:38:39 · 350 阅读 · 0 评论 -
Integer源码解析
一、前言 Integer类是我们经常用到的一个基础类,学习其底层结构有助于我们在项目中更加得心应手的使用他,并且能够有效避免Integer所遇到的坑。这篇博客主要是介绍Integer经常使用的几个方法其源码是怎么做的,而且针对Integer的一些变量进行解释,这会有助于我们读懂Integer的源码。二、源码解析继承了哪些类 由上图可知Integer继承了Number抽象类和实现了Comparable接口。原创 2020-07-29 16:32:39 · 629 阅读 · 0 评论 -
Object类中的registerNatives本地方法的作用
一、简介 在阅读JDK源码的时候,细心的你可能会发现,不光是Object类,甚至System类、Class类、ClassLoader类、Unsafe类等等,都能在类代码中找到如下代码:private static native void registerNatives();static { registerNatives();}二、提出问题什么是本地方法? Java有两种方法:Java方法和本原创 2020-07-28 16:43:41 · 1056 阅读 · 0 评论 -
Java中的boolean类型到底占用多少个字节?
一、什么是boolean类型? 布尔类型:布尔数据类型只有两个可能的值:真和假。使用此数据类型为跟踪真/假条件的简单标记。这种数据类型就表示这一点信息,但是它的“大小”并不是精确定义的。也就是说,Java规范中,没有明确指出boolean的大小。二、如果要分大小,那么到底占几个字节呢? 通过搜查各类资料(借鉴了一些大神的内容),发现有以下3种说法。1个bit(1/8个字节)  原创 2020-07-24 14:11:54 · 951 阅读 · 0 评论 -
JDK动态代理实现原理
一、动态代理机制通过实现 InvocationHandler 接口创建自己的调用处理器;通过为 Proxy 类指定 ClassLoader 对象和一组 interface 来创建动态代理类;通过反射机制获得动态代理类的构造函数,其唯一参数类型是调用处理器接口类型;通过构造函数创建动态代理类实例,构造时调用处理器对象作为参数被传入。二、代码示例1.HelloService 接口。public interface HelloService { void sayHello();}2原创 2020-07-22 15:20:54 · 196 阅读 · 0 评论 -
Java反射机制的原理
一、什么是反射? Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。二、反射的特性运行时生成对象实例;运行时调用方法;运行时更改属性。三、反射机制获取类的方法1.对象调用 getClass() 方法来获取。Person p1 = new Person();Class c1 = p1.g原创 2020-07-22 14:14:18 · 351 阅读 · 0 评论 -
为什么使用构造注入而不是@Autowired
一、前言 使用Spring开发时,我们通常有两种依赖注入的方式,基于注解@Autowired的依赖注入和基于构造函数的依赖注入。用IDEA开发过程中,如果使用@Autowired注入,通常会有如下警告:Inspection info: Spring Team recommends: "Always use constructor based dependency injection in your beans. Always use assertions原创 2020-07-01 18:02:16 · 3068 阅读 · 2 评论 -
利用Memory Analyzer来对OOM进行分析
一、什么是OOM? OOM就是outOfMemory,内存溢出!可能是每一个java人员都能遇到的问题!原因是堆中有太多的存活对象(GC-ROOT可达),占满了堆空间。二、怎么解决?利用MemoryAnalyzer进行Heap分析:去eclipse官网上去下载MemoryAnalyzer,可以下载非插件版的,这样MemoryAnalyzer运行...原创 2020-04-07 10:16:17 · 1042 阅读 · 0 评论 -
如何利用 Jconsole 检测出死锁
一、前言 Java中当我们的开发涉及到多线程的时候,这个时候就很容易遇到死锁问题,刚开始遇到死锁问题的时候,我们很容易觉得莫名其妙,而且定位问题也很困难。 因为涉及到java多线程的时候,有的问题会特别复杂,而且就算我们知道问题出现是因为死锁了,我们也很难弄清楚为什么发生死锁,那么当我们遇到了死锁问题,...原创 2020-04-07 09:08:33 · 1084 阅读 · 0 评论 -
JVM中7种垃圾收集器分析和理解
一、前言 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、版本的虚拟机所提供的垃圾收集器都可能会有很大差别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器。接下来讨论的收集器基于JDK1.7 Update 14 之后的H...原创 2020-04-06 10:55:09 · 172 阅读 · 0 评论 -
Java中常见OOM的场景及解决方法
一、OOM for Heap (java.lang.OutOfMemoryError: Java heap space) 分析 此OOM是由于JVM中heap的最大值大于程序运行期间最大可用内存大小,如果程序运行需要占用更多的内存,超出了这个设置值,就会抛出OutOfMemory异常。解决思路将设置heap的最大值调高即可,即-Xmx的值调大。...原创 2020-03-26 20:05:48 · 2643 阅读 · 0 评论 -
String源码解析
一、前言 众所周知字符串String是不可变的,当你改变其字符串内容的时候,他的底层是重新创建一个新的字符串,并且让栈中的对象引用指向新的字符串的地址的,那到底这是怎么实现的呢?接下来我们一起去看看String字符串的底层源码是如何实现的。二、String内部的变量有哪些? 在看String内部变量之...原创 2020-03-22 16:34:26 · 302 阅读 · 0 评论 -
关于Java的常见误解
一、前言最近开始阅读一本叫《Java核心技术卷I》的书,想更加深入的去了解Java这门语言,我在看到第一章的结尾的地方看到了作者写了一些可能不是很了解Java的人关于Java的一些常见的误解,我觉得他写的很好,就想分享出来。二、Java的常见误解Java是HTML的扩展答:Java是一种程序设计语言,HTML是一种描述网页结构的方式。除了用于在网页上放置Javaapplet...原创 2019-06-04 20:48:34 · 276 阅读 · 0 评论 -
面向对象和面向过程的区别
什么是面向对象? 面向对象就是在一个事务(问题)中,将一个事务(问题)的某些共同特性封装在一个对象中,创建对象不是为了完成某个步骤,而是完成整个事务中某种行为。什么是面向过程? 面向过程就是在一个事务(问题)中,将事务划分为一个个步骤,通过函数实现这些步骤,然后依次调用执行即可。举个简单点的例子来区...原创 2019-10-24 09:33:01 · 3062 阅读 · 1 评论