自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java对象内存布局

对象的组成Java对象分为三部分:对象头(Object Header), 实例数据(instance data),对齐填充(padding)。如图:1.对象头(Object Header)对象头分为两部分:Mark Word 与 Class Pointer(类型指针)。运行时元数据存储对象自身的运行时数据,如:哈希码 ( HashCode ) 、GC 分代年龄、锁状态标志、线程持有的锁、偏向线程 ID 、偏向时间戳等。这部分数据的长度在 32 位和 64 位的虚拟机中分别为 32 bit 和 6

2020-09-19 09:49:41 141

原创 垃圾回收相关算法简单总结

垃圾回收相关算法垃圾标记阶段(判断对象存活): 引用计数算法、可达性分析算法清除阶段(进行垃圾回收):标记-清除算法、复制算法、标记-压缩算法引用计数算法对每一个对象保存一个整型的引用计数器属性,用于记录对象被引用的情况。优点:实现简单,垃圾对象便于辨识;判定效率高,回收没有延迟性。缺点:增加了存储空间的开销。增加了时间开销。无法处理循环引用的情况。可达性分析算法(根搜索算法、追踪性垃圾收集)通过一系列的"GC roots"对象作为起点搜索。可以有效解决在引用计数算法中循环引用的问题,防止内

2020-09-12 09:40:06 112

原创 堆区和元空间的简单总结

堆区新生代(YoungGen)和老年代(OldGen)新生代又可以划分为Eden空间、Survivor0空间和Survivor1空间(有时也叫做from区,to区)。几乎所有的Java对象都是在Eden区被new出来的。绝大部分的Java对象的销毁都在新生代进行了。总结:1.幸存者s0,s1区的总结:复制之后发生交换,谁空谁是to区.2.关于垃圾回收:频繁在新生区收集,很少在养老区收集,几乎不在永久区、元空间收集。**Minor GC、Major GC、Full GC **新生代收集(Mi

2020-08-22 09:51:31 2918 1

原创 JVM之运行时数据区(Runtime Data Area)

JVM之运行时数据区(Runtime Data Area)这里主要以JDK8之后的JVM内存布局为介绍重点,首先看一张图从图中可以看出运行时数据区主要分为以下几部分:1.程序计数器:2.本地方法栈:3.虚拟机栈4.堆区5.元空间(永久代)这几部分中有线程共享的和单独线程私有的。即1.独立线程私有:包括程序计数器、虚拟机栈、本地方法栈2.线程间共享:堆区、堆外内存(永久代或者元空间、代码缓存)程序计数器一块很小的内存空间,几乎可以忽略生命周期以线程的生命周期保持一致。并非是物

2020-07-31 23:21:52 437

原创 JVM之类加载器

JVM之类加载器​ 首先理解下类的加载:JVM将指定的class文件读取到内存里,并运行该class文件里的Java程序的过程,就称之为类的加载(加载-连接-初始化)。类的卸载:将某个class文件的运行时数据从JVM中移除的过程,就称之为类的卸载。类的生命周期类的整个生命周期为:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段;其中验

2020-07-17 22:43:11 138

原创 JVM之类加载器

JVM之类加载器​ 首先理解下类的加载:JVM将指定的class文件读取到内存里,并运行该class文件里的Java程序的过程,就称之为类的加载。类的卸载:将某个class文件的运行时数据从JVM中移除的过程,就称之为类的卸载。类的生命周期类的整个生命周期为:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段;其中验证、准备和解析又统称为

2020-07-14 22:20:34 225

原创 HTTP请求过程

HTTP请求过程当我们在浏览器地址栏输入一个网站地址(比如www.bilibili.com)时,点击回车键后浏览器过段时间后会返回给我们一个页面,这其中的过程是什么样呢?(一个常见面试题)1. DNS 域名解析,找到对应的 IP 地址DNS域名解析的过程如下:(1).浏览器缓存解析:首先搜索浏览器本身的缓存,查看缓存中是否存在输入域名对应的IP地址,有且没有过期的话解析到此结束。(2).系统缓存解析:情况一不存在时,浏览器会搜索操作系统本身的DNS缓存,有且没有过期的话解析到此结束。(3).路由

2020-07-03 23:04:02 2103

原创 Volatile 关键字与可见性

Volatile 关键字在Java语言中,使用volatile关键字修饰的变量在多线程情况下会保证该变量对所有线程的可见性。所谓的可见性是指一个线程对某个使用volatile关键字修饰的变量修改的结果会立刻让其他线程也能知道。简单来说就是一个线程修改的结果,其他线程立刻就能知道。使用volatile关键字修饰的变量有两种特性:1.确保该变量对所有线程的可见性。2.禁止指令重排序优化。具体意思如下:第一个操作为读操作时,第二个任何操作不可以重排序到第一个前面。第二个操作为写操作时,第一个任何操作

2020-06-06 09:54:36 294

原创 多线程在内存运行的情况

多线程在内存运行的情况package demo1;public class MyThread extends Thread { /** * run方法就是线程要执行的任务方法 */ @Override public void run() { //这里的代码就是一条新的执行路径。 //这个执行路径的触发方式,不是调用run方法,而是通过Thread对象的start()方法来启动对象。 for (int i = 0; i < 10; i++) { System.out.

2020-05-30 09:36:40 300

原创 创建线程池对象所需要的参数,以及这些参数的作用

创建线程池对象所需要的参数,以及这些参数的作用JDK 中创建线程池对象提供ThreadPoolExecutor 类,其构造方法有四个,以构造方法参数列表中参数个数最多为例。代码如下:public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime,

2020-05-29 21:04:46 543

原创 多线程技术概述

多线程技术概述进程与线程进程:指一个内存中运行的程序,每一个进程都是独立的,有一个独立的内存空间线程:​ 进程中的一个执行路径,共享一个内存空间。线程之间可以自由切换,并发执行,一个进程最少有一个线程。​ 一个进程启动之后,里面的若干执行路径可划分为若干个线程。线程的调度分时调度​ 所有线程轮流使用CPU的使用权抢占式调度​ 优先让优先级高的线程使用CPU,Java使用的为抢占式调度同步与异步同步:排队执行,效率低但是安全。异步:同时执行,效率高但是数据不安全。并发与并行并发:

2020-05-29 21:03:32 81

原创 Comparable与Comparator的区别

Comparable与Comparator的区别两者都是接口,区别有哪些呢?1.位置Comparable位于 java.lang 下,Comparator位于 java.util 包下。2.方法个数Comparable接口内方法只有一个。package java.lang;import java.util.*;public interface Comparable<T> { public int compareTo(T o);}Comparator接口内方法挺多,

2020-05-23 10:30:41 96

原创 面向对象编程与面向过程编程

面向对象编程与面向过程编程面向:按着什么思路来编程1、 面向过程编程( Object Procedure Programming,简写OPP)就是将代码分解为若干个过程/函数。(C语言)面向过程关注的是如何做,也就是过程。一个大的函数,不断分解为小的函数。2、面向对象编程(Object Oriented Programming ,简写OOP)1.培养要面向接口编程的思想。2.类的成员​ 属性/成员变量: 其实就是变量​ 方法/行为:其实就是函数/过程3.多用聚合(组合)(hasA),少用

2020-05-17 10:17:18 369

空空如也

空空如也

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

TA关注的人

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