`
haoningabc
  • 浏览: 1465815 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java操作内存

    博客分类:
  • java
阅读更多
How To Write Directly to a Memory Locations In Java

http://robaustin.wikidot.com/how-to-write-to-direct-memory-locations-in-java

If anyone has ever told you, you cannot write directly to memory locations in java, then they are wrong. Well, to be precise, they are half-wrong, you can write to memory locations as long as the memory is control by the JVM.

Although this is possible, I strongly recommend that you don’t do it. Failing to get your code 100% correct will cause the JVM to crash. There maybe cases where you wish to optimize you code and write to memory directly but I would only do this as a last resort.

On the Hotspot JVM, you are able to write and read directly to memory. One of the advantages of this technique is that is very fast, however it comes with no safe guards usually provided by the Java APIs. Its also not document by SUN.

Use the java class sun.misc.Unsafe, some of the methods you may be interested in are :

public native long getAddress(long address);
public native void putAddress(long address, long value);
public native long allocateMemory(long size);
public native long reallocateMemory(long l, long l1);
public native void setMemory(long l, long l1, byte b);
public native void copyMemory(long l, long l1, long l2);
You can't instantiate the class directly as it has a private constructor, so you will have to create an instance like this :

Unsafe unsafe = null;
 
try {
   Field field = sun.misc.Unsafe.class.getDeclaredField("theUnsafe");
   field.setAccessible(true);
   unsafe = (sun.misc.Unsafe) field.get(null);
} catch (Exception e) {
   throw new AssertionError(e);
}
you can then call

import java.lang.reflect.Field;
 
import sun.misc.Unsafe;
 
public class Direct {
 
    public static void main(String... args) {
        Unsafe unsafe = null;
 
        try {
            Field field = sun.misc.Unsafe.class.getDeclaredField("theUnsafe");
            field.setAccessible(true);
            unsafe = (sun.misc.Unsafe) field.get(null);
        } catch (Exception e) {
            throw new AssertionError(e);
        }
 
        long value = 12345;
        byte size = 1;
        long allocateMemory = unsafe.allocateMemory(size);
        unsafe.putAddress(allocateMemory, value);
        long readValue = unsafe.getAddress(allocateMemory);
        System.out.println("read value : " + readValue);
 
    }
}
this will output :

read value : 12345
分享到:
评论

相关推荐

    java管理windows系统内存_java释放内存缓存_java获得CPU使用率_系统内存_硬盘_进程源代码

    在Windows操作系统中,内存管理是一个非常重要的方面。Windows实现按需调页的虚拟内存机制,使得应用程序可以使用超过物理内存容量的虚拟内存。此外,Windows还使用了页面文件来扩展物理内存的容量。 在Java中,...

    内存操作流

    内存操作流是Java I/O系统的一个关键组件,它允许程序高效地在内存和外部存储之间移动数据。本文将深入探讨Java中的内存操作流,并以`ByteInp.java`这个文件为例进行讲解。 Java I/O库提供了多种流类型,包括字节流...

    java实现内存动态分配

    Java 实现内存动态分配主要涉及Java内存模型以及内存管理机制,包括堆内存和栈内存的分配,以及垃圾回收等概念。下面将详细解释这些知识点。 1. **Java内存模型** Java程序运行时,内存分为堆内存(Heap)和栈内存...

    java内存机制及异常处理

    3. **Java Stack(Java栈)**:每个线程都有自己的Java栈,用于存储方法调用的局部变量、操作数栈和方法返回地址。当栈溢出时,会抛出`java.lang.StackOverflowError`。 4. **Program Counter Register(程序计数器...

    Java 内存模型

    Java内存模型是Java虚拟机规范中定义的一部分,它规定了Java程序中变量的读写行为,以及线程之间的交互规则。理解Java内存模型对于编写正确、高效的多线程程序至关重要。在Java 5之前,Java内存模型的描述比较模糊,...

    java内存泄漏解决

    ### Java内存泄漏解决方案详解 #### 一、Java内存泄漏概述 在Java开发过程中,经常会遇到内存泄漏的问题,尤其是在长时间运行的应用程序中更为常见。本文将详细介绍如何解决Java内存泄漏问题,帮助开发者更好地...

    Java内存机制学习和使用

    在深入理解Java内存机制之前,我们需要了解底层硬件和操作系统的限制。 **硬件限制**:计算机硬件的限制决定了物理内存的可用性。例如,处理器的寄存器大小和物理地址大小共同决定了处理器能够直接寻址的内存范围。...

    Java的内存管理机制分析

    ### Java的内存管理机制分析 #### 一、Java内存区域划分 Java的内存管理机制将内存分为以下几个区域: 1. **栈(Stack)**: - 存储局部变量(如基本类型的变量和对象的引用)。 - 每个线程拥有一个独立的栈。 ...

    java之内存泄露

    ### Java之内存泄露 #### 一、引言 在Java编程中,内存管理是一个至关重要的环节。虽然Java具有自动垃圾回收机制,但这并不意味着开发者可以完全忽视内存管理问题。事实上,Java同样面临着内存泄露的风险。本文将...

    深入理解Java 虚拟机内存模型.rar

    Java虚拟机(JVM)内存模型是Java编程语言的核心组成部分,它定义了程序运行时的数据区域和内存管理方式。深入理解这一模型对于优化Java应用程序性能、避免内存泄漏以及理解线程安全至关重要。以下是对Java虚拟机...

    Java中堆内存与栈内存分配浅析

    - **栈内存**:访问速度快,因为采用先进后出的方式进行操作。 #### 四、实际应用中的注意事项 1. **合理选择数据存储位置**:对于生命周期短的简单变量,推荐使用栈内存;而对于需要长期存在的复杂数据结构,则应...

    JAVA_内存流

    在Java中,I/O流主要用于处理磁盘、网络等外部数据源,而内存流则专注于在内存中的数据操作。内存流通常用于读写内存对象,如数组,提供了一种高效且灵活的方式来传输和处理数据。 内存流主要分为两大类:`...

    JAVA操作系统实验存储管理图形化模拟程序

    在本实验项目“JAVA操作系统实验存储管理图形化模拟程序”中,主要涉及的是操作系统领域的内存管理知识,通过JAVA 16编程语言实现了一个具有图形用户界面(GUI)的应用。这个程序设计的目标是帮助用户理解并可视化...

    Java堆栈内存分析笔记

    Java堆栈内存分析是Java编程中的重要概念,它关乎程序的性能优化和内存泄漏的预防。堆和栈是Java内存管理的两个主要区域,它们各自承担着不同的职责。本笔记将深入探讨这两个区域的工作原理以及如何进行有效的分析。...

    深入理解Java内存模型

    Java内存模型是并发编程中一个至关重要的概念,它定义了共享变量的访问规则,以及这些变量如何在多线程环境下进行读写操作。在深入理解Java内存模型之前,我们需要先了解并发编程模型的分类,然后掌握Java内存模型的...

    深入理解 Java 内存模型_程晓明_InfoQ_java_内存模型_

    Java内存模型,简称JMM(Java Memory Model),是Java编程语言规范的一部分,它定义了线程如何共享和访问内存,以及在多线程环境中如何保证数据一致性。理解JMM对于编写高效、正确且线程安全的Java代码至关重要。 ...

    Java 8 内存模型.pdf

    在详细介绍Java 8内存模型之前,需要了解的是,JVM(Java虚拟机)在启动时,操作系统会为JVM进程分配一系列内存区域,这些内存区域包括堆(Heap)、元空间(MetaSpace)、线程堆栈(Thread Stack)、共享库(Shared ...

    java内存模型详解

    Java内存模型,简称JMM(Java Memory Model),是Java虚拟机规范中定义的一个抽象概念,它规定了程序中各个线程如何访问共享变量,以及对这些访问进行同步控制的规则。理解Java内存模型对于编写多线程并发程序至关...

Global site tag (gtag.js) - Google Analytics