使用Byte Buddy开发Java agent功能

Java系列 3年前 (2021-09-21) 浏览: 2638 评论: 0

虽然Java初学者很快就学会了键入public static void main来运行他们的应用程序,但即使是经验丰富的开发人员也常常不知道JVM对Java进程的另外两个入口点的支持:premain和agentmain方法。这两种方法都允许所谓的Java代理在驻留在自己的jar文件中时对现有Java程序作出贡献,即使主应用程序没有显式链接。这样,就可以完全独立于承载Java代理的应用程序开发、发布

日志框架Log4j与Logback的区别

Java系列 2年前 (2021-12-16) 浏览: 2611 评论: 0

Log4j与Logback之间的差异 Log4j被定义为基于java的应用程序,带有日志功能,它是用于将消息记录到不同输出的java框架,有助于定位问题。Logback被定义为log4j的继承者,log4j也是用于在任何基于java的应用程序中记录消息的java框架。一般来说,log4j和logback是java的日志框架,用于在运行时修改配置,也可以在不同的目的地进行输出。log4j有不同的版本

如何正确设置jdk环境变量JAVA_HOME?

Java系列 3年前 (2021-02-10) 浏览: 2529 评论: 0

在演示如何在所有操作系统上设置JAVA_HOME之前,让我们先解释一下什么是环境变量?JAVA_HOME环境变量的用途是什么? 作为先决条件,您需要在您的计算机上安装JDK或JRE。有关详细信息,请参阅如何安装JDK一文 您可能知道,几乎所有的java代码都有一个变量来存储一个值,这个值在程序中被多次使用。环境变量类似于final变量(在java中),但它是针对您的环境的。因此,JAVA_HOME

Java并行流parallelStream的处理速度竟然stream慢!

Java系列 3年前 (2021-05-14) 浏览: 2510 评论: 0

奇怪的是,为什么使用“parallelStream()”的代码有时比使用“stream()”的代码慢。 实际上,使用parallelStream()有几个问题。 最重要的是,parallelStream()总是需要执行比按顺序执行更多的实际工作[即stream()]。 在多个线程之间分割工作并合并或组合结果会带来很大的开销。像将短字符串转换为小写字符串这样的用例非常小,与并行拆分开销相比,它们可以

线程池ForkJoinPool简介

Java系列 4年前 (2020-03-01) 浏览: 2498 评论: 0

ForkJoinPool线程池最大的特点就是分叉(fork)合并(join),将一个大任务拆分成多个小任务,并行执行,再结合工作窃取模式(worksteal)提高整体的执行效率,充分利用CPU资源。 一. 应用场景 ForkJoinPool使用分治算法,用相对少的线程处理大量的任务,将一个大任务一拆为二,以此类推,每个子任务再拆分一半,直到达到最细颗粒度为止,即设置的阈值停止拆分,然后从最底层的任

Java Stream之Parallel Streams编程指南

Java系列 3年前 (2021-07-28) 浏览: 2343 评论: 0

并行与并发程序设计 到目前为止,我们在CS2030中编写的程序是按顺序运行的。这意味着在任何时候,处理器上运行的程序只有一条指令。 什么是并发性? 一个单核处理器一次只能执行一条指令——这意味着一次只能运行一个进程(或者更确切地说,一个应用程序)。然而,当我们使用电脑时,感觉就像我们在同时运行多个进程。幕后的操作系统实际上是在不同进程之间切换,给用户一种同时运行的错觉。 我们可以编写一个程序,使其

java找不到或无法加载主类

Java系列 3年前 (2021-02-24) 浏览: 2306 评论: 0

