JRuby的性能优化(update)
性能 优化 update
2023-09-11 14:16:04 时间
越来越觉的JRuby是个很有前途的项目,结合Ruby的性感语法和java极其丰富的类库,况且有团队持续不断地修正bug、改进性能,这样的玩意完全有成为“少男杀手”的潜质。JRuby wiki上列出了性能优化的四条建议:
1、调优编译器,JRuby早就弃暗投明跟随XRuby走上了编译这条牛B的道路,将Ruby Script编译成字节码,因此这个环节是断断不能忽略的。
两种编译方式:
AOT模式:直接生成class文件,脱了Ruby这层皮,咱就是人见人“爱”的java了。
JIT模式:充分利用成熟的jit技术,咱不全脱,朦胧美才是真的美。默认从0.9.9版本开始就是开启的,关闭的话(要我说还不如全脱)
jruby -J-Djruby.jit.enabled=false
2、关闭ObjectSpace
ObjectSpace是Ruby用来操作所有运行时对象的模块,这个功能相当牛x。这个的实现在c ruby里是比较容易的,但是对于JRuby代价就比较昂贵了,其实就大部分情况下你基本用不到这个东东,那么最好就是关闭它,JRuby提供了
jruby -J-Djruby.objectspace.enabled=false 选项来关闭它。
3、开启线程池
我们知道,在c ruby中的线程是绿色的轻量级线程,因此运行时就动不动开个百来十个“线程”跑一跑充下款爷;然而在JRuby中,线程的实现那可是实打实的本地线程(也就是Ruby线程与java线程一比一),你这么动不动上百个线程那不慢才怪了。因此JRuby提供了线程池选项,运行时尽可能地满足你的要求开线程,但是当短命的Ruby线程重复创建的时候,这些线程将被复用,这在大多数情况下能提高性能表现,特别是在每次调用都启动一个线程的情况下。不过具体效果还是要测试的实际数据说话。
jruby -J-Djruby.thread.pooling=true
4、使用Java "server"模式虚拟机,地球淫都知道
jruby -J-server myscript.rb
Go RWMutex:高并发读多写少场景下的性能优化利器 RWMutex 是 Go 中的一种读写锁实现,它通过读锁允许多个 goroutine 同时执行读操作,当有写操作请求时,必须等待所有读操作执行结束后才能执行写操作。 RWMutex 的设计采用了 Write-preferring 方案,即如果有写操作在等待执行,新来的读操作将会被阻塞,以避免写操作的饥饿问题。 根据 RWMutex 的特性,它适用于 读多写少的高并发场景,可以实现并发安全的读操作,从而减少在锁竞争中的等待时间。 虽然它能够给程序带来了性能的提升,然而,如果使用不当,就可能会导致 panic 或死锁等问题。因此,在使用 RWMutex 时需要特别小心,并避免错误的用法。
C++服务性能优化的道与术-道篇:google benchmark的安装与使用 如果你实现一个公共的工具函数,有多种实现方式,你怎么测试性能呢?是循环多少次,然后打印一下起止时间,计算耗时吗?这样当然没问题。但是每次都类似的需求,都会写很多冗余的代码来进行耗时统计,另外也缺乏灵活性。有没有方便的方式来测试呢?有,Google家的benchmark性能测试框架。
查询性能优化之Runtime Filter 在分析类查询中,大表之间(或大表与小表)的 Join 通常使用 Hash Join 实现,这通常也是查询的性能瓶颈之一,因此如何优化join的查询性能也是计算引擎的重点。
1、调优编译器,JRuby早就弃暗投明跟随XRuby走上了编译这条牛B的道路,将Ruby Script编译成字节码,因此这个环节是断断不能忽略的。
两种编译方式:
AOT模式:直接生成class文件,脱了Ruby这层皮,咱就是人见人“爱”的java了。
JIT模式:充分利用成熟的jit技术,咱不全脱,朦胧美才是真的美。默认从0.9.9版本开始就是开启的,关闭的话(要我说还不如全脱)
jruby -J-Djruby.jit.enabled=false
2、关闭ObjectSpace
ObjectSpace是Ruby用来操作所有运行时对象的模块,这个功能相当牛x。这个的实现在c ruby里是比较容易的,但是对于JRuby代价就比较昂贵了,其实就大部分情况下你基本用不到这个东东,那么最好就是关闭它,JRuby提供了
jruby -J-Djruby.objectspace.enabled=false 选项来关闭它。
3、开启线程池
我们知道,在c ruby中的线程是绿色的轻量级线程,因此运行时就动不动开个百来十个“线程”跑一跑充下款爷;然而在JRuby中,线程的实现那可是实打实的本地线程(也就是Ruby线程与java线程一比一),你这么动不动上百个线程那不慢才怪了。因此JRuby提供了线程池选项,运行时尽可能地满足你的要求开线程,但是当短命的Ruby线程重复创建的时候,这些线程将被复用,这在大多数情况下能提高性能表现,特别是在每次调用都启动一个线程的情况下。不过具体效果还是要测试的实际数据说话。
jruby -J-Djruby.thread.pooling=true
4、使用Java "server"模式虚拟机,地球淫都知道
jruby -J-server myscript.rb
5、尽量使用最新的jdk,在我的测试中,jdk6跑jruby是效率最高的。
文章转自庄周梦蝶 ,原文发布时间 2008-01-31
Go RWMutex:高并发读多写少场景下的性能优化利器 RWMutex 是 Go 中的一种读写锁实现,它通过读锁允许多个 goroutine 同时执行读操作,当有写操作请求时,必须等待所有读操作执行结束后才能执行写操作。 RWMutex 的设计采用了 Write-preferring 方案,即如果有写操作在等待执行,新来的读操作将会被阻塞,以避免写操作的饥饿问题。 根据 RWMutex 的特性,它适用于 读多写少的高并发场景,可以实现并发安全的读操作,从而减少在锁竞争中的等待时间。 虽然它能够给程序带来了性能的提升,然而,如果使用不当,就可能会导致 panic 或死锁等问题。因此,在使用 RWMutex 时需要特别小心,并避免错误的用法。
C++服务性能优化的道与术-道篇:google benchmark的安装与使用 如果你实现一个公共的工具函数,有多种实现方式,你怎么测试性能呢?是循环多少次,然后打印一下起止时间,计算耗时吗?这样当然没问题。但是每次都类似的需求,都会写很多冗余的代码来进行耗时统计,另外也缺乏灵活性。有没有方便的方式来测试呢?有,Google家的benchmark性能测试框架。
查询性能优化之Runtime Filter 在分析类查询中,大表之间(或大表与小表)的 Join 通常使用 Hash Join 实现,这通常也是查询的性能瓶颈之一,因此如何优化join的查询性能也是计算引擎的重点。
相关文章
- 总结使用Unity 3D优化游戏运行性能的经验
- 【华为云技术分享】40%性能提升,华为云推出PostgreSQL 12 商用版
- Java Statement和PreparedStatement性能测试(转)
- MySQL性能优化实战
- android性能优化
- 性能优化之Java(Android)代码优化
- MySQL性能优化
- 抓包整理————tcp 三次握手性能优化[十]
- 用Semisynchronous Replication半同步,mk-table-checksum数据同步一致性检查,监控主从同步运行状态的脚本等方式加强SQL性能和数据审核
- PostgreSQL 9.6 内核优化 - sort 性能增强
- android性能优化
- jmeter全面总结-6-jmeter性能数据监控系统 influxdb,grafana
- MySQL性能优化(二)InnoDB之日志文件
- Python 关于运行时间、调用次数及内存使用的性能测试
- Oracle性能优化学习笔记之WHERE子句中的连接顺序
- ATITIT db perf enhs 数据库性能优化 目录 第一章 Cache类1 第一节 查询cache1 第二节 Update cache2 第三节 内存表机制 零时表2 第四节 雾
- Atitit 前端性能提升方案 目录 1. 优化分类2 1.1. ,第一类是页面级别的优化,2 1.2. 第二类则是代码级别的优化,2 1.3. 前端性能优化的七大手段,包括减少请求数量、减小
- 使用 Dynatrace 对 Node.js 应用的性能数据进行分析
- iOS APP性能优化
- Android性能优化之捕获java crash示例解析
- PostgreSQL的性能优化
- 【性能优化】面试官:Java中的对象都是在堆上分配的吗?
- 《Java程序性能优化》之并发优化
- JENKINS持续集成性能测试环境搭建及使用
- FreeWheel基于Go的实践经验漫谈——GC是大坑(关键业务场景不用),web框架尚未统一,和c++性能相比难说
- Android 性能优化 二 TraceView工具的使用
- dpdk性能测试