- 博客(18)
- 收藏
- 关注
原创 python spyne gevent 服务出现 WAiT TIME 如何解决
在使用 Spyne 和 Gevent 框架搭建 Web 服务时,由于 Gevent 是基于协程的异步框架,在处理请求时可能会因为业务逻辑的复杂度、输入数据量过大等原因导致协程的执行时间过长,从而产生 WAIT TIME 的情况。调整 Gevent 配置:可以通过调整 Gevent 配置来优化协程池的大小,从而使请求能够获得更多的资源,提高请求响应速度。需要注意的是,调整 Gevent 参数时需要根据实际情况进行调整,避免出现因协程池过大而导致服务器资源耗尽或反而降低服务性能的问题。
2023-04-25 08:58:55
174
原创 从架构设计的角度,可以将 MyBatis 分为哪几层?每层都有哪些主要模块?
数据处理层,主要是用来做参数映射、sql解析、sql执行、结果映射等处理,可以理解为请求到达,完成一次数据库操作的流程。基础支撑层,主要是用来做连接管理、事务管理、配置加载、缓存管理等最基础组件,为上层提供最基础的支撑。mybatis架构自下而上分为基础支撑层、数据处理层、API接口层这三层。API接口层,主要对外提供API,提供诸如数据的增删改查、获取配置等接口。
2023-04-21 08:54:57
173
原创 Java的分层编译
预编译将字节码文件(.class)预编译为本地机器码,生成.o文件(目标文件)。这样程序运行时就可以直接加载和执行.o文件,而不需要再次编译,提高加载速度。避免重复编译如果源代码没有修改,在再次运行程序时,无需重新编译所有类,只需加载已经预编译的.o文件即可。这可以避免重复的编译消耗,提高效率。分阶段编译将所有的编译工作分成多个阶段完成,而不是一次性全部编译。前面的阶段可以生成中间表示,供后续阶段使用。这减少每次编译的工作量,使编译更快。及时编译尽量推迟编译时机,在真正需要时再编译。程序运行
2023-04-20 09:03:40
222
原创 IT的默认门限
这个门限值的设置会影响JIT优化触发的时间点,进而影响程序的整体性能。如果设置得太高,优化延迟太长,无法发挥效果。如果设置得太低,会提前触发JIT,增加编译消耗,也无法获得最佳性能。当一个方法的调用次数达到这个门限值时,JIT编译器会对该方法的字节码进行优化,转换为机器代码,这样该方法在后续调用中就可以直接执行机器码,获得更高的性能。
2023-04-20 09:01:17
87
原创 内存 TLAB 机制
为了提高效率,Java虚拟机使用了TLAB机制,即为每个线程分配一个私有的TLAB内存区域,线程在该区域内进行内存分配,避免了多线程竞争堆内存的情况,减少了内存分配的锁竞争和同步开销。当一个线程的TLAB内存区域使用完毕后,Java虚拟机会重新为该线程分配一个新的TLAB内存区域,而之前使用过的TLAB内存区域则会被释放,以便其他线程使用。TLAB机制可以有效地减少内存分配时的竞争和同步开销,提高内存分配的效率。同时,由于TLAB内存区域是连续的,可以减少内存碎片的产生,提高内存使用效率。
2023-04-20 08:40:40
188
原创 java JIT 优化机制
JIT(Just-In-Time)编译器是一种动态编译器,它可以在程序运行时将字节码转换为机器码,从而提高程序的执行效率。JIT优化是指在JIT编译过程中,对程序进行优化,以便生成更高效的机器代码。JIT编译器会通过分析程序的执行路径和数据流,识别出热点代码(即频繁执行的代码),并针对这些代码进行优化。然而,JIT编译器的优化过程需要消耗一定的时间和内存,因此在某些情况下,JIT编译器可能会影响程序的启动时间和内存占用。常量折叠:将常量表达式计算出结果后,替换为结果值,减少计算的开销。
2023-04-20 08:37:45
229
原创 javajava @Slf4j 获取不同的 logback.xml 日志处理器,写到不同的目录, 高频日志单独处理并压缩
此外,为了避免日志重复输出,可以设置 additivity 属性为 false,表示只将日志信息记录到当前 logger 的 appender 中,不再将其传递到父 logger。在实际应用中,如果需要将不同的日志信息分别记录到不同的处理器中,可以通过这种方式来实现。值得注意的是,如果没有在代码中指定使用哪个 Logger,日志将默认记录在 Lombok 自动生成的 Logger 中。如果需要将不同的日志信息写入不同的文件,并分别进行不同的处理可以通过配置不同的日志处理器来实现。
2023-04-13 11:17:22
712
原创 java 优化机制 GC 和 JIT
因为 JIT 编译器只在程序运行时编译需要优化的代码,所以需要在运行时使用 JIT 编译器的线程被称为 JIT 线程。JIT 线程通常运行在应用程序线程之外,但是它们可以并行地执行,以加速程序的运行速度。在执行垃圾回收时,运行时系统会暂停所有应用程序线程。为了减少暂停的时间,Java 虚拟机可以使用并行垃圾回收策略,意味着多个 GC 线程可以并行运行,并尽可能地减少应用程序停顿的时间。在 Java 虚拟机中,并行垃圾回收策略和 JIT 线程的作用是让多个任务并行执行,以获得更好的性能提升。
2023-04-13 11:12:49
189
原创 java 优化机制 GC 和 JIT
因为 JIT 编译器只在程序运行时编译需要优化的代码,所以需要在运行时使用 JIT 编译器的线程被称为 JIT 线程。JIT 线程通常运行在应用程序线程之外,但是它们可以并行地执行,以加速程序的运行速度。在执行垃圾回收时,运行时系统会暂停所有应用程序线程。为了减少暂停的时间,Java 虚拟机可以使用并行垃圾回收策略,意味着多个 GC 线程可以并行运行,并尽可能地减少应用程序停顿的时间。在 Java 虚拟机中,并行垃圾回收策略和 JIT 线程的作用是让多个任务并行执行,以获得更好的性能提升。
2023-04-12 20:20:24
191
原创 java JIN 机制
具体来说,可以在本地代码中定义一个与 Java 代码中 native 方法名称和参数列表相符合的函数,然后在 Java 代码中使用 System.loadLibrary() 方法来加载本地库,进而实现 Java 代码与本地代码的交互调用。这时候就需要 JNI 技术来实现 Java 与原生代码之间的调用。需要注意的是,在使用 JNI 技术时,需要涉及到一些底层的编程知识,例如内存管理、数据类型的转换等,同时也需要考虑到调用Java代码会有一些安全的问题,因此 JNI 的使用并不是非常适合初学者。
2023-04-11 20:43:54
258
原创 简明扼要 java中的锁优化
偏斜锁是指当一个线程访问同步块并获取锁时,会在对象头中的Mark Word中记录锁偏向的线程ID,下一次该线程再次获取该锁时,就可以直接获取,这样可以省去大量的同步操作,从而提高性能。偏斜锁适用于只有一个线程访问同步块的情况。总之,偏斜锁、轻量级锁、重量级锁都是为了提高锁的性能而进行的优化。偏斜锁适用于只有一个线程访问同步块的情况,轻量级锁适用于锁竞争不激烈的情况,重量级锁适用于锁竞争激烈的情况。偏斜锁、轻量级锁、重量级锁则是Java中的三种锁优化技术,它们都是为了提高锁的性能而进行的优化。
2023-04-10 13:23:38
57
原创 解决ABA问题
例如,当一个线程T1想要修改一个对象时,它首先需要读取对象引用和时间戳,如果发现引用和时间戳都没有发生变化,则可以进行修改操作。如果在这个过程中,另一个线程T2修改了对象,并且又回到了原来的值,那么线程T1就会被误认为是没有发生变化的,这就是ABA问题。AtomicStampedReference类是Java提供的一个原子类,它可以帮助我们解决ABA问题。它将一个对象的引用和一个时间戳绑定在一起,当对象发生变化时,时间戳也会相应地更新。线程2成功修改了对象的值为3,再修改回2。
2023-04-10 11:02:06
287
1
原创 java JVM cas 操作
只有在共享变量 V 的值等于期望值 A 的情况下,才会将共享变量 V 的值修改为新值 B。此时,需要重新获取最新的共享变量 V 的值,然后再尝试 CAS 操作,直到操作成功为止。通俗地讲,CAS 用于在多线程环境下对共享变量的值进行原子操作,即多个线程同时访问同一个共享变量,但只有一个线程能修改这个变量的值,并且这个操作是原子的,不会被其他线程打断。JVM 的 CAS,即 Compare And Swap,是一种并发编程中常用的保证原子性的技术。
2023-04-10 10:17:06
102
原创 简单说明 AQS 同步机制
AQS(AbstractQueuedSynchronizer)是 Java 并发包中实现同步器(synchronizer)框架的基础,是基于线程的阻塞与唤醒等底层操作的封装,可以用于构建各种高级的同步器(如 ReentrantLock 和 Semaphore 等)。除了基本锁的实现,AQS 还支持 Condition 条件队列的实现,可以支持线程的等待和通知操作,为高级同步器(如 ReentrantLock 和 Semaphore 等)的实现提供了支持。
2023-04-06 20:17:59
68
原创 简明扼要的解释 unsafe机制
Unsafe 的使用需要非常小心,因为它可能会导致一些不可预测的问题,包括内存泄漏、线程安全问题等。因此,对于普通应用程序来说,应该避免使用 Unsafe。Java 中的 Unsafe 是一个非常强大的机制,它可以绕过 Java 语言的一些限制,直接操作内存,访问私有方法和字段等。Unsafe 可以被用于实现一些高性能的组件和框架,例如 Netty、Hadoop、Cassandra 等等。
2023-04-06 20:10:02
108
1
原创 redissonClient.getMapCache 和 getMapCache 区别
而在使用getMap方法获取的Map实例中,则没有提供带自动过期的缓存功能,需要用户自行设置过期时间。以性能为例,RMapCache是基于Redis的zset实现的自动过期缓存,而RMap则是Redis的Hash结构。因此,在大数据量和高并发的情况下,RMapCache的性能远低于RMap,而在对于一些小集合的常规操作中,则两者性能差异不大。注:需要注意的是,由于Redis Hash数据类型本身不支持自动过期,故通过getMap获取的普通Map对象也不能直接设置单个Hash的缓存过期时间。
2023-04-03 13:31:54
2524
原创 java 的注解和python 装饰器的区别
在装饰器函数内部,可以对被装饰的函数或类进行一些操作,比如添加一些新的功能或信息。当使用装饰器修饰一个函数或类时,实际上是将被修饰的函数或类作为参数传入装饰器函数,并将其返回值作为新的函数或类。Java注解和Python装饰器都可以看作是一种元编程的方式,它们的目的都是在不改变原有代码的情况下,为程序添加一些额外的功能或信息。Java注解是在编译期间被处理的,而Python装饰器是在运行时被处理的。因此,虽然Java注解和Python装饰器都可以达到类似的效果,但它们的实现方式是不同的。
2023-04-03 11:21:28
433
1
原创 pycharm debug raise NameError(breakpoint_type) NameError: jupyter
raise NameError(breakpoint_type)NameError: jupyter解决是思路是关闭 ![在这里插入图片描述](https://img-blog.csdnimg.cn/6230ffc21d8e45a9b1226e9369027255.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6auY5qCh5peF5ri46IGU55uf,siz...
2021-08-26 23:34:02
644
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人