刚开始做Java开发的人遇到的一个常见问题是,他们的程序无法运行并显示错误消息:找不到或加载主类 Could not find or load main class。。。 这意味着什么,是什么原因造成的,我们应该如何修复它呢? java <class name>命令语法 首先,您需要了解使用java(或javaw)命令启动程序的正确方法。 正常的语法是这样的: java [ <o

如何在Windows和Linux上为Java设置classpath

Java系列 3年前 (2021-02-06) 浏览: 2306 评论: 0

  Java中的classpath是什么? Java中的classpath类路径是指向目录的路径或目录列表,类加载器用它在Java程序中查找和加载类。可以使用不区分大小写的Classpath环境变量、-cp或-Classpath命令行选项或中的Classpath属性来指定Classpath在JAR文件中的manifest.mf文件。在这篇Java文章中,我们将学习什么是Java中的cla

在Windows中设置JAVA_HOME变量

Java系列 3年前 (2021-05-01) 浏览: 2060 评论: 0

要在Windows上手动安装Confluence,需要设置一个环境变量,将Confluence指向Java安装目录。 在大多数情况下,您应该设置JRE_HOME环境变量,但是如果没有设置,Confluence将使用JAVA_HOME。 设置JAVA_HOME变量 要设置JRE_HOME或JAVA_HOME变量: 1. 找到Java安装目录 如果您在安装过程中没有更改路径,它将类似于C:\Progr

如何在eclipse中配置tomcat

Java系列 3年前 (2021-02-19) 浏览: 1803 评论: 0

在本文中,我们将了解如何在eclipse中配置Tomcat,以及如何配置Tomcat来部署web应用程序。 Tomcat简介 Tomcat实际上由许多组件组成,包括tomcatjsp引擎和其他连接器,但是主要组件是Catalina,它提供了servlet规范的实现。当启动Tomcat服务器时,实际上是Catalina在启动。变量CATALINA_HOME是存储CATALINA文件位置的配置属性。

使用JCTools实现Java并发程序

Java系列 3年前 (2021-03-17) 浏览: 1799 评论: 0

  概述 在本文中,我们将介绍JCTools(Java并发工具)库。 简单地说,这提供了许多适用于多线程环境的实用数据结构。 非阻塞算法 传统上,在可变共享状态下工作的多线程代码使用锁来确保数据一致性和发布(一个线程所做的更改对另一个线程可见)。 这种方法有许多缺点: 线程在试图获取锁时可能会被阻塞,在另一个线程的操作完成之前不会取得任何进展—这有效地防止了并行性 锁争用越重,JVM处理

Jackson的snake-case反序列化为骆驼命名法

Java系列 2年前 (2022-07-06) 浏览: 1789 评论: 0

JSON对象中的字段名可以有多种格式。当我们想将它们加载到POJO中时,我们可能会遇到一个问题,即Java代码中的属性名称与JSON中的命名约定不匹配。 在这篇文章中,我们将看到如何使用Jackson将snake-case JSON反序列化为camel-case字段。 安装Jackson 让我们从将Jackson依赖项添加到pom.xml文件: <dependency> <gro

Java9模块化指南

Java系列 3年前 (2021-01-23) 浏览: 1778 评论: 0

1. 概述 Java9在包之上引入了一个新的抽象级别,正式称为Java平台模块系统(JPMS),简称“模块”。 在本文中,我们将介绍新系统并讨论其各个方面。 2. 什么是模块? 首先,我们需要先了解模块是什么,然后才能了解如何使用它们。 模块是一组密切相关的包和资源以及一个新的模块描述符文件。 换句话说,它是一个“Java包的包”的抽象,允许我们使代码更加可重用。 2.1 Packages 模块中

java8 stream和Parallel Streams使用注意事项

Java系列 3年前 (2021-04-13) 浏览: 1763 评论: 0

当java8的第一个早期access版本出现时,最重要的演变似乎是lambdas。这一点现在正在改变,许多开发人员现在似乎认为流是最有价值的Java8特性。这是因为他们相信通过改变程序中的一个单词(用parallelStream替换stream),他们将使这些程序并行工作。许多Java8的传道者已经展示了这方面的惊人例子。这有什么问题吗?不,不是什么。很多事情: 并行运行可能是一个好处,也可能不是

新版JDK中的垃圾收集器:Shenandoah、ZGC和改进的G1

Java系列 3年前 (2021-09-27) 浏览: 1754 评论: 0

ZGC、Shenandoah和G1中的改进使开发人员比以往任何时候都更接近无暂停时间。 在过去的六个月中,一些最令人兴奋的发展是JDK垃圾收集器(GC)的不断发展,首先,我们将介绍Shenandoah,它是一种低延迟GC,主要与应用程序同时运行;我们还将介绍作为jdk12部分的ZGC(java11在引入并发GC时的低延迟)的最新改进;我们将详细解释Java9 Start作为G1默认GC的两个改进。

Java递归函数讲解

Java系列 4年前 (2020-10-01) 浏览: 1715 评论: 0

Java中的递归 什么是递归? 函数直接或间接调用自身的过程称为递归,相应的函数称为递归函数。使用递归算法,某些问题可以很容易地解决。这类问题的例子有Hanoi的Towers(TOH)、序/前序/后序树遍历、图的DFS等。 递归中的基本条件是什么? 在递归程序中,给出了基本情况的解,大问题的解用小问题表示。 int fact(int n) { if (n < = 1) // base cas

提高正则表达式性能的几点建议

Java系列 2年前 (2022-08-22) 浏览: 1586 评论: 0

当正则表达式通常与大型数据集相匹配时它们的编写必须高效。 为什么正则表达式效率很重要? 虽然写得好的正则表达式可能非常有效,但写得不好的正则表达可能需要很长时间才能运行,并且会显著降低系统的速度。编写一个需要数小时或数天才能完成的正则表达式是很有可能的,甚至可以编写一个在宇宙生命周期内无法完成的正则表达,因为它是针对中等大小的字符串运行的。 在实践中已经做了一些改进,使其比以前的版本更能抵抗低效的

Java踩坑记系列之BigDecimal

Java系列 4年前 (2020-02-09) 浏览: 1505 评论: 0

在java.math包中提供了对大数字的操作类,用于进行高精确计算,如BigInteger,BigDecimal类。而平常我们开发中使用最多的float和double只能适用于一般的科学和工程计算,如果要在比较精确的计算方面如货币,那么使用float和double会相应的丢失精度,因此用于精密计算大数字的类BigDecimal就必不可少了。所以BigDecimal适合商业计算场景,用来对超过16位

使用Byte Buddy生成运行时代码

Java系列 3年前 (2021-09-11) 浏览: 1422 评论: 0

Java平台的一个经常被忽略的特性是在JVM的解释器或即时(JIT)编译器执行程序之前修改程序字节码的能力。虽然此功能由工具使用,例如进行对象关系映射的探查器和库,但应用程序开发人员很少使用它。这代表了未开发的潜力,因为在运行时生成代码允许轻松实现跨领域问题,如日志记录或安全性,有时以模拟或编写性能数据收集代理的形式更改第三方库的行为。 目前有三个主要的库用于生成字节码: ASM cglib Ja

一文带你彻底了解Java异步编程

Java系列 4年前 (2020-10-13) 浏览: 1387 评论: 0

随着RxJava、Reactor等异步框架的流行,异步编程受到了越来越多的关注,尤其是在IO密集型的业务场景中,相比传统的同步开发模式,异步编程的优势越来越明显。 那到底什么是异步编程?异步化真正的好处又是什么?如何选择适合自己团队的异步技术?在实施异步框架落地的过程中有哪些需要注意的地方? 本文从以下几个方面结合真实项目异步改造经验对异步编程进行分析,希望能给大家一些客观认识: 使用RxJava

登录

忘记密码 ?

切换登录

注册