笔记
文章平均质量分 72
晚 睡 。
努力做自己喜欢的事!
展开
-
JVM内存模型、常用参数及调优。
JVM内存结构主要分为:方法区、堆、虚拟机栈、本地方法栈、程序计数器,其中方法区和堆是线程共享的,其他的都是线程隔离的。方法区:主要存放类的信息、静态变量、常量、编译后的方法代码,永久代PermGen是方法区的实现,JDK1.8后永久代被移除换成了元空间Metaspace,元空间的本质和永久代类似,都是对方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。元空间大小,理论上取决于32位/64位系统可虚拟的内存大小。堆:唯一用途就是用来存放.转载 2022-01-14 23:27:51 · 233 阅读 · 0 评论 -
并发的原子性、可见性、有序性。
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下与内存模型相关的概念和知识,然后分析了volatile关键字的实现原理,最后给出了几个使用vola原创 2022-01-11 23:41:16 · 152 阅读 · 0 评论 -
Java内存屏障
JVM运行时刻内存分配在 java 垃圾回收整理一文中,描述了jvm运行时刻内存的分配。其中有一个内存区域是jvm虚拟机栈,每一个线程运行时都有一个线程栈,线程栈保存了线程运行时候变量值信息。当线程访问某一个对象时候值的时候,首先通过对象的引用找到对应在堆内存的变量的值,然后把堆内存变量的具体值load到线程本地内存中,建立一个变量副本,之后线程就不再和对象在堆内存变量值有任何关系,而是直接修改副本变量的值,在修改完之后的某一个时(线程退出之前),自动把线程变量副本的值回写到对象在堆中变量。这样在堆中的原创 2022-01-11 23:08:15 · 407 阅读 · 0 评论 -
Class文件的解析
class文件的数据结构:Class文件是一组以8个字节为基础单位的二进制字节流。各项数据会严格的按照顺序紧凑的排列在class文件中,中间没有分隔符,使得class文件存储的内容几乎全部都是程序运行的。无符号数:属于基本数据类型 主要用于描述数字 索引符号 数量值 或者按照UTF-8编码构成的字符串值数据类型 U1 U2 U4 U8 也只是逻辑上的区分。表: 由多个无符号数或者其他表作为数据项构成的复合数据类型。所有的表都习惯以_info结尾 表主要用于描述有层次关系的复合结构数据。原创 2022-01-09 00:29:14 · 645 阅读 · 0 评论 -
Spring笔记Day2
1.注解的使用1.1 Configuration注解该类等价 与XML中配置beans,相当于Ioc容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean,与xml中配置的bean意思一样。@Configuration注解的类必需使用<context:component-scanbase-package="XXX"/>扫描定义一个MainConfig,用@Configuration注解,那MainConfig相当于xml里的beans,里面用@Bean原创 2021-09-14 20:13:04 · 74 阅读 · 0 评论 -
Spring笔记Day1
1.Spring是什么?它的特点和优势分别是?1.1 Spring是什么?1.2 Spring的优点。2.耦合是什么意思?3.Spring核心是什么?4.IOC是什么含义?提到控制就要理解控制的含义,控制就是对象的创建、初始化、销毁。创建对象,原来是 new 一个,现在给 Spring 容器创建了;对象初始化,比如 A 依赖 B,原来是我们通过构造器或者 setter 方法赋值,现在给 Spring 容器自动注入了;销毁对象,原来是我们直接赋值 null 或者做一些...原创 2021-09-14 17:54:36 · 85 阅读 · 0 评论 -
线程池原理
简介:多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。如果:T1 + T3 远大于 T2,则可以采用线程池,以提高服务器性能。 一个线程池包括以下四个基本组成部分: 1、线程池管理器(ThreadPool):用于创建并管理线程池,包括 创建线程池,销毁线程池,添加新...原创 2021-08-17 18:01:21 · 123 阅读 · 0 评论 -
JAVA中强引用和弱引用的区别
前景概述:在java中,每一个变量都像是我们生活中手边的生活用品,有的使用频繁,有的使用不频繁,在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及状态,程序才能使用它。这 就像在日常生活中,从商店购买了某样物品后,如果有用,就一直保留它,否则就把它扔到垃圾箱,由清洁工人收走。然后在实际应用过程中,可能并不像完美情况这么顺利,就像生活中总有一些特定场合又有一些必不可少用处的物品一样,丢掉又舍不得,留着又太浪费空间,所以就要有一种折中的方原创 2021-08-16 21:41:59 · 2505 阅读 · 0 评论 -
值传递和引用传递、深拷贝和浅拷贝!
首先给大家解释一下这几个名词的概念:值传递:在方法的调用过程中,实参把它的实际值传递给形参,此传递过程就是将实参的值复制一份传递到函数中,这样如果在函数中对该值(形参的值)进行了操作将不会影响实参的值。因为是直接复制,所以这种方式在传递大量数据时,运行效率会特别低下。引用传递:引用传递弥补了值传递的不足,如果传递的数据量很大,直接复过去的话,会占用大量的内存空间,而引用传递就是将对象的地址值传递过去,函数接收的是原始值的首地址值。在方法的执行过程中,形参和实参的内容相同,指向同一块内存地址,也就是说原创 2021-08-15 20:17:09 · 1812 阅读 · 0 评论 -
HashMap底层原理(JDK8及以后)!
HashMap顾名思义,可以看出它和Hash表有着密不可分的联系,在讲解HashMap之前,我们先来了解一下Hash表。哈希表:相比数组、线性链表、二叉树这几种数据结构,在哈希表中进行添加,删除,查找等操作,性能十分之高,不考虑哈希冲突的情况下,仅需一次定位即可完成,时间复杂度为O(1),接下来我们就来看看哈希表是如何实现达到惊艳的常数阶O(1)的。我们知道,数据结构的物理存储结构只有两种:顺序存储结构和链式存储结构(像栈,队列,树,图等是从逻辑结构去抽象的,映射到内存中,也这两种物...原创 2021-08-15 17:28:03 · 183 阅读 · 0 评论 -
JAVA中main方法如何执行。
public class Test{ public static void main(String[] args){ System.out.println("hello world"); }}上述就是java代码中的一段简单的main函数的代码,代码执行后输出结果为:hello worldmain函数:在java中main函数是一个特殊的函数,是java代码的入口函数,即java代码执行时,会寻找main函数,执行完main函数,整个代.原创 2021-08-10 22:11:10 · 2237 阅读 · 0 评论 -
TCP协议和UDP协议的区别!
用表格形式简单的展示一下二者的区别: TCP UDP 是否可靠 是 否 是否面向链接(即建立连接) 是 否 使用的套接字对象 Socket DatagramSocket 运行速度 相对较快 相对较慢 传输包大小有无限制 无 有 是否保证数据顺序 是 否 是否保证数据正确性 是 否 ...原创 2021-08-10 17:29:12 · 72 阅读 · 0 评论 -
JAVA基础——函数总结
函数总结: 函数 常见的系统类 函数:什么是函数:函数的调用:public为主函数是公开权限 最大权限static为主函数是静态函数void表示该函数没有返回值main是主函数的名称helloJava是函数名return:此处因为有void所以不写return局部变量:函数的重载:递归:常见的系统类:Math:常见的还有:abs(); 返回一个绝对值 m...原创 2021-07-13 17:22:44 · 165 阅读 · 0 评论 -
JAVA基础——程序控制流程
程序控制流程(三大流程)switch语句块 循环 循环加强switch语句块 :switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。switch构造如下:switch case 语句有如下规则: switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。 switch 语句可以拥有原创 2021-07-10 18:50:48 · 80 阅读 · 0 评论 -
JAVA基础——常见运算符
JAVA运算符:算术运算符 比较(关系)运算符 逻辑运算符 自加自减运算符 赋值运算符 三目运算符 位运算符算术运算符:以a = 1;b = 2为例。符号 描述 示例 + 相加:将符号两边的数加起来 a+b=3 - 相减:用符号左边的数减去右边的数 a-b=-1 * 相乘:将符号两边的数乘起来 a*b=2 / 相除:用符号左边的数除以右边的数 a/b=0.5 % 取余:符号左边的数除以右边的数所.原创 2021-07-10 18:22:09 · 88 阅读 · 0 评论