怎样使set现程变得安全_使不安全变得更加安全

怎样使set现程变得安全

总览

如果直接使用Unsafe,则可能会导致JVM崩溃。 当您访问尚未映射的内存页面并且在Unix上的结果是SIGSEG(如果访问页面0)或SIGBUS(如果您访问另一个未映射的页面)时,会发生这种情况。

使用MethodHandles

用MethodHandle包装不安全的方法是一种可能的解决方案。 您可以将代码添加到“方法句柄”以检查零页面访问。 例如unsigned_ptr <4096。您应将其添加到MethodHandle的原因是它可以使优化检查变得更容易。

缺点是

  • 您必须使用MethodHandles,它会使语法复杂化,并掩盖您的实际工作。
  • 如果你不这样做是行不通的
  • 它不涵盖总线错误,也不涵盖总线错误,因为整个应用程序的映射很复杂,并且可以随时在任何线程中更改。
  • 优化界限检查需要对优化器进行一些工作,这有待证明。

使用信号

如果已经有某种方法可以在硬件中做到这一点,那就可以了。 CPU已检查您尝试访问的页面是否有效,如果该页面不在高速缓存中,它将引发中断。 如果操作系统无法找到/创建此高速缓存未命中的映射,则此中断将变为信号。

如果JVM中已经只有一个信号处理程序,并且确实存在,那就是产生崩溃报告的原因。

如果只有某种方式,中断处理程序可以将错误或异常触发回触发它的代码。 就像Thread.currentThread()。stop(e); (你明白了)

优点

  • 由于CPU已经完成了检查,因此不需要其他工作。
  • 对优化器的最小更改(如果有)。
  • 潜在地适用于从各种来源产生的信号。
  • 使用信号是捕获Java之前的运行时错误的一种成熟/较老的技术方法。

缺点

  • 单一处理可能是一个停下来的操作(目前无法在Java中对其进行基准测试)
  • 即使不是,触发错误时它的成本也可能更高。
  • 您将不得不更改传统上未更改的信号处理程序。 即,有更多的经验来改变优化器。

可能引发的异常

可能会引发新的异常,但是我建议重用现有的异常。

访问页面0 – NullPointerException

访问页面0(不仅仅是访问NULL指针)将触发SIGSEG。 NPE是根据C对NULL指针的访问来命名的,与访问引用相比,使用NPE访问NULL指针可能更明显。 也就是说,由于Java没有指针,它可能被称为NullReferenceException。

无效的访问– IndexOutOfBoundsException

其他候选对象包括BufferUnderflowException(如果您的页面缺少映射区域),BufferOverflowException(如果您的页面没有映射区域)。

这些都是它们的共同点是它们是RuntimeException(s)。 如果引发了一个自定义的,更具描述性的异常,则RuntimeException可能与抛出的现有throwables一致。

结论

使性能最大化的常见技巧是: 不要用Java编写系统已经为您完成的事情。 在Chronicle中,我们使用OS对磁盘执行异步持久化,并且比再次用Java编写持久性持久化更有效,更可靠。 同样,如果重新使用CPU和OS提供的功能,则捕获和处理无效的内存访问将更加高效和健壮。

一般来说,当每个操作系统做不同的事情以支持跨平台兼容性时,您都将重新编写操作系统功能,但是这样做仅需最低要求。 这就是为什么Java没有线程调度程序,并且相对而言,它几乎无法控制线程的运行方式。

虚拟内存处理非常古老且标准,以至于主要平台的工作方式基本相同。

翻译自: https://www.javacodegeeks.com/2014/06/making-unsafe-safer.html

怎样使set现程变得安全

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340776.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux lvm 系统快照,系统运维|在 LVM中 录制逻辑卷快照并恢复(第三部分)

LVM快照是以空间换时间时间的方式制作的lvm卷副本。它只在lvm中工作&#xff0c;并只在源逻辑卷发生改变时占用快照卷的空间。如果源卷的变化达到1GB这么大&#xff0c;快照卷同样也会产生这样大的改变。因而&#xff0c;对于空间有效利用的最佳途径&#xff0c;就是总是进行小…

