首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Deep learning进阶路

    8-2 图的存储结构

    8-2 图的存储结构 1.邻接矩阵(顺序存储结构) 图结构的元素之间虽然具有“多对多”的关系,但是同样可以采用顺序存储,即使用数组有效地存储图。

    77830发布于 2019-07-02
  • 来自专栏mysql

    hhdb数据库介绍(8-2)

    单机部署属于管理平台中的功能,在使用前需要先安装好管理平台。安装步骤说明请参照集群部署功能管理平台部署说明。

    29010编辑于 2025-03-10
  • 来自专栏Sun

    Java性能分析

    背景 最近参与开发的java项目存在比较严重的性能问题,前端访问经常需要很长时间才能获得回包,为了定位系统中的热点区域,需要对系统进行profile,然后针对性的优化。 Instrumentation是通过Instrument技术在待分析的class中插入监控字节码,能做复杂的分析,如函数调用次数等。Sampling是定时采集每个线程栈中的调用链,对原应用影响最小。 3.2 启动远程服务 创建文件App.java: public class App { public static void main(String[] args) { { e.printStackTrace(); } } } 编译:javac App.java 执行方式:java -agentpath:/home/jemuel/jprofiler11.0.1/bin/linux-x64/libjprofilerti.so=port=8849 App 3.3

    1.1K20发布于 2019-12-03
  • 来自专栏FunTester

    Java 性能分析

    这时,Java 分析器便成为您的秘密武器,帮助解决这些性能挑战。 做出明智的决策:探索各种分析器的优势和不足,帮助你选择最符合项目需求的工具,做出科学决策。 Java 性能分析起源 尽管 Java 应用程序通常非常健壮,但性能下降仍然是一个常见的问题。 为了识别和解决这些瓶颈,Java 分析器应运而生,为开发者提供了强有力的工具和方法。 什么是 Java 性能分析 Java 分析是监控和分析 Java 应用程序运行时行为的关键过程。 利用 Java 分析器提供的洞察,我们可以优化代码结构,提高应用程序的性能和稳定性。 以下是一些常见的 Java 性能问题及其分析思路。 内存泄漏 内存泄漏是指 Java 程序在运行过程中,创建的对象未能被垃圾回收机制(GC)回收,导致内存占用不断增加。

    48600编辑于 2025-01-23
  • 来自专栏后端Coder

    java进阶|java队列源码分析

    今天我要分享的是java里面比较常见的数据结构队列的源码分析,队列,先进先出模式,即FIFO的特点,日常生活中队列的特点也随处可见,超市购物排队,餐厅排队买饭等一系列都满足了队列的先进先出的特点,java 这里要分析的是下面这个队列,所以这里暂时下贴出一点这个类的继承结构,便于自己分析。 三,一般写到这里就会去分析数据结构的基本方法,添加方法add了,这里当然是顺势而为分析一下add方法了。 何况java作为一门高级语言呢,顺势而为成就了这个语言令人喜欢的特点吧。 四,队列既然有入队,想必就会想到队列出队的方法,即poll方法,接下来我们继续看下队列出队的方法时间吧。 十,到这里就结束了自己对队列的源码分析,其实你会发现我这里没有对队列的每一个方法进行分析,其实都差不多,这里起到一个开头作用就可以了,下面的每个分析方法都差不多。

    96020发布于 2020-05-26
  • 来自专栏用户1337634的专栏

    Java内存泄露分析

    Java虽然有垃圾回收机制,但是也可能会因为对象被无意引用,导致没有释放,占用了太多内存。 不知道是哪个变量造成了内存泄露 生成内存镜像 命令:jmap -dump:format=b,file=heapdump.hprof [pid] 描述:生成堆转储快照dump文件 dump内存镜像,我们就可以使用内存分析工具 (MAT),查看各个类的引用链路,找到内存泄漏点 使用MAT分析 一般使用Dominator Tree,因为一般对象的内存占用大小只是该对象本身的大小,不包含其引用其他对象的大小,Dominator Tree可以计算对象以及被其引用的其他对象的大小,这样就可以找到最终导致内存泄露的点 从MAT分析结果来看: ch.qos.logback.classic.LoggerContext父类ContextBase 然后分析出是某些日志太大导致的,减少对应日志信息就可以了

    2.1K10发布于 2021-11-24
  • 来自专栏二进制文集

    Java LinkedHashMap 源码分析

    分析 内部结构 LinkedHashMap继承自HashMap,内部额外维护了一个Entry的双向链表,用于记录访问和插入顺序。

    60830发布于 2019-02-25
  • 来自专栏程序员奇点

    Java String 源码分析

    Java String 源码分析 定义 Java 8 中 String 源码 public final class String implements java.io.Serializable String 是final 类型不能被继承,同时实现了 java.io.serializable Comparable charSequence 三个接口。 static final long serialVersionUID = -6849794470754667710L; String 实现了 Serializable 接口,支持序列化和反序列化支持,Java 使用字节数组来构建 String Java 中,String 实例中报错一个字符数组,char[] 字符数组时以 unicode 码来存储的。 Java 8 中采用的是 Array.copy 方法,避免了这个问题 public String(char value[], int offset, int count) { if (offset

    53510发布于 2020-10-23
  • 来自专栏全栈程序员必看

    计算机中为什么会用补码运算符号_负数求补码

    下面我们具体的分析一下: 原码: 原码的特点就是编码简单直观,与真值转换非常方便。既然原码这么好,那为什么不选他而选补码呢? 这里我们经常举的一个例子就是钟表,其模数为12,即每到12就重新从0开始,数学上叫取模或求余(mod),java、C#和C++里用%表示求余操作。 有两种方法:一把表逆时针拨两个小时;二是把表顺时针拨10个小时,即 8-2=6 (8+10)%12=6 也就是说在此模数系统里面有 8-2=8+10 这是因为2跟10对模数12互为补数。 因此有一下结论:在模数系统中,A-B或A+(-B)等价于A+[B补],即 8-2/8+(-2)=8+10 我们把10叫做-2在模12下的补码。

    1K20编辑于 2022-09-29
  • 来自专栏算法与编程之美

    Java|Lexer分析报告

    前言 Lexer词法分析器,是将原始字符串转换为有意义的标记的过程。 一、词法标记类型定义 通过定义types变量,定义了普通字符串、运算符、关键字、逻辑运算符等类型。 二、词法分析规则 详情参考rules.js分析报告。 三、实现任务 1.将匹配的元素,结尾的空白字符替换为空。 2.将整段字符串拆分成不同的标记类型,并存在到新的数组中。 四、运行流程图 ?

    1.3K30发布于 2020-06-10
  • 来自专栏二进制文集

    Java Stream 源码分析

    前言 Java 8 的 Stream 使得代码更加简洁易懂,本篇文章深入分析 Java Stream 的工作原理,并探讨 Steam 的性能问题。 [2020-12-03-033401.png] 操作叠加 Stream 的基础用法就不再叙述了,这里从一段代码开始,分析 Stream 的工作原理。 java.util.stream.StreamSupport#stream(java.util.Spliterator<T>, boolean) public static <T> Stream<T> [2020-12-03-070838.png] 对于第二个元素“java”,predicate.test 会返回 true(字符串“java”的长度<=4),则会进入 map 的 accept 方法。 分析如下: 对于基本类型Stream串行迭代的性能开销明显高于外部迭代开销(两倍); Stream并行迭代的性能比串行迭代和外部迭代都好。

    3.4K53发布于 2020-12-03
  • 来自专栏TopCoder

    java lambda 原理分析

    Java lambda 一眼看上去有点像匿名内部类的简化形式,但是二者确有着本质的差别。 <init>":()V #2 = Class #37 // java/lang/String #3 = String Java的lambda表达式实现上也就借助于invokedynamic命令。 引导方法是有固定的参数,并且返回值是java.lang.invoke.CallSite对象,这个代表真正要执行的目标方法调用。 上图是在lambda代码中打断点时的调用栈信息,如果在这里的lambda中打印当前所属class,就是Application类,也印证了前面分析的lambda代码会生成一个private方法。

    91530发布于 2019-11-06
  • 来自专栏风中追风

    Java内存模型分析

    举个简单的例子,比如下面的这段代码: [java] view plain copy int i = 1 ;   [java] view plain copy i = i + 1;   执行这句代码的线程首先会去物理主存中把 由上面的分析可知,当线程1执行 i =100这句时,会先把i的初始值加载到CPU1的高速缓存中,然后赋值为100,那么在CPU1的高速缓存当中i的值变为100了,却没有立即写入到主存当中。 下面我们来看一下Java内存模型, Java虚拟机规范中视图定义一种Java内存模型来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致 的内存访问效果,再次之前,主流程序语言 ----摘自 深入理解Java虚拟机;  Java内存模型规定所有的变量都是存在主存当中(类似于前面说的物理内存),每个线程都有自己的工作内存(类似于前面的高速缓存)。 我们来看看Java的内存模型是怎样对 原子性、可见性以及有序性提供保证的?

    78590发布于 2018-05-11
  • 来自专栏代码生涯

    Java程序 内存分析

    这一次就记录一下,在生产中真实的 JVM 内存调优(内存分析)经历吧。 一、原由 晚上领导电话过来说:服务怎么打不开了,是不是挂了? (第一时间查看日志? OK啊,问题解决,买台更好的服务器就行了(哈哈) 二、问题排查 一般 Java 应用 cpu 过高基本上是因为 程序计算比较密集 程序死循环 程序逻请求堵塞 IO读写太高 但是 Java 项目很大,功能很多 这时候就需要内存分析了 1. 查看各个进程占用 cpu 情况 在Linux终端输入:top -d 1 当前命令可以查看各个进程占用 cpu 情况,一般排名第一位肯定是 Java 进程,当然也可能存在多个 Java 进程 观察 top 问题排查结束,在运行 Java 程序时。 三、结尾 当然真正的 JVM 调优远比这要复杂高深,这次只是浅浅的接触了 JVM 内存、 jstack,但这次经历很有收获。 新年快乐,愿你我一直在前行!

    52530编辑于 2023-10-21
  • 来自专栏全栈程序员必看

    Java AbstractMethodError 原因分析

    背景 AbstractMethodError异常对于我来说还是比较不常遇见的,最近有幸遇到,并侥幸的解决了,在这里把此种场景剖析一番,进入正题,下面是AbstractMethodError在Java的异常机制中所处的位置 2.通过API文档里面的解释大致得出的结论就是说A依赖于B,但是执行的时候发现类B的定义发生了改变,这个改变是针对编译的时候发生了改变,也就是说将类A由java文件编译成.class文件的时候用到了类B 至此,AbstractMethodError发生的底层原因也了解的差不多了,再往深层的话就是java的编译机制,以及java代码的执行检查这些更靠近虚拟机的东东,那些我也没什么研究,暂且不表。 版本的BImpl,那么就会抛出AbstractMethodError,这个异常抛出以后会把运行时真正找到的那个方法签名给打印出来的,异常信息会入下: Exception in Thread XXXXX java.lang.AbstractMehodError

    1.1K30编辑于 2022-09-05
  • 来自专栏全栈程序员必看

    Java volatile源码分析

    而针对volatile修饰的变量给java虚拟机特殊的约定,线程对volatile 变量的修改会立刻被其他线程所感知,即不会出现数据脏读,从而保证数据的一个可见性。 volatile 特性分析 特性一:可见性 前面介绍Java内存模型的时候,我们说过可见性是指当一个线程修改了共享变量的值,其他线程立即感知到这种变化。 特性二、禁止重排序 前面介绍Java 内存模型的时候,我们说过java中的有序性可以概况为一句话:如果在本线程中观察,所有的操作都是有序的;如果在另外一个线程中观察,所有的操作都是无序的。

    34250编辑于 2022-09-09
  • 来自专栏wannshan(javaer,RPC)

    java ThreadLocal 分析by 源码

    可以,通过inheritableThreadLocals属性子线程可以继承父线程的local变量,具体通过InheritableThreadLocal

    48530发布于 2021-03-18
  • 来自专栏二进制文集

    Java Stream 源码分析

    前言 Java 8 的 Stream 使得代码更加简洁易懂,本篇文章深入分析 Java Stream 的工作原理,并探讨 Steam 的性能问题。 image 操作叠加 Stream 的基础用法就不再叙述了,这里从一段代码开始,分析 Stream 的工作原理。 image 对于第二个元素“java”,predicate.test 会返回 true(字符串“java”的长度<=4),则会进入 map 的 accept 方法。 ? 分析如下: 对于基本类型Stream串行迭代的性能开销明显高于外部迭代开销(两倍); Stream并行迭代的性能比串行迭代和外部迭代都好。 image 分析,对于复杂的归约操作: Stream API的性能普遍好于外部手动迭代,并行Stream效果更佳; 再来考察并行度对并行效果的影响,测试结果如下: ?

    57241发布于 2020-12-08
  • 来自专栏大数据学习笔记

    Java HashSet源码分析

    1、源码分析 废话不多说,直接上代码,相关解释请参见注释 package java.util; /** * * @param <E> the type of elements maintained HashMap * @since 1.2 */ public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable s) throws java.io.IOException { // Write out any hidden serialization magic HashSet instance from a stream (that is, * deserialize it). */ private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { // Read in any hidden serialization

    34410编辑于 2022-05-06
  • 来自专栏Reck Zhang

    Java 11 - 逃逸分析

    逃逸分析 定义 逃逸分析是一种可以有效减少Java中同步负载和内存堆分配压力的跨函数全局数据流分析方法. 通过逃逸分析, 编译器能够分析出一个新的对象的引用范围, 从而决定是否要将这个对象分配在堆上. 逃逸分析是指分析指针动态范围的方法, 当变量或者对象在方法中被分配后, 其指针有可能被返回或者被返回引用. 那么我们把其指针被其他过程或者线程所引用的现象叫做指针(引用)的逃逸. 这个实现是基于”封闭世界”的前提, 即所有可能被执行的方法在做逃逸分析前都已经得知, 并且, 程序的实际运行不会改变他们之间的调用关系. 但是在Java实际运行的时候, 这样的假设并不成立. 因为Java中的很多特性, 比如动态类加载, 调用本地函数, 反射程序调用都将打破”封闭世界”的约定.

    80240发布于 2021-08-11
领券