java 保护内存操作的方法

1、与c++不同,在java中,没有通过使用强制转换指针类型或者通过进行指针运算直接访问内存的方法。在java中使用对象时,需要严格地遵守类型规则。如果存在一个Mountain类对象的引用(类似于c++的指针),它只能作为Mountain使用。这个引用不能强制转换为Lava类型,更不能把它转为Lava类型,更不能把它所指向的内存假设为一个Lava对象来操作。像C++中使用指针运算那样,简单地给引用加上偏移量也是被禁止的。在java中,将一个引用转换成别的类型也是可以的,但只能在此对象的确为这种新类型的前提下才能进行。例如,如果一个Mountain的引用实际指向一个Volcano类(一种特殊的Mountain类型)的实例,这个Mountain的引用可以转换为Volcano的引用。由于Java在运行时强制执行严格的类型规则,根本无法以可能导致内存冲突的方式直接管理内存。因此,Java程序中不会出现常使C++程序员减低效率的特定bug。

2、Java避免无意间破坏内存的另一个办法是自动垃圾收集。Java程序员不需要手动的去清除无用的对象,当Java程序停止对一个对象的引用时,一段时间后,垃圾回收器会自动回收这个对象所占据的内存。而C++中需要手动的去释放对象。如果不再使用的对象没有被释放,可能会导致内存的溢出。

3、Java在运行时保护内存完整性的第三个办法是数组边界检查。在C++中数组的操作实际上是指针的运算,这会带来潜在的内存冲突。在C++中声明一个有是个成员的数组,然后再向第11个成员写入(尽管这是错误的用法,但C++并不会限制这样做)。在Java中数组是发展完备的对象在每次使用数组的时候,Java都会检查数组的边界。当在Java中创建一个10个成员的数组的后,然后尝试向第十一个成员写入的时候,Java会抛出异常。Java绝对不会允许数组操作超出边界,从而导致内存冲突。

4、Java确保程序健壮性的例子是对对象引用的检查,每次使用引用的时候Java都会确保这些引用不会为空值。如果为空,Java会抛出空指针异常。

时间: 2024-10-10 02:30:44

java 保护内存操作的方法的相关文章

java File文件操作共用方法整理

package org.jelly.util; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.i

JAVA的IO操作:内存操作流

掌握内存操作流 输入和输出都是从文件中来的,当然,也可将输出的位置设置在内存上,这就需要ByteArrayInputStream和ByteArrayOutputStream ByteArrayInputStream:将内容写入到内存中, ByteArrayOutputStream:将内存中数据输出 此时的操作应该以内存为操作点. 利用此类 完成一些功能. 常用方法 ByteArrayInputStream :是InputStream子类. public class ByteArrayInputS

Java API —— IO流(数据操作流 & 内存操作流 & 打印流 & 标准输入输出流 & 随机访问流 & 合并流 & 序列化流 & Properties & NIO)

1.操作基本数据类型的流 1) 操作基本数据类型 · DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型.应用程序可以使用数据输出流写入稍后由数据输入流读取的数据. · DataOutputStream:数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中.然后,应用程序可以使用数据输入流将数据读入. package datastreamdemos; import java.io.*; /** * Created b

Java基础系列10:内存操作流,管道流,合并流,压缩流以及回退流

前言:这篇文章将对几个"非主流"的IO流进行简单的介绍 一 内存操作流 内存操作流的主要作用是完成内存的输入和输出.比如说在某些情况下需要生成一些临时信息,而将这些临时信息保存在文件中不仅要进行文件的读写而且在功能完成之后还需要删除这个临时文件,因此比较麻烦,这时或许就需要用到内存操作流了. 需要用到的API是:ByteArrayInputStream和ByteArrayOutputStream,分别表示输入流和输出流,示例代码如下: package javase.io; import

Java进程内存泄漏判断及解决方法

内存泄漏种类Java使用的内存种类包含三种,这三种类型的内存都可能发生内存泄漏.? 堆内存泄漏,如果JVM 不能在java 堆中获得更多内存来分配更多java 对象,将会抛出java堆内存不足(java OOM) 错误.如果java 堆充满了活动对象,并且JVM 无法再扩展java 堆,那么它将不能分配更多java 对象.更多情况是程序设计有问题,生成的对象占用过多的堆内存造成堆内存泄漏.? 本地内存泄漏, 如果JVM 无法获得更多本地内存,它将抛出本地OOM错误.当进程用到的内存到达操作系统的

Java中类,对象,方法的内存分配

Java中类,对象,方法的内存分配 以下针对引用数据类型: 在内存中,类是静态的概念,它存在于内存中的CodeSegment中. 当我们使用new关键字生成对象时,JVM根据类的代码,去堆内存中开辟一块控件,存放该对象,该对象拥有一些属性,拥有一些方法.但是同一个类的对象和对象之间并不是没有联系的,看下面的例子: 1 class Student{ 2 static String schoolName; 3 String name; 4 int age; 5 6 void speak(String

Java并发编程--7.Java内存操作总结

主内存和工作内存 工作规则 Java内存模型, 定义变量的访问规则, 即将共享变量存储到内存和取出内存的底层细节  所有的变量都存储在主内存中,每条线程有自己的工作内存,工作内存中用到的变量, 是从主内存拷贝的副本,线程对变量的所有操作都在工作内存中进行, 线程间变量值得传递均需通过主内存来完成 内存间交互操作 1.luck(锁定):作用于主内存的变量,它把一个变量标示为一条线程独占的状态. 2.unlock(解锁):作用于主内存的变量,它把一个处于锁定状态的变量释放出来,释放后的变量才可以被其

java file文件类操作使用方法大全

1.构造函数 [java] view plaincopy public class FileDemo { public static void main(String[] args){ //构造函数File(String pathname) File f1 =new File("c:\\zuidaima\\1.txt"); //File(String parent,String child) File f2 =new File("c:\\zuidaima",&quo

java 21-11 数据输入、输出流和内存操作流

IO数据流: 可以读写基本数据类型的数据 数据输入流:DataInputStream DataInputStream(InputStream in)   数据输出流:DataOutputStream  DataOutputStream(OutputStream out) 本来想自己写例子,后来看到博友写的全面..果断转载! java io系列15之 DataOutputStream(数据输出流)的认知.源码和示例 java io系列14之 DataInputStream(数据输入流)的认知.源码