Spring Annotations我从没有机会使用第2部分:@ConfigurationProperties

几天前&#xff0c;我在检查其他内容时不小心偶然发现了Spring Boot项目中的Spring注释。 我们都知道如何将带有“ Value”的属性值绑定到类&#xff0c;并且我们都知道如果要绑定多个属性&#xff0c;这可能会很麻烦。 Spring Boot可以为您提供帮助。 您可以使用“ Configura…

python语言变量随时声明_2. Go语言五种变量创建的方法

对于只有 Python 语言经验的朋友&#xff0c;也许会不太理解声明这个词&#xff0c;在 Python 中直接拿来就用&#xff0c;也不用声明类型啥的。 Go 语言是静态类型语言&#xff0c;由于编译时&#xff0c;编译器会检查变量的类型&#xff0c;所以要求所有的变量都要有明确的类…

linux netty udp服务端,Netty实现UDP服务端

### 前言在之前的文章我已经讲过了利用Netty实现UDP客户端&#xff0c;大家有兴趣的话&#xff0c;可以参看下面文章&#xff1a;[Netty实现UDP客户端](https://www.jianshu.com/p/5dbc6b3c9d94)今天就让我们来学习下利用Netty实现UDP服务端吧&#xff0c;这里我经过整合封装&a…

会java需要多久能学会python_java好学吗?零基础学java要多久?

java好学吗&#xff1f;零基础学java要多久&#xff1f; 时间&#xff1a;2019-05-21 来源&#xff1a;华清远见 2019年3月&#xff0c;tiOBE 公布了编程语言排行榜&#xff0c;正如官方所说&#xff0c;本月的排名几乎没有任何有趣的变化&#xff0c;排名前十的依然是&…

linux memcached 运行,linux下查看Memcached运行状态

查看Memcached运行状态的命令是&#xff1a;echo stats | nc 127.0.0.1 11211 查看memcached状态的基本命令&#xff0c;通过这个命令可以看到如下信息&#xff1a; STAT pid 22459 进程ID STAT uptime 1027046 服务器运行秒数 STAT time 1273043062 服务器当前unix时间戳 STAT…

jboss架构_检查Red Hat JBoss BRMS部署架构的规则和事件(第二部分)

jboss架构&#xff08;文章来宾与北美红帽公司高级中间件顾问约翰赫洛克 &#xff08; John Hurlocker&#xff09;合着&#xff09; 在这周的技巧中&#xff0c;我们将放慢速度&#xff0c;并仔细研究可能的Red Hat JBoss BRMS部署体系结构。 在谈论部署体系结构时&#xff…

linux 关于休眠得脚本,linux – 如果条件为true,请将cron作业休眠5分钟

你有两个选择来获得这个.通常,cron与前一个作业实例是否仍在运行无关.选项1&#xff1a;在脚本的开头写一个锁文件,并在完成后将其删除.然后在脚本开头检查文件是否存在,如果是,则脚本结束而不做任何事情.例如,这可能是这样的&#xff1a;# if the file exists (-e) end the sc…

TestNG中的参数化– DataProvider和TestNG XML(带有示例)

测试自动化&#xff0c;或所谓的自动化测试&#xff0c;并不像听起来那样容易。 必须考虑所有可能的用户交互的所有排列和组合&#xff0c;并且在此基础上&#xff0c;您将必须创建测试脚本以通过多种浏览器和OS组合来验证Web应用程序。 这就是参数化在Selenium自动化测试中起关…

java与python多态的区别_如果未调用父构造函数(与Java不同),多态性在Python中如何工作? - java...

因此&#xff0c;父类构造函数是在Java中调用的&#xff0c;而在Python中则不是。如果这意味着未创建父对象&#xff0c;那么如何在Python中成功调用def function-这是怎么回事&#xff1f; Python代码 class Parent: def __new__(self): print(f"I am the real parent co…

linux中统计java数量,linux 统计当前目录下文件数

查看当前目录下文件的个数ls -l | grep "^-" | wc -l查看当前目录下文件的个数&#xff0c;包括子目录里的。ls -lR| grep "^-" | wc -l查看某目录下文件夹(目录)的个数&#xff0c;包括子目录里的。ls -lR| grep "^d" | wc -l某目录下以.js结尾…

