- 博客(148)
- 问答 (1)
- 收藏
- 关注
原创 编译openjdk并debug hotspot
简单记录一下编译openjdk并debug hotspot的过程1:yum install mercurial #安装mercurial(一种类似git的仓库客户端工具)2:hg clone http://hg.openjdk.java.net/jdk8u/jdk8u openjdk8 #下载 jdk8u相关文件 (我这里下载的是jdk8u不是jdk8)3:cd openjdk8 & sh get_source.sh #下载源码 4:yum install java-1.7.0-o
2022-01-05 21:44:03 878
原创 ubuntu编译linux源码并通过gdb debug
最近在debug linux方法是在vmware上的ubuntu虚拟机上编译linux最新的代码并通过qeum启动然后通过 gdb attach 到linux内核去。编译自己的linux1:先获取linux 源码cd /home/zhaosongqiang/Documents/linux_code/latestgit clonee git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git2:cpoy 一份现在启动的
2021-12-16 22:09:20 2059
原创 ClassNotFoundException与NoClassDefFoundError
jvms规定了下面几种情况下将会抛出NoClassDefFoundError和ClassNotFoundException。1:If the Java Virtual Machine ever attempts to load a class C during verification(§5.4.1) or resolution (§5.4.3) (but not initialization (§5.5)), and the class loaderthat is used to initiate
2021-06-16 10:05:11 333
原创 如何优化系统-Amdahl(阿姆达尔)定律
系统中对某一部件采用更快执行方式所能获得的系统性能改进程度,取决于这种执行方式被使用的频率,或所占总执行时间的比例我们要优化系统应该先定位系统的瓶颈在哪里?哪里的优化价值最大,并且优化难度最小。Amdahl定律简而言之就是首先优化优化价值最大并且难度最小的点。我们假设一个系统分3部分:网络,应用程序,I/O。下面是系统的时间线:|-------------网络(60%)-------------|–应用程序(10%)–|------I/O(30%)-----|如果我们能对网络优化50%,那么对整个系统
2021-06-15 11:25:02 280
转载 Selecting a Collector
Unless your application has rather strict pause time requirements, first run your application and allow the VM to select a collector. If necessary, adjust the heap size to improve performance. If the performance still does not meet your goals, then use the
2021-05-27 15:54:24 84
原创 复现netty的内存溢出
public static void main(String[] args) throws Exception { UnpooledByteBufAllocator ac = new UnpooledByteBufAllocator(true); ByteBuf bf = ac.directBuffer();// bf.release(); bf = null; System.gc(); Thread.slee
2021-05-19 14:13:45 430
转载 When does direct buffer released?
DirectByteBufferdoes not use old Java finalizers. Instead, it uses internalsun.misc.CleanerAPI. It creates new thread and stores aPhantomReferenceto everyDirectByteBuffercreated (except duplicates and slices which refer to the primary buffer). When ...
2021-05-19 09:56:00 95
原创 OutOfMemoryError会不会导致JAVA进程崩溃?
java抛出OutOfMemoryError异常会不会导致进程崩溃?分两种情况:一种是系统内存真的被耗尽了,系统的OOM killer 会杀掉进程。一种是jvm 或者jdk逻辑上的OutOfMemoryError。比如jdk 中ByteBuffer 申请DirectByteBuffer的时候如果此时系统的直接存储已经超过了 -XX:MaxDirectMemorySize 设置的上限,只是简单的抛出OutOfMemoryError异常。...
2021-05-13 19:35:43 1091
原创 遇到一个 javac 编译器优化的坑
先来看下代码,和运行结果package com.zsq;import java.lang.reflect.Field;public class Test { final int a = 3; final Integer b = 3; public static void main(String[] aa) throws NoSuchFieldException, IllegalAccessException { Test s = new Test();
2021-04-25 17:22:51 135
原创 Memory Access Ordering Model
// Memory Access Ordering Model//// This interface is based on the JSR-133 Cookbook for Compiler Writers// and on the IA64 memory model. It is the dynamic equivalent of the// C/C++ volatile specifier. I.e., volatility restricts compile...
2021-04-23 17:19:27 123
原创 WatchService = Inotify + poll
why poll not epoll. because epoll hashigher overhead
2021-04-09 10:08:39 301
原创 BlockIO & Non-BlockIO AsynchronousIO & synchronousIO
先讲一下阻塞和非阻塞IO吧。java的IO接口中只有 SelectableChannel 定义了configureBlocking方法,这个方法的实现在AbstractSelectableChannel这个类中,而这个类的子类只有一些TCP相关实现()(图1)。会发现没有FileChannel从下图(图二)中也可以发现FileChannel没有实现AbstractSelectableChannel为什么 FileChannel不是先非阻塞IO 呢?可以参考https://www.r.
2021-03-31 22:06:42 147
转载 jvm:ObjectMonitor源码
synchronized的使用 synchronized关键字是Java中解决并发问题的一种常用方法,也是最简单的一种方法,其作用有三个:(1)互斥性:确保线程互斥的访问同步代码(2)可见性:保证共享变量的修改能够及时可见(3)有序性:有效解决重排序问题,其用法也有三个: 修饰实例方法修饰静态方法修饰代码块 修饰实例方法 public class Thread1 implements Runn...
2020-11-26 14:32:40 389
转载 How Java volatile prevent instruction reordering
Two roles voliate keywords1, to ensure the visibility of variables: when a modified volatile keyword variable is modified when a thread, other threads can instantly get the results after revision. When a thread writes data to be modified volatile keywor
2020-11-26 09:24:44 143
原创 stack guard page for java
jvm 在创建thread的时候会create_stack_guard_pages()来保护我们的线程栈不能超过指定的大小,如果不对栈做限制的话,一旦其超过了为其分配的大小后,将会覆盖后面内存的数据将会产生意想不到的结果,所以jvm使用了stack_guard_pages来做限制。看图吧:...
2020-10-31 10:49:26 573
原创 如何在JVM内存中确认class文件的常量池?
常量池的描述在java虚拟机规范的4.4节(jvms8)中有很详细的描述,这里就不再描述常量池是什么?其在class文件中是如何表示的?。今天我们主要是看看 hotspotVM 中,如何在内存中查看常量池内容。我们以java.io.FileInputStream.java为例看看它的在hotspotVM中的常量池内容是什么。首先我们通过javap 看看class文件中常量池的表示:然后使用HSDB来看看hotspotVM中的相关内容通过HSDB 我们在hotspotVM内存.
2020-08-20 09:29:46 210
原创 Integer == int 和 Integer == Integer 的区别
首先来写一段代码Integer a = null; Integer b = 3; boolean r1 = a == 24; boolean r2 = a == b;执行结果是:boolean r1 = a == 24;将会产生运行时异常。boolean r2 = a == b; r2 为false为什么呢?我们看看编译代码(javac 前端编译器):从编译代码中我们可以看到一个Integer和一个 int比较时 javac编译器
2020-08-20 09:23:17 410
原创 如何调试hospotVM查找死锁
说明:这篇文章并不会详细说明hospotVM查找死锁的算法,只是介绍一种如何了解hospotVM查找死锁的方法。(授人以鱼不如授人以渔)。毕竟每个人的理解层次不一样。环境:先来写一个死锁public class Test { public static void main(String[] a) { final Object o1 = new Object(); final Object o2 = new Object();
2020-06-06 10:51:47 234
原创 -XX:+UseCompressedOops 与 -XX:-UseCompressedOops
开启(-XX:+UseCompressedOops) 可以压缩指针。 关闭(-XX:-UseCompressedOops) 可以关闭压缩指针。1:关闭(-XX:-UseCompressedOops) 可以关闭压缩指针,对象头16字节(klass pointer 8字节)reference 8字节2:开启(-XX:+UseCompressedOops) 可以压缩指针对象头12...
2020-04-20 21:59:11 8371
转载 Code Tools: jol
http://openjdk.java.net/projects/code-tools/jol/JOL(Java Object Layout) is the tiny toolbox to analyze object layout schemes in JVMs. These tools are using Unsafe, JVMTI, and Serviceability Agent (...
2020-04-20 15:08:27 253
转载 HotSpot设计原理与实现:一、初识HotSpot
一、HotSpot内核模块组成和功能框架1、HotSpot内核模块图(1)Prims模块:(2)Service模块:(3)Runtime模块:二、虚拟机生命周期(JVM初始化过程)1、虚拟机生命周期时序图1:Lancher JVM启动器 Lancher是用于启动JVM和应用程序的工具,HotSpot中提供两种Lancher类型:...
2019-12-10 20:32:25 728
原创 使用jvisualvm定位Full GC频繁的问题
今天性能测试的时候出现一个问题,接口响应时间太长达到了2s。使用JvisualVM定位问题。1:先打开JvisualVM2:找到对应的应用进程(如果需要定位远程应用环境需要远程连接远程)并双击,然后进入Monitor看看CPU和堆内存是否正常,观察发现CPU正常,但是堆内存GC频繁。然后进入 Visual GC查看,发现堆内存Full GC非常频繁,并且Full GC Old区回收的内...
2019-08-13 16:43:40 2719
原创 JvisualVM分分析CPU波动较大的问题
今天遇到一个问题,在压力测试的时候CPU波动很大。采用JvisualVM工具进行分析。1:先打开JvisualVM2:找到对应的应用进程并双击,然后进入Sampler,在CPU波动的时候点击CPU对CPU进行抽样。注意线上环境千万不要使用Sampler右边的Profiler.3:抽样进行一段时间后(建议3分钟左右就行了,时间越长生成的snapshot越大),点击”stop”,然...
2019-08-13 16:41:48 1600
原创 gitlab+jenkins安装配置
1:首先在jenkins上面安装插件 包括gitlab 和maven的插件2:配置Global Tool Configuration 主要是配置maven git 和jdk3:配置 configure system先在gitlab的某个用户上面新建一个API TOKEN然后添加凭据如果你想把jenkins打成的包通过ssh上传到某个服务器上那么你可以配置一个...
2019-06-06 15:10:50 332
转载 Google分布式系统三大论文(三)MapReduce: Simplified Data Processing on Large Clusters
原文地址:https://blog.csdn.net/u010359965/article/details/49795213摘要MapReduce是一个编程模型和一个处理和生成大数据集的相关实现。用户指定一个map函数处理一个key-value对来生成一组中间key-value对;指定一个reduce函数合并所有和同一中间key值相联系的中间value值。许多现实世界中的任务以这个模型展现,...
2019-03-25 16:00:40 742
转载 Google分布式系统三大论文(二)Bigtable: A Distributed Storage System for Structured Data
原文地址:https://blog.csdn.net/u010359965/article/details/49795133摘要Bigtable是一个管理结构化数据的分布式存储系统,它被设计用来处理海量数据:分布在数千台通用服务器上的PB级的数据。Google的很多项目将数据存储在Bigtable中,包括Web索引、Google Earth、Google Finance。这些应用对Bigta...
2019-03-25 15:59:33 553
转载 Google 分布式系统三大论文(一)The Google File System
原文地址:https://blog.csdn.net/u010359965/article/details/49795047The Google File System中文版摘要我们设计并实现了Google文件系统,一个面向分布式数据密集型应用的、可伸缩的分布式文件系统。虽然运行在廉价的日用硬件设备上,但是它依然了提供容错功能,为大量客户机提供了很高的总体性能。虽然与很多之前的分布...
2019-03-25 15:57:22 2029
原创 Hadoop集群环境搭建
一:置主机以下配置基于centOS71:修改主机的hostname为master修改 /etc/hostname 文件的内容为 master2: 修改网络配置1:将虚拟机的网路设置为NAT连接:2:进入系统后输入命令“vi /etc/sysconfig/network-scripts/ifcfg-ens33” (可能你的系统配置网络的文件名不叫ifcfg-ens33你可以进...
2019-03-23 23:06:07 161
原创 RocketMQ消费\生产消息的过程
这几天在看RocketMQ的知识,跟踪了下源码,弄清楚了MQ生产和消费消息的流程,这里记录下MQ消费消息的过程。1:RebalanceService线程构造PullRequest并将request放入pullRequestQueue,而PullRequest的具体信息来源于topicSubscribeInfoTable2:PullRequest放入pullRequestQueue后...
2019-03-14 12:28:07 2367
原创 集群的概念
以前经常听别人说部署集群的话至少需要3台机器,因为会存在选主的情况。但是有些项目的集群又不需3台可能两台就够了。这是为什么呢?RocketMQ的broker集群为什么可以只有两台节点?答:其实集群分不同的种类,具体的场景不同可能对集群节点数要求不同。比如RocketMQ的集群,你可以只部署两台broker,因为RocketMQ的集群中两个broker节点是对等的,并且两个节点之间不需要任何...
2019-03-13 22:54:26 2424
转载 redis的三种集群方式
原文地址:https://www.cnblogs.com/51life/p/10233340.htmlredis有三种集群方式:主从复制,哨兵模式和集群。1.主从复制主从复制原理:从服务器连接主服务器,发送SYNC命令; 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令; 主服务器BGSAVE执行完后,向所有从服务器发...
2019-03-13 22:08:48 694
转载 Java Socket重要参数讲解
原文地址:http://www.cnblogs.com/ggjucheng/archive/2012/01/06/2314679.htmlSocket参数定义在public interface SocketOptions中TCP_NODELAYSO_BINDADDRSO_REUSEADDRSO_LINGERSO_TIMEOUTSO_SNDBUF/SO_RCVBUFSO_KEEP...
2019-03-07 14:54:06 779
原创 如何处理GC日志文件过大的情况
Handling large log files produced by long running Java Applicationshttps://bugs.java.com/bugdatabase/view_bug.do?bug_id=6941923This RFE addresses the a problem faced by long running (one or mo...
2019-03-06 15:29:53 3359
转载 Minor GC和Full GC触发条件
原文地址:https://blog.csdn.net/shi2huang/article/details/80067608在复制原文作者内容前先对Full GC条件做一个补充。执行jmap histo命令也可能会出发Full GC(Heap Inspection Initiated GC)。以及Dump堆内存也会发生GC下图的GC日志有一次Full GC,GC原因是Heap Inspe...
2019-02-20 17:04:45 14359
原创 使用NMT分析你的java进程到底用了多少内存?
我们分析java程序性能的时候可能会关注我们的进程到底用了多少内存?哪些地方分别用了多少内存呢?jdk提供了一个jcmd的命令工具可以让我们很容易地查询java进程的Native内存使用。(关于Native内存是什么读者可以参考:https://www.ibm.com/developerworks/library/j-nativememory-linux/index.html)NMT介绍可...
2019-01-17 16:14:39 2092
原创 debug jdk的前端编译器javac
javac主要的功能是将.java文件编译成.class文件,在这个过程中包含3个主要的处理分别为,解析与填充符号表,注解处理,分析与生成字节码。今天主要介绍如何在eclipse中debug javac的源码。:1:首先我们需要下载javac的源码,我这里下载的是openJdk8u:http://hg.openjdk.java.net/jdk8u/jdk8u/langtools/2:源...
2019-01-13 13:45:34 466
转载 How to Handle Java Finalization's Memory-Retention Issues
原文地址:http://www.devx.com/Java/Article/30192Finalization allows you to perform postmortem cleanup on Java objects, but it can delay the reclamation of resources, even if you do not use it explicitly....
2019-01-11 15:28:56 198
转载 JVM各种内存溢出是否产生dump
原文地址:https://blog.csdn.net/stevendbaguo/article/details/51366181对于java的内存溢出,如果配置-XX:+HeapDumpOnOutOfMemoryError,很明确的知道堆内存溢出时会生成dump文件。但永久代内存溢出不明确是否会生成,今天来做一个实验:永久代内存溢出,有dump文件。JVM的参数是-XX:PermSize=...
2019-01-10 22:05:14 739
转载 Efficient data transfer through zero copy
原文地址:https://developer.ibm.com/articles/j-zerocopy/Many Web applications serve a significant amount of static content, which amounts to reading data off of a disk and writing the exact same data bac...
2019-01-09 17:23:40 198
转载 A recap of native memory
原文地址:https://www.ibm.com/developerworks/library/j-nativememory-linux/index.htmlThe Java heap, where every Java object is allocated, is the area of memory you're most intimately connected with when w...
2019-01-09 17:22:25 751
空空如也
websocket 连接 HTTP状态码 500
2017-01-14
TA创建的收藏夹 TA关注的收藏夹
TA关注的人