自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 jvm-对象实例化内存布局与访问定位

对象实例化内存布局与访问定位对象实例化面试题对象在JVM中是怎么存储的?对象头信息里面有哪些东西?Java对象头有什么?从对象创建的方式 和 步骤开始说对象创建方式new:最常见的方式、单例类中调用getInstance的静态类方法,XXXFactory的静态方法Class的newInstance方法:在JDK9里面被标记为过时的方法,因为只能调用空参构造器Constructor的newInstance(XXX):反射的方式,可以调用空参的,或者带参的构造器使用clone():

2020-09-17 16:12:19 113

原创 Java11的新特征

1

2020-09-10 22:05:35 275

原创 jvm-方法区

方法区前言这次所讲述的是运行时数据区的最后一个部分从线程共享与否的角度来看ThreadLocal:如何保证多个线程在并发环境下的安全性?典型应用就是数据库连接管理,以及会话管理栈、堆、方法区的交互关系下面就涉及了对象的访问定位Person:存放在元空间,也可以说方法区person:存放在Java栈的局部变量表中new Person():存放在Java堆中方法区的理解《Java虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行

2020-09-07 19:27:16 134

原创 jvm-堆

堆堆的核心概念堆针对一个JVM进程来说是唯一的,也就是一个进程只有一个JVM,但是进程包含多个线程,他们是共享同一堆空间的。一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。堆内存的大小是可以调节的。《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区(Thread Local A

2020-09-07 13:13:41 106

原创 jvm-本地方法和本地方法栈

本地方法接口什么是本地方法简单地讲,一个Native Methodt是一个Java调用非Java代码的接囗。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern “c” 告知c++编译器去调用一个c的函数。“A native method is a Java method whose implementation is provided by non-java c

2020-09-06 15:37:26 189

原创 jvm-虚拟机栈

虚拟机栈虚拟机栈概述由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。有不少Java开发人员一提到Java内存结构,就会非常粗粒度地将JVM中的内存区理解为仅有Java堆(heap)和Java栈(stack)?为什么?首先栈是运行时的单位,而堆是存储的单位栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么

2020-09-06 15:23:17 109

原创 jvm-程序计数器

程序计数器介绍JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域。在JVM规范中,每个线程都有它自

2020-09-04 15:54:32 219

原创 jvm- 运行时数据区概述及线程

运行时数据区概述及线程前言本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段当我们通过前面的:类的加载-> 验证 -> 准备 -> 解析 -> 初始化 这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时数据区也就是大厨做饭,我们把大厨后面的东西(切好的菜,刀,调料),比作是运行时数据区。而厨师可以类比于执行引擎,将通过准备的东西进行制作成精美的菜品内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操

2020-09-04 15:25:41 84

原创 jvm-类加载子系统

类加载子系统概述完整图如下如果自己想手写一个Java虚拟机的话,主要考虑哪些结构呢?类加载器执行引擎类加载器子系统作用类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文

2020-09-04 15:08:13 90

原创 JVM简介和Java体系结构

JVM与Java体系结构前言作为Java工程师的你曾被伤害过吗?你是否也遇到过这些问题?运行着的线上系统突然卡死,系统无法访问,甚至直接OOMM!想解决线上JVM GC问题,但却无从下手。新项目上线,对各种JVM参数设置一脸茫然,直接默认吧然后就JJ了每次面试之前都要重新背一遍JVM的一些原理概念性的东西,然而面试官却经常问你在实际项目中如何调优VM参数,如何解决GC、OOM等问题,一脸懵逼。大部分Java开发人员,除会在项目中使用到与Java平台相关的各种高精尖技术,对于Java技术的

2020-09-03 23:20:10 194

原创 Java8新特性

主要内容Lambda 表达式函数式接口方法引用与构造器引用Stream API接口中的默认方法与静态方法新时间日期 API其他新特性Lambda 表达式Lambda 是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。Lambda 表达式语法Lambda 表达式在Java 语言中引入了一个新的语法元素和操作符。这个操作符为 “-&gt

2020-09-03 16:14:06 83

原创 Pandas的高级索引

Pandas的高级索引有3种loc 标签索引DataFrame 不能直接切片,可以通过loc来做切片loc是基于标签名的索引,也就是我们自定义的索引名示例代码:ser_obj = pd.Series(range(5), index = ['a', 'b', 'c', 'd', 'e'])df_obj = pd.DataFrame(np.random.randn(5,4), columns = ['a', 'b', 'c', 'd'])# 标签索引 loc# Seriesprint(s

2020-09-02 17:35:28 287

原创 Pandas的使用(1)

什么是Pandas?Pandas的名称来自于面板数据(panel data)和Python数据分析(data analysis)。Pandas是一个强大的分析结构化数据的工具集,基于NumPy构建,提供了 高级数据结构 和 数据操作工具,它是使Python成为强大而高效的数据分析环境的重要因素之一。一个强大的分析和操作大型结构化数据集所需的工具集基础是NumPy,提供了高性能矩阵的运算提供了大量能够快速便捷地处理数据的函数和方法应用于数据挖掘,数据分析提供数据清洗功能Pandas的数据

2020-09-02 17:24:34 76

原创 Numpy-ndarray(3)

元素计算函数ceil(): 向上最接近的整数,参数是 number 或 arrayfloor(): 向下最接近的整数,参数是 number 或 arrayrint(): 四舍五入,参数是 number 或 arrayisnan():判断元素是否为 NaN(Not a Number),参数是 number 或 arraymultiply(): 元素相乘,参数是number 或 arraydivide(): 元素相除,参数是number 或 arrayabs():元素的绝

2020-09-02 13:26:48 228

原创 Numpy-ndarray(2)

ndarray的矩阵运算数组是编程中的概念,矩阵、矢量是数学概念。在计算机编程中,矩阵可以用数组形式定义,矢量可以用结构定义!矢量运算:相同大小的数组间运算应用在元素上示例代码(1):# 矢量与矢量运算arr = np.array([[1, 2, 3], [4, 5, 6]])print("元素相乘:")print(arr * arr)print("矩阵相加:")print(arr + arr)运行结果:元素相乘:[[ 1 4 9]

2020-09-02 13:09:06 150

原创 Numpy-ndarray(1)

Numpy:提供了一个在Python中做科学计算的基础库,重在数值计算,主要用于多维数组(矩阵)处理的库。用来存储和处理大型矩阵,比Python自身的嵌套列表结构要高效的多。本身是由C语言开发,是个很基础的扩展,Python其余的科学计算扩展大部分都是以此为基础。ndarrayNumPy数组是一个多维的数组对象(矩阵),称为ndarray,具有矢量算术运算能力和复杂的广播能力,并具有执行速度快和节省空间的特点。ndarray的随机创建代码示例:# 生成指定维度大小(3行4列)的随机多维浮点.

2020-09-02 11:03:06 2176

原创 python-数据分析理论

定义:数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结论而对数据加以详细研究和概括总结的过程。这一过程也是质量管理体系的支持过程。在实用中,数据分析可帮助人们作出判断,以便采取适当行动。过程:数据收集:本地数据或者网络数据的采集与操作.数据处理:数据的规整,按照某种格式进行整合存储。数据分析:数据的科学计算,使用相关数据工具进行分析。数据展现:数据可视化,使用相关工具对分析出的数据进行展示。大数据分析场景和模型应用数据分析建模需要先明确业务需求,然

2020-09-02 10:09:44 473

原创 MyBatisPlus的入门使用

1.MyBatisPlus 介绍MyBatis-Plus(简称 MP),是一个 MyBatis 的增强工具包,只做增强不做改变. 为简化开发工作、提高生产率而生2.集成 MP2.1 创建测试表-- 创建库CREATE DATABASE mp;-- 使用库USE mp;-- 创建表CREATE TABLE tbl_employee( id INT(11) PRIMARY KEY AUTO_INCREMENT, last_name VARCHAR(50), email VARCHAR(

2020-08-08 10:45:40 422 1

原创 Docker 安装 Nginx

下载最新版的 Nginx 镜像docker pull nginx:latest运行容器docker run -di --name=mynginx -p 80:80 nginx测试是否成功进入容器docker exec -it mynginx /bin/bash查看nginx中的配置文件cat /etc/nginx/nginx.conf看到此配置文件会加载其他配置文件,找到相应的配置文件cat /etc/nginx/conf.d/default.conf静态

2020-08-07 15:08:57 221

原创 Docker的安装和基本使用

Docker简介Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。Docker的安装1.更换国内软件源,推荐中国科技大学的源,稳定速度快(可选)sudo cp /etc/apt/sources.list

2020-08-07 12:35:24 99

原创 编辑器vim的基本使用

vim有三种基本工作模式:命令模式文本输入模式末行模式命令行模式任何时候,不管用户处于何种模式,只要按一下ESC键,即可使Vi进入命令模式;我们在shell环境(提示符为$)下输入启动Vi命令,进入编辑器时,也是处于该模式下。在该模式下,用户可以输入各种合法的Vi命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的Vi命令,则Vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是Vi的合法命令,Vi会响

2020-08-02 21:40:19 87

原创 Linux中的命令

学习终端命令的技巧:1.不需要死记硬背,对于常用命令,用的多了,自然就记住了2.不要尝试一次学会所有的命令,有些命令是非常不常用的,临时遇到,临时百度就可以小技巧ctrl + shift + = 放大终端窗口的字体显示ctrl + - 缩小终端窗口的字体显示按 上/下 光标键可以在曾经使用过的命令之间来回切换如果想要退出选择,并且不想执行当前选中的命令,可以按 ctrl + c基本命令对应英文说明lslist查看当前文件夹下的内容pwdprint wrok

2020-08-02 21:30:33 115

原创 Linux主要目录速查表

/:根目录,一般根目录下只存放目录,在 linux 下有且只有一个根目录,所有的东西都是从这里开始当在终端里输入 /home,其实是在告诉电脑,先从 /(根目录)开始,再进入到 home 目录/bin、/usr/bin:可执行二进制文件的目录,如常用的命令 ls、tar、mv、cat 等/boot:放置 linux 系统启动时用到的一些文件,如 linux 的内核文件:/boot/vmlinuz,系统引导管理器:/boot/grub/dev:存放linux系统下的设备文件,访问该目录下某个文件,相当

2020-08-02 20:10:30 144

原创 Java中的两种动态代理的实现

这里写自定义目录标题动态代理基于接口的动态代理实现基于子类的动态代理实现动态代理特点:字节码随用随创建,随用随加载作用:不修改源码的基础上对方法增强分类:* 基于接口的动态代理* 基于子类的动态代理基于接口的动态代理涉及的类:Proxy* 提供者:JDK官方* 如何创建代理对象:* 使用Proxy类中的newProxyInstance方法*创建代理对象的要求:* 被代理类最少实现一个接口,如果没有则不能使用 * new

2020-06-19 16:35:31 83

原创 redis的持久化

Redis的持久化 1. redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。 2. redis持久化机制: 1. RDB:默认方式,不需要进行配置,默认就使用这种机制 * 在一定的间隔时间中,检测key的变化情况,然后持久化数据 1. 编辑redis.windwos.conf文件 # 900秒内至少有1个键改变 save 900 1 # 300秒内至少有10个键改变

2020-06-07 19:29:34 199

空空如也

空空如也

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

TA关注的人

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