Unsafe例子】的更多相关文章

Java和C++语言的一个重要区别就是Java中我们无法直接操作一块内存区域,不能像C++中那样可以自己申请内存和释放内存.Java中的Unsafe类为我们提供了类似C++手动管理内存的能力,不建议使用该类 (1)Unsafe对int,long ,Object的CAS操作 public class UnsafeTest { public static void main(String[] args) throws Exception { ExecutorService service = Exe…
CSharpGL(25)一个用raycast实现体渲染VolumeRender的例子 本文涉及的VolumeRendering相关的C#代码是从(https://github.com/toolchainX/Volume_Rendering_Using_GLSL)的C++代码转换来的. 效果图 下载 CSharpGL已在GitHub开源,欢迎对OpenGL有兴趣的同学加入(https://github.com/bitzhuwei/CSharpGL) 实现思路 raycast 用一个3D纹理存储整个…
今天无意中发现C#这种完全面向对象的高级语言中也可以用不安全的指针类型,即要用到unsafe关键字.在公共语言运行库 (CLR) 中,不安全代码是指无法验证的代码.C# 中的不安全代码不一定是危险的,只是其安全性无法由 CLR 进行验证的代码.因此,CLR 只对在完全受信任的程序集中的不安全代码执行操作.如果使用不安全代码,由你负责确保你的代码不会引起安全风险或指针错误.unsafe 关键字表示不安全上下文,该上下文是任何涉及指针的操作所必需的.可以在类型或成员的声明中使用 unsafe 修饰符…
是<实战Java高并发程序设计>第4章的几点. 如果你对技术有着不折不挠的追求,应该还会特别在意incrementAndGet() 方法中compareAndSet()的实现.现在,就让我们更进一步看一下它把! public final boolean compareAndSet(int expect, int update){ returnunsafe.compareAndSwapInt(this, valueOffset, expect, update); } 在这里,我们看到一个特殊的变…
C#+无unsafe的非托管大数组(large unmanaged array in c# without 'unsafe' keyword) +BIT祝威+悄悄在此留下版了个权的信息说: C#申请一个大数组(Use a large array in C#) 在C#里,有时候我需要能够申请一个很大的数组.使用之.然后立即释放其占用的内存. Sometimes I need to allocate a large array, use it and then release its memory…
CSharpGL(1)从最简单的例子开始使用CSharpGL 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo,更适合入门参考. 为了尽可能提升渲染效率,CSharpGL是面向Shader的,因此稍有难度. 主要内容 在VS2013中使用设计好的控件GLCanvas. 借助GLCanvas,用legacy OpenGL绘制一个四面体. 借助GLCanvas,用modern OpenGL绘制一个四面体. +B…
今天在C代码中使用gets()时提示“warning: this program uses gets(), which is unsafe.”,然后这个程序还能运行,无聊的我开始查阅资料,为啥gets()会unsafe呢. 通过Google查阅前辈的问答,原来是这么回事. gets()这个函数只有一个参数,那就是字符缓冲区的指针,并没有指定该缓冲区的长度也就是大小.当你输入一个很长很长的字符串的时候,gets ()函数会把每一个字符都存入到栈(statck)中,因此当字符串很大的时候就会导致程序…
以下sun.misc.Unsafe源码和demo基于jdk1.7: 最近在看J.U.C里的源码,很多都用到了sun.misc.Unsafe这个类,一知半解,看起来总感觉有点不尽兴,所以打算对Unsafe的源码及使用做个分析: 另外,网上找了份c++的源代码natUnsafe.cc(可惜比较老,Copyright (C) 2006, 2007年的,没找到新的),也就是sun.misc.Unsafe的C++实现,跟Unsafe类中的native方法对照起来看更加容易理解: Unsafe类的作用 可以…
Unsafe 简单讲一下这个类.Java无法直接访问底层操作系统,而是通过本地(native)方法来访问.不过尽管如此,JVM还是开了一个后门,JDK中有一个类Unsafe,它提供了硬件级别的原子操作. 这个类尽管里面的方法都是public的,但是并没有办法使用它们,JDK API文档也没有提供任何关于这个类的方法的解释.总而言之,对于Unsafe类的使用都是受限制的,只有授信的代码才能获得该类的实例,当然JDK库里面的类是可以随意使用的. 从第一行的描述可以了解到Unsafe提供了硬件级别的操…
综述 sun.misc.Unsafe至少从2004年Java1.4开始就存在于Java中了.在Java9中,为了提高JVM的可维护性,Unsafe和许多其他的东西一起都被作为内部使用类隐藏起来了.但是究竟是什么取代Unsafe不得而知,个人推测会有不止一样来取代它,那么问题来了,到底为什么要使用Unsafe? 做一些Java语言不允许但是又十分有用的事情 很多低级语言中可用的技巧在Java中都是不被允许的.对大多数开发者而言这是件好事,既可以拯救你,也可以拯救你的同事们.同样也使得导入开源代码更…
原文:This function or variable may be unsafe,他大姨妈 错误提示: [Error]'fopen' This function or variable may be unsafe 微软的警告,主要是那些都是C库的函数,很多函数内部是不进行参数检测的(包括越界类的),微软担心使用这些会造成内存异常,所以就改写了一下同样功能的函数,只不过进行了参数的检测,使用这些新的就可以了.不用特意记,每个函数在给出警告时都会告诉你相应的安全函数,注意一下警告信息就可以了,使…
c#在默认情况下生成的都是安全代码,即进行了代码托管(.NET的CLR机制好处之一是,进行代码托管,适时的释放内存,程序员便不必考虑资源的回收问题),而此时,指针不能出现在安全代码的编译条件下. 一.unsafe 如果因需要想在c#中使用指针,那么unsafe便是一个通道(当然在使用前,需在项目属性的生成选项中,选择“允许不安全代码”). example 1: a) 创建项目,项目属性->生成->选择“允许不安全代码” b) 编写代码 using System; using System.Co…
转自csdn:http://blog.csdn.net/robingaoxb/article/details/6199508 msdn里讲到: “在 C# 中很少需要使用指针,但仍有一些需要使用的情况.例如,在下列情况中使用允许采用指针的不安全上下文是正确的: 处理磁盘上的现有结构 涉及内部包含指针的结构的高级 COM 或平台调用方案 性能关键代码 对于第一和第二点,主要是调win32的api.但是“性能关键代码”这个非常重要.我来举例引申一下. 我们都知道像飞信这种大型IM服务端,难免会面临大…
在阅读AtomicInteger的源码时,看到了这个类:sum.msic.Unsafe,之前从没见过.所以花了点时间google了一下. Unsafe的源码:http://www.docjar.com/html/api/sun/misc/Unsafe.java.html Unsafe源码中的描述如下:  写道 A collection of methods for performing low-level, unsafe operations. Although the class and al…
托管代码 (managed code):由公共语言运行库环境(而不是直接由操作系统)执行的代码.托管代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收.运行库类型检查和安全支持等.这些服务帮助提供独立于平台和语言的.统一的托管代码应用程序行为.非托管代码(Unmanaged Code):在公共语言运行库环境的外部,由操作系统直接执行的代码.非托管代码必须提供自己的垃圾回收.类型检查.安全支持等服务:它与托管代码不同,后者从公共语言运行库中获得这些服务. Unsafe的代码介于这两者之间,它…
http://www.cnblogs.com/mickole/articles/3757278.html Java不能直接访问操作系统底层,而是通过本地方法来访问.Unsafe类提供了硬件级别的原子操作,主要提供了以下功能: 1.通过Unsafe类可以分配内存,可以释放内存: 类中提供的3个本地方法allocateMemory.reallocateMemory.freeMemory分别用于分配内存,扩充内存和释放内存,与C语言中的3个方法对应. public native long alloca…
1.Unsafe类介绍 Unsafe类是在sun.misc包下,不属于Java标准.但是很多Java的基础类库,包括一些被广泛使用的高性能开发库都是基于Unsafe类开发的,比如Netty.Hadoop.Kafka等. 使用Unsafe可用来直接访问系统内存资源并进行自主管理,Unsafe类在提升Java运行效率,增强Java语言底层操作能力方面起了很大的作用. Unsafe可认为是Java中留下的后门,提供了一些低层次操作,如直接内存访问.线程调度等. 官方并不建议使用Unsafe. 下面是使…
原文地址 译者:许巧辉 校对:梁海舰 Java是一门安全的编程语言,防止程序员犯很多愚蠢的错误,它们大部分是基于内存管理的.但是,有一种方式可以有意的执行一些不安全.容易犯错的操作,那就是使用Unsafe类. 本文是sun.misc.Unsafe公共API的简要概述,及其一些有趣的用法. Unsafe 实例 在使用Unsafe之前,我们需要创建Unsafe对象的实例.这并不像Unsafe unsafe = new Unsafe()这么简单,因为Unsafe的构造器是私有的.它也有一个静态的get…
Golang的unsafe包是一个很特殊的包. 为什么这样说呢? 本文将详细解释. 来自go语言官方文档的警告 unsafe包的文档是这么说的: 导入unsafe的软件包可能不可移植,并且不受Go 1兼容性指南的保护. Go 1 兼容性指南这么说: 导入unsafe软件包可能取决于Go实现的内部属性. 我们保留对可能导致程序崩溃的实现进行更改的权利. 当然包名称暗示unsafe包是不安全的. 但这个包有多危险呢? 让我们先看看unsafe包的作用. Unsafe包的作用 直到现在(Go1.7),…
在项目中也经常可以见到原子类型(AtomicXXX)的使用,而且AtomicXXX常用来代替基本类型或者基本类型的包装类型,因为其可以在不加同步锁的情况下保证线程安全(只对于原子操作). 下面以AtomicInteger为例子研究原子类型的线程安全性. 0. AtomicInteger 原子类型的基本使用 其实在  AtomicInteger  里面将一些复合操作合并为原子操作,比如常见的"先改值,后取值"."若相等则替换"."获取到原值并赋予新值&quo…
unsafe.Pointer其实就是类似C的void *,在golang中是用于各种指针相互转换的桥梁.uintptr是golang的内置类型,是能存储指针的整型,uintptr的底层类型是int,它和unsafe.Pointer可相互转换.uintptr和unsafe.Pointer的区别就是:unsafe.Pointer只是单纯的通用指针类型,用于转换不同类型指针,它不可以参与指针运算:而uintptr是用于指针运算的,GC 不把 uintptr 当指针,也就是说 uintptr 无法持有对…
Go语言是个强类型语言.Go语言要求所有统一表达式的不同的类型之间必须做显示的类型转换.而作为Go语言鼻祖的C语言是可以直接做隐式的类型转换的. 也就是说Go对类型要求严格,不同类型不能进行赋值操作.指针也是具有明确类型的对象,进行严格类型检查.不过Go语言也有例外在一些特殊类型存在隐式转换. unsafe.Pointer 这个类型比较重要,它是实现定位欲读写的内存的基础.官方文档对该类型有四个重要描述: (1)任何类型的指针都可以被转化为Pointer (2)Pointer可以被转化为任何类型…
error C4996: 'sprintf': This function or variable may be unsafe.   error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. Vi…
unsafe内容介绍 type ArbitraryType int type Pointer *ArbitraryType func Sizeof(x ArbitraryType) uintptr func Offsetof(x ArbitraryType) uintptr func Alignof(x ArbitraryType) uintptr unsafe包只有两个类型,三个函数,但是功能很强大. unsafe 库让 golang 可以像C语言一样操作计算机内存,但这并不是golang推荐…
chronicle项目:https://github.com/peter-lawrey/Java-Chronicle 这个项目是利用mmap机制来实现高效的读写数据,号称每秒写入5到20百万条数据. 作者有个测试,写入1百万条log用时0.234秒,用java自带的logger,用时7.347秒. 在看chronicle的源代码,发现一个牛B的利用Unsafe来直接读写内存,从而提高效率的例子. 详细见这个类:https://github.com/peter-lawrey/Java-Chroni…
前提 参考资料: Java魔法类:sun.misc.Unsafe 在openjdk8下看Unsafe源码 Unsafe介绍 在Oracle的Jdk8无法获取到sun.misc包的源码,想看此包的源码可以直接下载openjdk,包的路径是: openjdk-8u40-src-b25-10_feb_2015\openjdk\jdk\src\share\classes\sun\misc. 当然,不同的openjdk版本的根目录(这里是openjdk-8u40-src-b25-10_feb_2015)不…
Java Magic. Part 4: sun.misc.Unsafe @(Base)[JDK, Unsafe, magic, 黑魔法] 转载请写明:原文地址 系列文章: -Java Magic. Part 1: java.net.URL -Java Magic. Part 2: 0xCAFEBABE -Java Magic. Part 3: Finally -Java Magic. Part 4: sun.misc.Unsafe 英文原文 Java是一个safe programming lan…
The unsafe Package in Golang Golang的unsafe包是一个很特殊的包. 为什么这样说呢? 本文将详细解释. 来自go语言官方文档的警告 unsafe包的文档是这么说的: 导入unsafe的软件包可能不可移植,并且不受Go 1兼容性指南的保护. Go 1 兼容性指南这么说: 导入unsafe软件包可能取决于Go实现的内部属性. 我们保留对可能导致程序崩溃的实现进行更改的权利. 当然包名称暗示unsafe包是不安全的. 但这个包有多危险呢? 让我们先看看unsafe…
一.Unsafe类的源码分析 JDK的rt.jar包中的Unsafe类提供了硬件级别的原子操作,Unsafe里面的方法都是native方法,通过使用JNI的方式来访问本地C++实现库. rt.jar 中 Unsafe 类主要函数讲解, Unsafe 类提供了硬件级别的原子操作,可以安全的直接操作内存变量,其在 JUC 源码中被广泛的使用,了解其原理为研究 JUC 源码奠定了基础. 首先我们先了解Unsafe类中主要方法的使用,如下: 1.long objectFieldOffset(Field…
1.为何要有unsafe 也许是为了实现CLR类型安全的目标吧,默认情况下,C#没有提供指针的使用算法,但是有些情况下也可能需要指针这样直接访问内存的东西(虽然目前我还没有用过),但是有时候程序员非常清楚程序的运行状况,需要使用指针直接访问内存以便于提高性能或者调试.监控程序运行的内存的使用状况,以便于采取相应的措施.还有一些情况是当我们需要调用外面DLL中的函数又不能使用DllImport 时,也需要指针来传递这些函数. 2.unsafe 的定义     MSDN:unsafe 关键字表示不安…