自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(85)
  • 资源 (3)
  • 收藏
  • 关注

原创 Java InputStream未调用close方法进行资源关闭造成直接内存泄漏

今天做一个测试,测试InputStream未关闭资源是否会造成内存泄漏一 测试程序准备未关闭InputStream的Java程序【UrlStreamNoClose.java】:import java.io.IOException;import java.io.InputStream;import java.net.URL;import java.nio.file.Files;import java.nio.file.Paths;public class UrlStreamNoClose.

2021-01-17 13:51:19 5832 4

原创 Linux:strace的跟踪程序运行过程

strace 用于记录和跟踪程序运行期间收到的信号和调用的系统调用。其中包括跟踪程序运行过程中的向操作系统的内存申请和释放。一、命令格式bingsanlang@ubuntu:~$ strace -helpusage: strace [-CdffhiqrtttTvVwxxy] [-I n] [-e expr]... [-a column] [-o file] [-s strsize] [-P path]... -p pid... / [-D] .

2021-01-10 18:51:50 1793 1

原创 Linux:ldd 查看程序依赖的共享库

ldd不是一个可执行程序,只是一个shell脚本,如果程序执行时,依赖的某个库找不到,通过这个命令可以迅速定位问题所在。一 命令格式ldd 用于打印程序或者库文件的依赖库关系。bingsanlang@ubuntu:~$ ldd --helpUsage: ldd [OPTION]... FILE... --help print this help and exit //打印帮助 --version print version i.

2021-01-10 15:01:13 2863 1

原创 Java-复用类

复用代码是开发过程中最频繁的行为和需求。一、复用的方式复用代码的方式有三种:继承、组合和继承与组合复用。继承是指在已有类满足部分功能的前提下,还需要一些额外的功能,这时候可以采取拓展现有的能力的基础上,继承父类,在子类的上拓展能力。使用继承的场景和特点如下:继承不是最好的复用方式,增加了类结构管理维护成本,同时耦合性增大。考虑继承的前提是:对象是否有向上转型的需求。继承不建议重写父类方法,有可能产生意想不到的灾难。组合是一种比较优雅的复用方式,组合的思想迫使类模块的实现者严格界定每个类.

2021-01-10 11:29:38 228

原创 Linux:超线程判断关联的物理CPU个数、核数、逻辑CPU个数

本文主要是判断linux是否使用超线程技术。一、超线程的判断依据未开启超线程:CPU总线程数 = 物理CPU个数 * 每个物理CPU的逻辑核数 * 1;开启超线程:CPU总线程数 = 物理CPU个数 * 每个物理CPU的逻辑核数 * N。其中N是超线程的个数。二、物理CPU个数cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l三、每个物理CPU的逻辑核数cat /proc/cpuinfo| grep "cpu c.

2021-01-09 23:40:03 494

原创 gdb与peda、pwngdb、pwndbg组合安装与使用

gdb是一个很强大的工具,可以 组合一些插件使用,功能更加全面。这篇文章主要是讲讲如何安装,至于功能,还需了解学习。环境:ubuntu 16.04一、下载我们默认把peda、pwngdb、pwndbg都安装用户的根目录下,可以减少一些文件的改动。下载 前先进入用户根目录:bingsanlang@ubuntu:cd ~1.1 下载pedagit clone https://github.com/longld/peda.git1.2 下载Pwngdbgit clone https://.

2021-01-09 23:18:27 10974 6

原创 Linux查看glibc版本

有两种方式查看glibc版本:方式一bingsanlang@ubuntu:~$ getconf GNU_LIBC_VERSIONglibc 2.23方式二:bingsanlang@ubuntu:~$ ldd --versionldd (Ubuntu GLIBC 2.23-0ubuntu11.2) 2.23Copyright (C) 2016 Free Software Foundation, Inc.This is free software; see the source for cop

2021-01-09 22:00:19 1948

原创 gdb调试出错程序

今天写了一个hook函数,执行出错,不得其解,错误信息无法定位原因,使用gdb很快解决。Ubuntu 16.04.6 LTS一、背景写了一个hook函数,放在LD_PRELOAD下,用来监控malloc和free行为,代码如下:#define _GNU_SOURCE#include <stdio.h>#include <stdint.h>#include <dlfcn.h>#include <stdlib.h>#include <s.

2021-01-09 18:12:08 1764 1

原创 Linux的hook机制:自定义动态链接库hook

最近在研究应用申请内存时的行为,这时候需要hack掉glibc的malloc和free等内存申请操作。用自己写的钩子函数统计malloc和free的频次和大小,以便于解决问题。一、原理linux调用C库中的函数,使用动态库时,环境变量 LD_PRELOAD 所指定程序(动态库)在运行时会优先加载,这个动态库中的符号优先级最高,该库中的函数将会替换掉 glibc 中的相关函数,例如 malloc() 和free()。可以将内存管理库替换为 jemalloc 或者 tcmalloc 。LD_PREL.

