当前位置: 首页 > news >正文

福州网站制作公司营销南山优化网站建设案例

福州网站制作公司营销,南山优化网站建设案例,唐山市建设网站,福州网站建设制作Java和C语言的一个重要区别就是Java中我们无法直接操作一块内存区域#xff0c;不能像C中那样可以自己申请内存和释放内存。Java中的Unsafe类为我们提供了类似C手动管理内存的能力。 Unsafe类#xff0c;全限定名是sun.misc.Unsafe#xff0c;从名字中我们可以看出来这个类对…Java和C语言的一个重要区别就是Java中我们无法直接操作一块内存区域不能像C中那样可以自己申请内存和释放内存。Java中的Unsafe类为我们提供了类似C手动管理内存的能力。 Unsafe类全限定名是sun.misc.Unsafe从名字中我们可以看出来这个类对普通程序员来说是“危险”的一般应用开发者不会用到这个类。 Unsafe类是final的不允许继承。且构造函数是private的: public final class Unsafe {private static final Unsafe theUnsafe;public static final int INVALID_FIELD_OFFSET -1;private static native void registerNatives();// 构造函数是private的不允许外部实例化private Unsafe() {}... } 因此我们无法在外部对Unsafe进行实例化。 获取Unsafe Unsafe无法实例化那么怎么获取Unsafe呢答案就是通过反射来获取Unsafe public Unsafe getUnsafe() throws IllegalAccessException {Field unsafeField Unsafe.class.getDeclaredFields()[0];unsafeField.setAccessible(true);Unsafe unsafe (Unsafe) unsafeField.get(null);return unsafe; } 主要功能 Unsafe的功能如下图 普通读写 通过Unsafe可以读写一个类的属性即使这个属性是私有的也可以对这个属性进行读写。 读写一个Object属性的相关方法 public native int getInt(Object var1, long var2);public native void putInt(Object var1, long var2, int var4); getInt用于从对象的指定偏移地址处读取一个int。putInt用于在对象指定偏移地址处写入一个int。其他的primitive type也有对应的方法。 Unsafe还可以直接在一个地址上读写 public native byte getByte(long var1);public native void putByte(long var1, byte var3); getByte用于从指定内存地址处开始读取一个byte。putByte用于从指定内存地址写入一个byte。其他的primitive type也有对应的方法。 volatile读写 普通的读写无法保证可见性和有序性而volatile读写就可以保证可见性和有序性。 public native int getIntVolatile(Object var1, long var2);public native void putIntVolatile(Object var1, long var2, int var4); getIntVolatile方法用于在对象指定偏移地址处volatile读取一个int。putIntVolatile方法用于在对象指定偏移地址处volatile写入一个int。 volatile读写相对普通读写是更加昂贵的因为需要保证可见性和有序性而与volatile写入相比putOrderedXX写入代价相对较低putOrderedXX写入不保证可见性但是保证有序性所谓有序性就是保证指令不会重排序。 有序写入 有序写入只保证写入的有序性不保证可见性就是说一个线程的写入不保证其他线程立马可见。 public native void putOrderedObject(Object var1, long var2, Object var4);public native void putOrderedInt(Object var1, long var2, int var4);public native void putOrderedLong(Object var1, long var2, long var4); 直接内存操作 我们都知道Java不可以直接对内存进行操作对象内存的分配和回收都是由JVM帮助我们实现的。但是Unsafe为我们在Java中提供了直接操作内存的能力。 // 分配内存 public native long allocateMemory(long var1); // 重新分配内存 public native long reallocateMemory(long var1, long var3); // 内存初始化 public native void setMemory(long var1, long var3, byte var5); // 内存复制 public native void copyMemory(Object var1, long var2, Object var4, long var5, long var7); // 清除内存 public native void freeMemory(long var1); CAS相关 JUC中大量运用了CAS操作可以说CAS操作是JUC的基础因此CAS操作是非常重要的。Unsafe中提供了int,long和Object的CAS操作 public final native boolean compareAndSwapObject(Object var1, long var2, Object var4, Object var5);public final native boolean compareAndSwapInt(Object var1, long var2, int var4, int var5);public final native boolean compareAndSwapLong(Object var1, long var2, long var4, long var6); 偏移量相关 public native long staticFieldOffset(Field var1);public native long objectFieldOffset(Field var1);public native Object staticFieldBase(Field var1);public native int arrayBaseOffset(Class? var1);public native int arrayIndexScale(Class? var1); staticFieldOffset方法用于获取静态属性Field在对象中的偏移量读写静态属性时必须获取其偏移量。objectFieldOffset方法用于获取非静态属性Field在对象实例中的偏移量读写对象的非静态属性时会用到这个偏移量。staticFieldBase方法用于返回Field所在的对象。arrayBaseOffset方法用于返回数组中第一个元素实际地址相对整个数组对象的地址的偏移量。arrayIndexScale方法用于计算数组中第一个元素所占用的内存空间。 线程调度 public native void unpark(Object var1);public native void park(boolean var1, long var2);public native void monitorEnter(Object var1);public native void monitorExit(Object var1);public native boolean tryMonitorEnter(Object var1); park方法和unpark方法相信看过LockSupport类的都不会陌生这两个方法主要用来挂起和唤醒线程。LockSupport中的park和unpark方法正是通过Unsafe来实现的 // 挂起线程 public static void park(Object blocker) {Thread t Thread.currentThread();setBlocker(t, blocker); // 通过Unsafe的putObject方法设置阻塞阻塞当前线程的blockerUNSAFE.park(false, 0L); // 通过Unsafe的park方法来阻塞当前线程注意此方法将当前线程阻塞后当前线程就不会继续往下走了直到其他线程unpark此线程setBlocker(t, null); // 清除blocker }// 唤醒线程 public static void unpark(Thread thread) {if (thread ! null)UNSAFE.unpark(thread); } monitorEnter方法和monitorExit方法用于加锁Java中的synchronized锁就是通过这两个指令来实现的。 类加载 public native Class? defineClass(String var1, byte[] var2, int var3, int var4, ClassLoader var5, ProtectionDomain var6);public native Class? defineAnonymousClass(Class? var1, byte[] var2, Object[] var3);public native Object allocateInstance(Class? var1) throws InstantiationException;public native boolean shouldBeInitialized(Class? var1);public native void ensureClassInitialized(Class? var1); defineClass方法定义一个类用于动态地创建类。 defineAnonymousClass用于动态的创建一个匿名内部类。 allocateInstance方法用于创建一个类的实例但是不会调用这个实例的构造方法如果这个类还未被初始化则初始化这个类。 shouldBeInitialized方法用于判断是否需要初始化一个类。 ensureClassInitialized方法用于保证已经初始化过一个类。 内存屏障 public native void loadFence();public native void storeFence();public native void fullFence(); loadFence保证在这个屏障之前的所有读操作都已经完成。 storeFence保证在这个屏障之前的所有写操作都已经完成。 fullFence保证在这个屏障之前的所有读写操作都已经完成。
http://www.zqtcl.cn/news/905214/

