- 博客(34)
- 收藏
- 关注
原创 JVM学习笔记_垃圾收集器重要参数
目录-XX:+UseParallelGC-XX:+UseSerialGC-XX:+UseParNewGC-XX:+UseConcMarkSweepGC-XX:PretenureSizeThreshold-XX:MaxTenuringThreshold-XX:TargetSurvivorRatio垃圾收集器有串行收集器,比如 Serial收集器+Serial Old收集器,Parallel Scavenge+Parallel Old收集器等等。该如何让这些不同的垃圾收集器组合触发使用呢?-XX:+UseP
2022-04-16 11:37:33 2545
原创 JVM学习笔记_GC日志
每种收集器的日志形式由他们自身的实现决定,虚拟机设计者为了方便用户阅读,将各个收集器的日志维护了一定的公共性。打印GC日志以下GC日志通过设置JVM启动参数产生,JVM启动参数如下:-verbose:gc-Xms20M-Xmx20M-Xmn10M-XX:+PrintGCDetails-XX:SurvivorRatio=8Java运行程序:public class MyTest1 { public static void main(String[] args) {
2022-04-16 11:35:03 170
原创 JVM学习笔记_JVM垃圾收集器
导航对象创建指针碰撞空闲列表空间分配并发性问题对象内存布局对象创建JVM遇到new指令时,检查符号引用代表的类是否已经被加载,解析和初始化过。没有的话,需要执行类加载的过程。加载通过后,为新生对象分配内存。对象所需的内存大小,在类加载完成时候便可以完全确定(如何确定参考对象的内存布局)。为对象分配空间其实就是把一块确定大小的内存从JVM堆中划分出来。这个过程涉及到两个重要的概念:指针碰撞 和 空闲列表。指针碰撞假设堆内存是完整的,用过得内存都放在一边,空闲得放在另一边,中间放着一个指针作为分界点
2022-04-16 11:29:25 728
原创 JVM学习笔记6_JVM内存区域初探
1. 运行时数据区域组成Java虚拟机在Java程序执行过程中会把它所管理的内存划分若干个区域,主要有如下7个区域:程序计数器、Java虚拟机栈本地方法栈堆方法区运行时常量池直接内存2. 程序计数器程序计数器(Program Counter Register): 一块较小的内存空间,是当前线程所执行字节码的行号指示器。程序计数器每个线程都会有1个,是线程私有的。如果程序...
2021-04-19 00:02:15 153
原创 Docker学习笔记1-初识Docker
Docker其实在几年前就比较火了,但是一直有其概念,没有系统学习过。这里就将学习过程中的笔记整理一下。1. 概念Dockek是一个能够把开发的应用程序自动部署到容器的开源引擎, 由Go语言编写,给予Apache License 2.0开源协议授权发行。1.1 优点提供了简单,轻量的建模方式职责逻辑分离快速、高效的开发生命周期1.2 Docker核心组件Docker客户端和服务端,也称Docker引擎架构图如下:Docker镜像Registry用来保存用户构建的镜像
2020-10-25 11:59:20 157
原创 JVM学习笔记6_线程上下文类加载器
1. 线程上下文类加载器相关概念当前类加载器(Current Classloader): 用户加载当前类的类加载器。每个类都会使用自己的类加载器(即加载自身的类加载器)去加载其他的类(自身所依赖的类)。如果ClassX 引用了ClassY, 那么ClassX的类加载器就会去加载ClassY(前提是ClassY还未被加载)。线程上下文类加载器:这个概念从JDK1.2引入, 它指的值Threa...
2020-03-27 23:49:27 168
原创 JVM学习笔记5_命名空间(续)
此篇博客是为了加深对命名空间的理解,也是为了后续学习线程上下文类加载器做铺垫。1. 回顾接着上一节博客,我们回顾下命名空间的几个概念:每个类加载器都要自己的命名空间,命名空间由该加载器及其所有的父类加载器所加载的类组成重点: 命名空间是由类(class对象)组成。同一个命名空间中,不会出现类的完整名字相同的两个类不同命名空间中,可能会出现类的完整名字相同的两个类2. 关于命名...
2020-03-15 22:27:54 128
原创 Git rebase 实战
开发过程中一般对git merge命令用的比较多,这里特意记录下git rebase的使用。git rebase即变基,用于分支合并。它与git merge的区别是:git merge 对两个分叉的分支合并后,会产生一次新的提交,并且多个分支的历史记录都会得到保存git rebase 对两个分叉的分支合并后,历史记录是一条直线,会显得更为整洁实战前置条件:总结不要对maste...
2019-08-24 01:02:48 401
原创 JVM学习笔记4_命名空间
1. JVM三种类加载器路径获取可以通过System.getProperty() 方法获取类加载器加载类的路径:System.getProperty("sun.boot.class.path") //表示根类加载器加载路径System.getProperty("java.ext.dirs") //表示扩展类加载器加载路径System.getProperty("j
2018-12-16 23:25:44 194
原创 Git学习笔记
本文记录Git工作中常用的基本命令,备忘。1. Git初始化配置# 配置用户信息git config --global user.name "your name"git config --global user.email "your email"#配置别名,提交效率git config --global alias.st statusgit config --blobal
2018-12-09 23:24:53 204
原创 Kotlin学习笔记2_面向对象
1. 类的定义Kotlin中用class关键字定义一个类。在Kotlin中,一个类可以有primary构造方法, 以及一个或多个secondary构造方法primary 构造方法是类头(class header)的一部分,它位于类名后面,可以拥有若干参数如果 primary构造方法没有任何注解或是可见性关键字修饰, 那么constructor关键字可以省略如果构造方法有注解或者可见性修...
2018-10-21 22:09:23 155
原创 Kotlin学习笔记1_基础语法
1. What’s Kotlin? – 引自百度百科 Kotlin 是一个用于现代多平台应用的静态编程语言,由 JetBrains 开发。 Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。 Kotlin已正式成为Android官方支持开发语言。官方地址: http://kotlinlang.org/Kotl...
2018-10-03 17:29:46 160
原创 理解JAVA线程中断
1. 什么是中断 线程中断可以理解为线程的一个标识性属性。中断好比其他线程对该线程打了个“招呼“。中断后具体该如何操作取决于线程本身。线程中断的几个重要方法:// Thread 类中的实例方法,返回该线程的中断标识位的值public boolean isInterrupted() {}// Thread 中的静态方法,检测调用这个方法的线程是否已经中断// 注意:这个方法返回中...
2018-07-22 23:14:36 393
原创 JVM学习笔记3_类加载器
JVM类加载器分为四种:根类加载器(Bootstrap ClassLoader): 加载 JRE/lib/rt.jar 或者 Xbootclasspath选项指定的jar包,由C++实现,不是ClassLoader子类扩展类加载器(Extension ClassLoader): 加载JRE/lib/ext/*.jar 或者 -Djava.ext.dirs 指定目录下的jar包系统类加载器...
2018-07-14 19:04:00 193
原创 JVM学习笔记2_接口加载与初始化
接口定义的变量默认都是public static final 的。当一个接口在初始化时,并不要求其父接口完成了初始化。比如引用一个接口在编译时就能确定的常量值,是不会初始化该接口的。看下面一个例子:public class MyTest6 { public static void main(String[] args) { System.out.println...
2018-06-10 23:38:08 234
原创 采坑_java用buffer读取流数据不对
背景: 项目中采用了BufferedReader, 调用readline()方法读取流中的一行,导致代码在编译时对readline() 方法报了CodeDex, 为了清理CodeDex,坑就挖出来了。1. 挖坑代码原来大概是这样的:public class MyTest1 { public static void main(String[] args) throws IO...
2018-06-08 00:11:57 2204
原创 JVM学习笔记1_类加载与初始化
在java代码中,类型(class, interface, enum)的加载,连接,初始化过程都是在程序的运行期间完成的。类型的加载最常见的情况是将磁盘上的class文件加载到内存中。JVM与程序生命周期在如下几种情况下, JVM将结束生命周期:执行System.exit()方法程序正常结束程序在执行过程中遇到异常或错误而异常终止操作系统出现错误导致JVM进程终止...
2018-06-05 00:04:25 171
原创 java8学习笔记5_新日期API
1. 关于日期与时间几个时间概念:格林威治标准时间(GMT): 正午时间是太阳穿越本初子午线的时间,该时间由于地球自转影响,时间会有误差,它被更精确的UTC时间取代, 但可以理解GMT时间和UTC时间是等价的。UTC时间(Coordinated Universal Time):协调世界时。格式:2018-06-03T11:22:33.567z。IOS8601Java8之前的版本...
2018-06-03 22:12:38 140
原创 java8学习笔记4_Stream底层实现类小记
出现了lambda表达式和函数式接口后,对于之前的匿名内部类语法,就有了很好的替代方式。使用lambda会使得语法更简单,但是二者本质上还是不同的。public class LambdaTest { Runnable r1 = () -> System.out.println(this); Runnable r2 = new Runnable() { ...
2018-06-03 22:10:38 1069
原创 java8学习笔记3_流与自定义收集器使用陷阱总结
上一篇讲解了Java8中的流与收集器的使用方式,这篇记录一下自定义收集器可能会遇到的问题和使用陷阱。 Collector接口里定义了一个枚举类Characteristics,里面有三个值:CONCURRENT , UNORDERED, IDENTITY_FINISH。当自定义收集器的时候,就需要实现characteristics这个方法,返回一个Set<Characteristics&...
2018-05-13 13:16:31 987 2
原创 java8学习笔记2_流与收集器使用
1. 接口定义方法 java8接口可以定义default method 和 static method,其中default method供实现该接口的实例调用,static method供类直接调用。注意点:多个接口默认方法签名相同的问题。 假如有实现类实现了多个含有相同默认方法的接口,这时候编译器会报错, 需要类重写该默认方法。 重写默认方法后,想调用某个接口的默认方法...
2018-05-12 12:04:22 250
原创 java8学习笔记1_函数式接口与lambda表达式
1. 函数式接口特性:函数式接口中抽象方法个数为1如果一个接口使用@FunctionalInterface注解,编译器要求其符合函数式接口的定义接口只有一个抽象方法,但没有@FunctionalInterface注解,编译器仍然\将其作为函数式接口对待接口声明的抽象方法重写了java.lang.Object类中的public方法,不会让函数式接口的抽象方法个数+1eg: 如下...
2018-04-26 00:20:23 327
原创 MySQL索引笔记
1. 索引概念 索引是单独的,存储于磁盘上的一种数据结构。2. 设计原则索引并非越多越好。索引虽然查询快,但是会影响插入,修改,删除语句性能.避免对经常更新的表做过多的索引。对于经常查询的字段应该创建索引。数据量小的表的不要使用索引。在不同值较多的列上建立索引。不同值太少的列建立索引作用不大,比如性列就两个值,男和女。 频繁排序或分组的列建索引。3. 索引语法建...
2018-04-10 00:23:21 139
原创 设计模式之命令模式
1. 定义 在软件系统中,行为请求者与行为实现者通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,实现二者之间的松耦合。这就是命令模式(Command Pattern)。[引自百度百科]定义概括: 1. 行为请求者与行为实现者解耦 ...
2018-04-02 00:42:03 200
原创 docker学习手记
1. ubuntu容器安装ip命令 学习docker网络知识时,发现启动的容器都没有ping这个命令,找了半天如何安装,记录一下。 大概流程如下:#新建网络:$ docker network create -d bridge my-net#启动一个容器$ docker run --rm -it --name ubuntu1 --network my-net ubuntu /b...
2018-03-05 00:02:08 123
原创 ${}一些特殊用法总结
${}最常用的就是获取变量的值,除此之外,他还有一些特殊用法。1. 字符串截取 shell中直接用${}就可以完成字符串截取功能,非常方便。比如用find 命令查找文件名后,对输出结果进行截取,区分目录和文件名:#!/bin/bashset -efile_names=`find ~ -name "test.txt"`for file_name in ${file_...
2018-02-27 23:22:07 853
原创 Linux脚本参数$#,$$,$n,$@,$*区别
看过又忘了,记性不好,还是记下来吧。大概总结一下: 变量名 含义 $0 表示当前脚本的文件名 $n 传递给脚本的第几个参数,n表示第几个, n >= 1 $# 表示参数的个数 $* 表示所有的参数,注意与 "$*" 的区别 $@ 表示所有的参数, 注意与 "$@", "$*"的区别 $$ 表示当前正...
2018-02-23 23:30:52 1506
原创 python学习笔记2之基本数据结构
1. list (列表) python中列表表示可变的有序的集合,集合元素本身没有限制,可以为不同的数据类型。 定义列表的几种方式:L = [1, -10.5, True, None]L = [x for x in range(1, 10)] # 列表生成式,生成[1,2, ..., 9] 的列表 构建空的list:L = []L = list() 常用方...
2018-02-21 17:56:13 473
原创 python学习笔记1之数据类型
1. 整数(int) python是弱类型语言,定义整数时可以定义任意范围,没有大小限制,就跟数学定义整数一样, 如 0, -100, 50, 1000。2. 浮点数(float) 浮点数也就是小数,如-1.0, -0.0, 0.0 , 3.14, 1.5e10(15000000000.0), 1.5e-2(0.015)3. 字符串(str) 字符串表示用 " 或 ' ...
2018-02-18 14:12:07 151
原创 设计模式之组合模式
1. 定义 组合模式(Composite):指的是能够使容器和内容具有一致性,创造出递归结构的模式。 该模式表示部分与整体的层次结构,使得我们对单个对象和组合对象的使用具有一致性,也就是在使用的的时候他们对外暴露出相同的接口。 递归结构在计算机系统中很常见,比如熟知的文件系统,目录和文件都是文件,目录也可以包含文件。2. 类图该模式有3个明显特征,对应类图:把
2018-01-28 17:34:34 170
原创 设计模式之观察者模式
1. 观察者模式定义 观察者模式:又称发布订阅模式,当一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。【引自百度百科】 这里的目标物件,就是被观察者,当它的状态发生变更时,需要去通知所有观察它的观察者。 根据定义大体就能知道,被观察者需要将一个个观察者管理起来,否则它怎么知道通知谁呢?这才是核心。2. 类图 自己感觉这个模式还是比较简单的,
2018-01-19 00:04:43 114
原创 设计模式之装饰模式
1. 装饰模式定义 装饰(Decorator)模式:装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。【引自百度百科】 该定义有3个核心关键词:不改变原类、不用继承、动态扩展。进一步说,我要动态扩展功能,我既不改变原类,也不用继承。 动态扩展一词很有意思,比如有三个新功能A、B、C, 在类的使用过程中想具备三个新功能的任意组合。比如在原功能基础上具备A
2018-01-07 21:50:30 156
原创 设计模式之享元模式
1. 享元模式定义 享元模式(FlyWeight): 当需要某个实例时,并不总是通过new来创建,尽量使用已存在的实例,以达到节省内存的目的。2. 程序示例 假设需要在控制台显示0~2范围的大数字(右多行多列#.组成的数字),每个大字符由一个txt文件保存,命名为0.txt, 1.txt, 2.txt ,如下图所示: 一个大字符对应一
2018-01-04 22:55:35 233
原创 MySQL之视图
1. 视图的定义是个虚拟表,是从数据库中一个或多个表中导出的表;可以像表一样进行查询,修改和删除操作。通过视图新增或删除数据,会影响基本表,反之亦然;2. 视图作用简单化 简化用户对数据的理解。经常被使用的查询可以被定义为视图,减少SQL编写。安全性 数据库的授权只能定义到表级别,而视图可以细化到特定的行和列。逻辑数据独立性 屏蔽真实表结构变化带来的影响3. 创建视图先创建一个简
2017-11-05 19:41:29 172
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人