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会抛出空指针异常。

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

  1. java字符流操作flush()方法及其注意事项

    java字符流操作flush()方法及其注意事项   flush()方法介绍 查阅文档可以发现,IO流中每一个类都实现了Closeable接口,它们进行资源操作之后都需要执行close()方法将流关闭 ...

  2. MAT工具定位分析Java堆内存泄漏问题方法

    一.MAT概述与安装 MAT,全称Memory Analysis Tools,是一款分析Java堆内存的工具,可以快速定位到堆内泄漏问题.该工具提供了两种使用方式,一种是插件版,可以安装到Eclips ...

  3. 关于Java的=赋值操作和方法传递对象时的引用

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11405920.html 下面通过一段代码和debug结果来展示Java中=操作的赋值改变过程. ...

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

    package org.jelly.util; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io ...

  5. JVM 学习(二)Java 内存模型、方法内联、逃逸 --- 2019年4月

    1.Java 的内存模型 定义了 happens-before,如果同一个线程中,字节码的先后顺序,后者观测了前者的运行结果,那么就会按顺序执行. Java 线程之间的通信由 Java 内存模型控制. ...

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

    1.操作基本数据类型的流     1) 操作基本数据类型 · DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型.应用程序可以使用数据输出 ...

  7. -1-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流

      File类 •文件和目录路径名的抽象表示形式 构造方法 •public File(String pathname) •public File(String parent,Stringchild) ...

  8. Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream)

    Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.内存 ...

  9. JAVA的IO操作:内存操作流

    掌握内存操作流 输入和输出都是从文件中来的,当然,也可将输出的位置设置在内存上,这就需要ByteArrayInputStream和ByteArrayOutputStream ByteArrayInpu ...

随机推荐

  1. R语言绘图:雷达图

    使用fmsb包绘制雷达图 library("fmsb") radarfig <- rbind(rep(90, 4), rep(60, 4), c(86.17, 73.96, ...

  2. Linux:如何获取打开文件和文件描述符数量

    一.linux的文件描述符 文件描述符(FD:file descriptors),也可以说是文件句柄,当某个程序打开文件时,内核返回相应的文件描述符,程序为了处理该文件必须引用此描述符.文件描述符是一 ...

  3. FRDM-KL25Z开发板上电试用

    1. 硬件平台:FRDM-KL25Z开发板,先看下板子,Cortex M0+的内核,板子上自带MMA8451Q的三轴加速度传感器,触摸滑动按键,openSDA调试器.MCU主频48MHz,有16KB ...

  4. thrift 调取 python php go 客户端代码

    golang package main import ( "fmt" "git.apache.org/thrift.git/lib/go/thrift" &qu ...

  5. Linux初步——常用简单命令

    散乱的记录,目前是边学边用,以后有机会再整理 curl命令 发起一个HTTP请求,如:curl "http://www.baidu.com" 加上-I选项查看HTTP协议头的信息, ...

  6. 接口测试工具postman(一)下载安装说明

    Postman是Google开发的一款功能强大的网页调试与发送网页HTTP请求,并能运行测试用例的的Chrome插件. 主要功能包括: 1.模拟各种HTTP requests 从常用的 GET.POS ...

  7. 【java并发编程】十三章:显式锁:LOCK

    java5以后,新增了显式锁,用于当内置锁不能满足需求后可选择的一种高级方案. lock接口的特点 与内置锁一样,他能提供互斥性,内存可见性,可重入等特征,与内置锁不同的是,Lock提供了一种无条件, ...

  8. 解决EasyUI DataGrid删除行失败的方法

    笔者最近在做一个项目的后台,用到了EasyUI的datagrid控件,并开启了行内编辑功能,实际上也就是使用了edatagird这个空间,引用了edatagrid.js,一切似乎都做的顺风顺水,添加数 ...

  9. OpenPAI:大规模人工智能集群管理平台介绍及任务提交指南

    产品渊源: 随着人工智能技术的快速发展,各种深度学习框架层出不穷,为了提高效率,更好地让人工智能快速落地,很多企业都很关注深度学习训练的平台化问题.例如,如何提升GPU等硬件资源的利用率?如何节省硬件 ...

  10. POJ 1463 Strategic game(二分图最大匹配)

    Description Bob enjoys playing computer games, especially strategic games, but sometimes he cannot f ...