- 博客(16)
- 收藏
- 关注
原创 指针碰撞和空闲列表
对于Java开发来说,在虚拟机内存管理的帮助下,不需要为每个新的对象在代码层面分配内存,回收内存,比如像C语言那样操作。所以在正常情况下,内存泄露和内存溢出等问题也不太容易出现。所以要是运行中的程序出现了内存泄露问题,排查还是有一定困难。Java堆是被所有线程共享的一块内存区域,主要用于存放对象实例,为对象分配内存就是把一块大小确定的内存从堆内存中划分出来,通常有指针碰撞和空闲列表两种实现方式。1.指针碰撞法假设Java堆中内存时完整的,已分配的内存和空闲内存分别在不同的一侧,通过一个指针作为分界点,
2021-04-26 17:21:23 2311
原创 CPU制造
CPU制造一、简述计算机从上个世纪被发明后,由第一代的电子管计算机时代到现在的大规模集成电路,体积是越来越小,性能则是越来越强悍。我们都知道,计算机系统的硬件结构主要由几部分组成:控制器、运算器、存储器和输入、输出设备等,各个部件之间通过系统总线联系起来协同工作。控制器和运算器就是CPU的组成部分(还有寄存器组),控制器主要负责协调工作,运算器则负责计算机的算术运算和逻辑运算。CPU本身其实就是一块大规模的集成电路,我们现在主要介绍这一部分的内容。二、制造硅(Si),是一种非金属元素,它具有半导体
2021-04-24 20:36:26 132
原创 Class文件结构
Class文件结构1 概述作为Java程序员,为什么我们需要接触字节码文件?字节码文件的跨平台性Java语言:跨平台的语言(write once, run anywhere)当Java源代码成功编译成字节码后,如果想在不同平台运行,则无需再次编译这个优势不再那么吸引人了。Python、PHP、Perl、Ruby、Lisp等有强大的编译器跨平台似乎已经快成为一门语言必选的特性了Java虚拟机:跨语言的平台Java虚拟机不和包括Java在内的任何语言绑定,它只与“Class文件”这
2021-04-14 22:07:41 173
原创 HTTP
HTTP认识 HTTP首先你听的最多的应该就是 HTTP 是一种 超文本传输协议(Hypertext Transfer Protocol),这你一定能说出来,但是这样还不够,假如你是大厂面试官,这不可能是他想要的最终结果,我们在面试的时候往往把自己知道的尽可能多的说出来,才有和面试官谈价钱的资本。那么什么是超文本传输协议?超文本传输协议可以进行文字分割:超文本(Hypertext)、传输(Transfer)、协议(Protocol),它们之间的关系如下按照范围的大小 协议 > 传输 >
2021-04-12 18:20:49 1210 1
原创 垃圾回收相关算法
垃圾回收相关算法标记阶段:引用计数算法标记阶段的目的方法区和堆存在GC和OOM程序计数器既没有GC也没有OOM本地方法栈和虚拟机栈没有GC,但是存在StackOverFlow频繁的回收新生代,较少的回收老年代,基本不懂元空间垃圾标记阶段:主要是为了判断对象是否存活在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为己经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程我们可以称为垃
2021-04-10 18:30:18 140
原创 垃圾回收概述
垃圾回收概述什么是垃圾?概述Java 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C++语言没有垃圾收集技术,需要程序员手动的收集。垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。关于垃圾收集有三个经典问题:哪些内存需要回收?什么时候回收?如何回收?垃圾收集机制是Java的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展,Java的垃圾收集机制
2021-04-09 20:09:28 111
原创 StringTable(字符串常量池)
StringTable(字符串常量池)String的基本特性String:字符串,使用一对 “” 引起来表示String s1 = "chinese";// 字面量的定义方式String s2 = new String("hello");// new 对象的方式String被声明为final的,不可被继承String实现了Serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示String可以比较大小String在jdk8及以前内部定义了
2021-04-07 15:24:55 486 4
原创 Linux用户管理,网络管理命令
基本属性看懂文件属性Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。在Linux中我们可以使用ll或者ls –l命令来显示一个文件的属性以及文件所属的用户和组,如:实例中,boot文件的第一个属性用"d"表示。"d"在Linux中代表该文件是一个目录文件。在Linux中第一个字符代表这个文件是目录、文件或链接文件等等:当为[ d ]则是目录当为[ - ]则是
2021-04-04 20:17:59 220
原创 传输层
传输层端口号端口号(Port)标识了一个主机上进行通信的不同的应用程序;在TCP/IP协议中,用 “源IP”,“源端口号”,“目的IP”,“目的端口号”,“协议号”这样一个五元组来标识一个通信(可以通过netstat -n查看);端口号范围划分0 - 1023:知名端口号,HTTP,FTP,SSH等这些广为使用的应用层协议,他们的端口号都是固定的;1024 - 65535:操作系统动态分配的端口号,客户端程序的端口号,就是由操作系统从这个范围分配的。认识知名端口号(Well-Know P
2021-04-04 20:13:24 546
原创 执行引擎
执行引擎执行引擎概述执行引擎概述执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只
2021-04-04 19:53:07 139
原创 DNS域名解析
域名( Domain Name)- 顶级域名、二级域名由于IP地址不方便记忆,并且不能表达组织的名称和性质,人们设计出了 域名(比如baidu.com)但实际上,为了能够访问到具体的主机,最终还是得知道目标主机的IP地址域名申请注册:https://wanwang.aliyun.com/那干脆全程直接用域名,不用IP地址?IP地址固定4个字节,域名随随便便都至少10几个字节,这无疑会增加路由器的负担,浪费流量根据级别不同,域名可以分为:顶级域名(Top-level Domain,简称
2021-04-03 21:48:54 907
原创 对象的实例化内存布局与访问定位
对象的实例化内存布局与访问定位对象的实例化对象创建的方式new:最常见的方式、单例类中调用getInstance的静态类方法,XxxxBuilder/XxxFactory的静态方法Class的newInstance方法:反射的方式,在JDK9里面被标记为过时的方法,因为只能调用空参构造器,并且权限必须为 publicConstructor的newInstance(Xxxx):反射的方式,反射的方式,可以调用空参的,或者带参的构造器,权限没有要求使用clone():不调用任何的构造器,要求当前
2021-04-02 19:17:33 168
原创 方法区
方法区栈、堆、方法区的交互关系运行时数据区结构图从线程共享与否的角度来看ThreadLocal:如何保证多个线程在并发环境下的安全性?典型场景就是数据库连接管理,以及线程会话管理。栈、堆、方法区的交互关系下面涉及了对象的访问定位Person 类的 .class 信息存放在方法区中person 变量存放在 Java 栈的局部变量表中真正的 person 对象存放在 Java 堆中在 person 对象中,有个指针指向方法区中的 person 类型数据,表明这个 person 对象是用
2021-04-01 17:59:45 192
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人