相关文章:

  • 外贸优秀网站廊坊seo建站
  • 站长工具seo综合查询5g网站建设整改落实情况
  • 网站建设方案 流程wordpress客户案例
  • 网站被收录的过程如何创造属于自己的软件
  • 做神马网站优化快速排国外乡村建设网站
  • 东莞网站优化服务公司天河做网站开发
  • ui在线设计网站滁州 来安县建设局网站
  • 做印尼购物网站如何发货wordpress怎么换中文
  • 深圳方维网站建设公司企业网站推广方式和策略
  • 沙洋县住房和城乡建设局网站单页网站下载
  • 江宁区住房建设局网站建设工程扣分查询网站
  • wordpress火车采集优化算法分类
  • 厦门做网站公司有哪些有什么好的加盟店项目
  • wap网站开发技术怎么做消费信贷网站
  • 公司网站开发外包公司深圳网站建设sz886
  • 中英文网站建设需要懂英语吗电气网站设计
  • 双语网站用什么程序做新网站如何被网站收录
  • 怎么做视频平台网站想开个小说网站怎么做
  • 网站安全监测预警平台建设成效阐述网络营销策略的内容
  • 网站上的qq如何做悬浮沧州做网站的公司
  • 电子商务网站系统规划报告移动商城 网站建设方法方式
  • 网站建设架构选型引擎seo优
  • 什么电脑做网站前段用网站建设工作人员有哪些职责
  • 网站建设技巧网站建设 总结
  • 有站点网络营销平台搜一下百度
  • 沈阳网站建设找德泰诺wordpress 访客计数器
  • 专业网站建设价格分析企业展示型网站建设方案
  • 东丽做网站公司帮做网站的公司
  • 网站的icon图标做多大验证wordpress
  • html制作音乐网站代码已经买了域名怎么做网站