2021-01-09 17:42:31 1907 3

原创 深入研究JVM垃圾回收器-G1

敬请期待

2021-01-03 22:26:35 94

原创 深入理解Java虚拟机-第3章-垃圾收集器

JVM的垃圾收集器经历了多代的发展,从单线程收集器到多线程收集器。一、背景垃圾回收器经历过多代的发展,从单线程到多线程,垃圾收集器的大家族产品如下,每一个连线表示可以组合使用。接下来大概分为几个阶段详细介绍下各个垃圾回收器的特点:阶段收集器名称区域并行/串行/并发算法优缺点适用场景第一阶段Serial新生代串行复制响应速度快单CPU环境下的Client模式Serial Old老年代串行标志-整理响应速度快单CPU环境下的Client.

2021-01-03 22:22:11 121

原创 深入理解Java虚拟机-第3章-垃圾收集与内存分配策略

Java与C++之间有一堵由内存动态分配与垃圾回收技术做围成的“高墙”,墙外的人想进去,墙里的人想出去。一、内存分配算法创建对象时,需要分配对象,常用的内存分配方式有两种:指针碰撞和空闲链表法指针碰撞:如果堆内存都是规整的,并且使用的内存都放在一边,空闲的内存都放在一边,中间放着一个指针作为分界点的指示器,那么分配内存仅仅是将指针往空闲的区域挪一下。空闲链表法:针对不连续的内存空间,将空闲的内存空间用链表组织起来,用内存的时候从空闲链表上申请分配内存。使用指针碰撞法的垃圾回收器,Seri.

2021-01-03 18:00:11 122

原创 每天学习一个linux命令:jmap命令

jmap是分析Java堆的有效工具,可以查看堆的设置和当前堆各个区域的状态。一、命令格式1.1 jmap -heap命令执行如下命令 打印堆的汇总信息:jmap -heap 进程Id打印的信息如下:Attaching to process ID 119130, please wait...Debugger attached successfully.Server compiler detected.JVM version is 25.101-b13using thread-l.

2021-01-03 15:07:26 873 3

原创 深入理解Java虚拟机-第2章-JVM内存模型

本章主要是学习下JVM的内存模型,在JDK1.8之前存在Perm,在JDK1.8的时候将perm进行拆分,常量池转移到堆空间,Class等元数据放到了metasapce。一、内存结构二、堆

2020-12-28 23:53:49 116

原创 深入理解Java虚拟机-第6章-类文件结构

本章从Class文件的结构入手,学习Java虚拟机的一次编译,到处运行的魅力一、前言在虚拟机未出现以前,计算机的世界里只认识0和1,如果程序想要在计算机上运行,首先需要编译成机器的汇编语言,然后计算机根据自身系统的指令集解释成指令编码进行运行。Java虚拟机想做成两件事:平台无关性和语言无关性。平台无关性是指无论在什么平台上,什么指令集上,对上层使用者来说这种差异都是无感知的,由虚拟机去完成不同平台指令集和架构的兼容。使用者只需按照虚拟机规定的文件 格式进行输入要运行的信息。语言无关性是指J.

2020-12-27 22:26:33 230

原创 深入研究glibc内存管理器原理及优缺点

最近查清了线上内存占用过大和swap使用频繁的原因:由于linux使用的glibc使用内存池技术导致的堆外内存暴增,基于这个过程中学习和了解了glbic的内存管理原理,和大家分享,如有错误请及时指出。一、应用内存分布从Linux操作系统层面来看,每个应用进程使用task_struct结构进行描述和管理,在task_struct的中,使用mm_struct对内存进行管理,如下图所示:在mm_struct管理的虚拟内存中,主要包括:Kernel Space、MMAP segment、Stack、He.

2020-12-26 23:37:29 3747

原创 Java-权限访问修饰符

Java 权限访问修饰符public、friendly、protected、private,记录下这几个权限的范围。一、背景补充访问权限是为了管理对象与外部使用者交互的范围,外部使用者能够根据不同的访问权限与所使用的对象进行通信,同时,访问权限能够很好的将内部的逻辑很好的封装控,使得使用者更容易理解使用,同时在重构的过程中也能减少对客户端的感知,重构的时候可以修改对客户端无感知的过程。访问权限是基于包(package)概念上建立起来的,本包、外部包之间的类交互控制是通过访问权限进行控制的。包是一.

2020-12-12 21:17:36 2221

原创 Java-初始化与清理