zbrush 添加纹理贴图_想学习3D游戏模型,3Dmax、MAYA和ZBrush都需要掌握吗?

想从事游戏行业的建模的话&#xff0c;模型和贴图的知识都得学&#xff0c;MAYA和3DMAX只能说是基本要学的&#xff0c;Zbrush能够提升个人价值&#xff0c;之后能给你建好的模型做出好看的贴图&#xff0c;才能算是一个游戏建模方面能干活的合格从业人员。新手入门的话&#x…

linux 连接wifi不稳定,rtl8188ce 无线网不稳定终极解决方案 - 哆啦比猫的技术瞎扯 - Arch Linux · ドラえもん · 实时绘制...

先容我废话据说 realtek 的无线网卡就这个系列问题多多。以前连接不太稳定&#xff0c;但不会频繁掉线就凑活用了。自从不知哪次升级以来&#xff0c;掉线越来越频繁&#xff0c;最后已经发展到 10秒必掉 了&#xff0c;以至于要上网就得拼命到终端里重连网络。网上也有各种解决…

file.getpath_Java中File的getPath(),getCanonicalPath()和getAbsolutePath()之间的区别...

file.getpathFile API在Java中非常重要&#xff0c;因为它使文件系统可以访问Java程序。 尽管Java的文件API丰富&#xff0c;但是使用它们时仍需要了解很多细节。 关于文件路径的常见查询程序员之一是getPath() &#xff0c; getCanonicalPath()和getAbsolutePath()方法之间的区…

为什么python代码运行不了_为什么Python代码能运行但是PyCharm给我画红线?

PyCharm在遇到模块找不到时&#xff0c;会使用红色波浪线提醒开发者。这本来是一个非常好的功能&#xff0c;但却由于另外一个问题&#xff0c;会给一些Python初学者造成困扰。 这一篇文章&#xff0c;我们讲讲工作区导致的这个问题。 首先我们创建一个login.py文件&#xff0c…

linux 在线帮助,linux获取在线帮助

Linux系统的帮助文档非常丰富。帮助手册提供命令的使用说明。比如你若是想了解ls命令的用法&#xff0c;只需运行&#xff1a;$ man ls帮助手册旨在提供基础知识和参考信息&#xff0c;有时会有一些实例和交叉索引&#xff0c;但是基本没有那种教程式的文档。帮助手册会按系统排…

python的计算_python 计算方位角实例(根据两点的坐标计算)

知道两点坐标&#xff0c;怎么计算两点方向的方位角&#xff1f; 答&#xff1a;首先计算坐标增量dx&#xff0c;dy(两个对应坐标分量相减&#xff0c;终点的减始点的)。 若dx,dy中有一个为零时&#xff0c;根据另一个的正负决定方位角&#xff08;0&#xff0c;90&#xff0c;…

linux中samba详解,详解linux系列之samba的安装及配置

上篇博文中我介绍了FTP&#xff0c;今天我们来介绍一下samba实现文件共享。这个比FTP更好点&#xff0c;因为对用户的权限可以通过samba权限和系统权限交叉使用&#xff0c;取最严格的。可以让windows更容易的从linux系统上存取文件&#xff0c;还有samba也可以让linux上面的打…

saml2_向SAML响应中添加自定义声明–(如何为WSO2 Identity Server编写自定义声明处理程序)...

saml2总览 最新版本的WSO2 Identity Server&#xff08;版本5.0.0&#xff09;配备了“应用程序身份验证框架”&#xff0c;该框架提供了很大的灵活性&#xff0c;可以对使用异构协议的各种服务提供商的用户进行身份验证。 它具有几个扩展点&#xff0c;可用于满足企业系统中常…

python做股票分析_利用Python进行股票投资组合分析(调试)

pythonsp500-robo-advisor-edition Python for Financial Analyses 需要的镜像文件和数据--Robo Advisor edition. 小结 "Python for Finance: Robo Advisor Edition" 这一版本的镜像包括Jupyter notebook和Python脚本&#xff0c;以及用pandas通过Jupyter notebook构…