synchronized的内存语义

synchronized锁可以让临界区互斥执行,但是我们常常忽略其内存语义 synchronized的内存语义定义如下: 当线程获取锁时,JMM会把该线程对应的本地内存置为无效。从而 使得被监视器保护的临界区代码必须从主内存中读取共享变量,与volatile读有相同的内存语义 当线程释放锁时,JMM会把该线程对应的本地内存中的共享变量刷 新到主内存中,与volatile写有相同的内存语义 我们通过...

阅读更多

理解计算机中的大端和小端,字节序和比特序

引用百度百科的一句话就是: 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。 反过来就是小端模式。 要理解这个定义,我们必须清楚内存的高地址和低地址分别是什么,数据的高位和低位又是什么。 回忆我们用过的带方格的写字本(方格本),假定这个方格本只有一...

阅读更多

ThreadLocal内存泄漏分析

ThreadLocal主要用于多线程环境下,尤其是在方法调用链特别长复杂的情况下单个线程的数据传递问题,相当于每一个线程中只有一个“全局”的变量。本质是将数据存到当前线程的threadLocals变量中,其类型为ThreadLocal.ThreadLocalMap。 弱引用 通过类似 WeakReference...

阅读更多

为虚拟机扩展硬盘空间

笔者使用虚拟机硬盘一般会设置20或30GiB,因为虚拟机硬盘占用空间只会上升而不会下降,如果涨到太大就不方便克隆分发了。 有时空间不够,必须扩展空间。就需要使用虚拟机的添加硬盘功能。 笔者使用的是VMware,关闭虚拟机,菜单可以直接点击虚拟机设置,添加SCSI硬盘,选择创建新的虚拟硬盘(添加的虚拟硬盘同时也可以添加到其他虚拟机,使用现有虚拟磁盘即可,类似文件版的移动硬盘),然后选择将硬盘拆成多个...

阅读更多

使用自启动脚本rc.local需要注意的问题

最近给系统加自启动,遇到一些问题,记录以备查,系统使用的是Ubuntu 16.04 确保/etc/rc.local文件存在并且有执行权限,默认的rc.local文件内容为 #!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the ...

阅读更多

如何查找进程PID并KILL相应进程

笔者最近有个需求,脚本里面运行了后台进程,重新执行脚本时需要先查找出之前运行的进程并杀死 查阅资料,常见有以下方法 方法1: 查找pid ps -ef | grep name | grep -v grep | awk '{print $2}' 解释 grep -v不显示grep的进程;由于PID在第二列,awk打印进程PID; 也可以使用pgrep name可以直接获取PID 结束进程: 获取完成...

阅读更多

python中的错误释放锁

有如下python代码: #! /usr/bin/env python # -*- coding: utf-8 -*- from threading import Lock import time import threading mutex = Lock() def test_lock(tid): global mutex try: if mutex.ac...

阅读更多

使用VMware的快照和克隆功能

在此之前,笔者都是直接复制的虚拟机目录用于分发虚拟机。前段时间为了多机模拟,复制了虚拟机,然后发现虚拟机之间网络不通,原因是复制的虚拟机mac地址相冲突。后来才知道可以使用VMware的快照和克隆功能暂存和备份。 关于快照和克隆,可以查看这篇文章: https://blog.csdn.net/whatday/article/details/52538031 注意以下几点: 快照可以创建多个,也可以...

阅读更多