接下来将从几个小节做个学习记录:1、构造器初始化。2、方法重载3、this关键字4、static关键字5、清理6、成员初始化7、数据初始化8、枚举类型一、构造器初始化Java对象有默认构造器,是以类名命名的无参构造器。显示指定构造器后,Java对象默认执定的无参数构造器将不存在。如果需要使用无参构造器,需要指定。初始化对象时,先执行父类构造器和子类构造器。1.1 无参数构造器(默认构造器):public class Constructor { public voi.

2020-12-06 21:18:18 110

转载 SOLID 原则

转:https://www.cnblogs.com/OceanEyes/p/overview-of-solid-principles.html#_label2

2020-09-22 22:19:31 162

转载 Is-a、Has-a和Use-a的解释

IS-A、HAS-A和USE-A都是用来便是类与类之间的关系IS-A表示继承。父类与子类,具有很高的耦合度。HAS-A表示组合。是整体与部分的关系,同时它们的生命周期都是一样的。USE-A表示依赖。依然是其中一个拥有另外一个,但是不负责销毁,也就是声明周期不一样。简...

2020-09-22 17:19:37 840

原创 每天学习一个linux命令:jstat查看Java应用的资源和性能

11111

2020-09-13 14:57:39 283

原创 JVM源码分析:Java对象模型(OOP-Klass模型),Java对象在JVM中的表现形式

jvm环境:openJdk15_20的hotspot一、问题背景当我们在java程序中,使用new创建一个对象时,是否考虑过或者知道这个对象在JVM中是如何表示的?它占用的内存大小是多少?class A { int a;}public static void main(String[] args) { A a = new A();}二、Java对象模型-OOP-Klass在JVM中,Hotspot并没有将Java对象映射成C++对象,而是实现了Java的对象模型(OOP-Klass.

2020-09-07 21:30:17 843 1

原创 JVM调优参数: -Xms -Xmx -Xmn -Xss

简单记录下JVM一些重要的调优参数,防止遗忘。-Xms :设置JVM堆最小内存,此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。例如:-Xms1024m。-Xmx :设置JVM堆最大可用内存,例如:-Xmx1024m-Xmn :设置JVM堆中新生代的内存大小,Sun官方推荐配置为整个堆大小的3/8。-Xss:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生.

2020-09-06 20:02:13 561

原创 Git clone大仓库报错:RPC failed,curl transfer closed with outstanding read data remaining

操作系统:Macbook Pro 10.12.6源码项目:linux源码Git 版本:2.25.0这两天在学习源码相关的项目,当我从github上clone linux项目时,遇到如下错误:Cloning into 'linux'...remote: Counting objects: 20248, done.remote: Compressing objects: 100% (10204/10204), done.error: RPC failed; curl 18 transfer c.

2020-09-06 19:50:51 1088

原创 linux内核源码解析:linux源码下载及top命令中的RES是如何计算的

CLion:2019.3.6源码管理平台:Macbook Pro 10.12.6linux源码一、背景通过上一节,我们知道了top中的RES是从/proc/pid/statm文件中读取出来的,详细的可以看这篇博客《linux的top命令源码解析:RES指标》,这次我们要弄清楚/proc/pid/statm文件中resident值是怎么计算出来的。二、克隆linux源码2.1 linux源码github上,linux的源码地址是:https://github.com/torvalds/lin.

2020-09-06 13:26:25 1947

原创 linux的top命令源码解析:RES指标

CLion:2019.3.6源码管理平台:Macbook Pro 10.12.6C语言源码程序:Makefile格式的linux系统的top命令源码。top所在的系统:ubuntu 14.04一、源码导入linux的top命令采用的是procps-ng项目,可以通过Clion 导入Makefile格式的C语言源程序:procps项目 这篇博客将源码进行下载和导入。二、RES 指标的源码分析1、输入top命令后显示如下:对于RES指标, 代表PID进程占用的物理内存,其中包括共享库内存,.

2020-09-06 08:49:23 16851 2

原创 Clion 导入Makefile格式的C语言源程序:procps项目

CLion:2019.3.6平台:Macbook Pro 10.12.6C语言源码程序:Makefile格式的linux系统的top命令源码。一、背景最近在研究JVM虚拟机内存的占用情况,通过top命令看到进程的RES占用的内存很大,已经超过了java虚拟机设置的大小,所以想弄明白top的RES的数据是怎么计算出来的,但是前提是需要将top的源码下载到本地进行研究。二、源码地址top命令的项目是procps-ng项目,地址是:https://gitlab.com/procps-ng/proc.

2020-09-05 22:35:15 2202

原创 Spring-test:集成测试中,单元测试上下文相互干扰问题的排查

运行环境:jdk1.8 junit spring-test一、背景最近公司的项目的集成测试遇到一个问题,单元测试方法中,用Mockito.verify对依赖服务进行Mockito.times()调用次数验证时,总是处于不稳定的状态,偶尔会出现不符合预期的情况。验证的情况如下:Mockito.verify(testService, Mockito.times(1)).printHelloWord();这里写两个简单的测试类进行说明:依赖服务类ITestService如下:publ.

2020-08-18 14:07:23 5701 3

原创 《重构 改善既有代码的设计》:6.重新组织代码【6.6分解临时变量】-Split Temporary Valiable(128)

假如现在有这样一段代码:double temp = 2 * (height + weight);System.out.println("周长是" + temp);temp = height * weight;System.out.println("面积是" + temp);看到这段代码,如果不是看汉子注释,是不是很不容易想起来每个公式干嘛的。我们现在就产生想要重构的冲动。将每个变量都声明为“见名知其意”的临时变量,修改后的代码如下:double circumference = 2 * (h

2020-07-12 18:34:47 131

原创 《重构 改善既有代码的设计》:6.重新组织代码【6.1提炼函数】-Extract Method(110)

假如现在有一段代码:void printOwing(int count) { System.out.printpn("-------print Title-----"); // print current calcute count System.out.println("---the current calcute count is:" + count) // calculate int countResult = 0; for (int i = 0; i <

2020-07-12 15:56:24 170

原创 mac:jdk多版本配置和管理

bogon:openJdk15_20 wanghanbing$ java -versionjava version "14.0.1" 2020-04-14Java(TM) SE Runtime Environment (build 14.0.1+7)Java HotSpot(TM) 64-Bit Server VM (build 14.0.1+7, mixed mode, sharing)...

2020-05-08 23:15:19 622

原创 国内高速镜像汇总

众所周知,下载国外的一些资源,相当的慢,幸好国内的一些高校和企业存储了一些资源的镜像,并且会不定期的更新,现在提供给大家使用官方网站:https://www.centos.org/阿里云开源镜像:http://mirrors.aliyun.com/搜狐开源镜像:http://mirrors.sohu.com/网易开源镜像:http://mirrors.163.com/清华大学开源镜像...

2020-05-04 13:28:01 320

原创 OpenJDK的下载和编译过程

文章目录一、背景二、 下载OpenJDK源码三、编译OpenJDK源码四、遇到的问题及解决办法一、背景平台:macOs Sierra 10.12.5BootJDK: Sun jdk14.OpenJDK:jdk-15+20最近看了JVM的原理,特别想知道JVM的底层实现是什么的,只有研究的更深入,才能走的更远,遂决定打开jdk这扇神秘的大门。二、 下载OpenJDK源码open...

2020-05-04 13:15:06 1949

原创 Spring:容器与应用的关系

参考:https://blog.csdn.net/u010013573/article/details/86547687

2020-04-25 23:50:15 395

转载 每天学习一个linux命令:less查看文档

运行环境:Ubuntu 16.04.6 LTShttps://www.cnblogs.com/peida/archive/2012/11/05/2754477.html

2020-04-25 19:29:31 176

原创 每天学习一个linux命令:more查看文档

运行环境:Ubuntu 16.04.6 LTS一、语法Usage: more [options] <file>...A file perusal filter for CRT viewing.Options: -d display help instead of ringing bell//d 提示使用者,在画面下方显示 [Press space to...

2020-04-25 17:52:56 307

原创 每天学习一个linux命令:netstat 查看网络连接情况

运行环境:Ubuntu 16.04.6 LTS一、netstat 语法bingsanlang@ubuntu:~$ netstat -husage: netstat [-vWeenNcCF] [<Af>] -r netstat {-V|--version|-h|--help} netstat [-vWnNcaeol] [<Socket>...

2020-04-22 23:37:57 2070

原创 Linux:Java应用随着持续运行一段时间后,内存可用率逐渐减少的乌龙事件排查过程

环境:centos,运行程序: springMVC的web服务容器:jetty一、背景

2020-04-21 22:09:49 2794 1

转载 里氏代换原则概述

https://blog.csdn.net/fangaoxin/article/details/6717233

2020-04-19 15:43:31 129

原创 MySQL的char与varchar的区别

本文采用的存储引擎是InnoDB和/或者MyISAM一、版本支持varchar在不同的版本中的存储长度规则版本存储范围(字节)例子:varchar(20)5.0.3 以下版本和字节无关指的是20字节,如果存放汉字时,只能存6个5.0.3 及以上版本65533(或65532)指的是20字符,无论存放的是数字、字母还是汉字,都可以存放20个在MyS...

2020-04-19 12:58:25 236

计算机系统结构.pdf

计算机系统结构 清华大学出版社 郑纬民 汤志忠,扫描版的pdf,喜欢电子书又想看的有福了。很清晰的说。

2015-11-06

FileZilla_3.14.1_win64-setup.exe

用于建立网站使用,为了把网站代码传到服务器,非常好用,绿色版

2015-11-06

空空如也

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

TA关注的人

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