在手机软游开发方面,Java以后会被C++取代吗?
第1题:
java 中会存在内存泄漏吗,请简单描述。
所谓内存泄露就是指一个不再被程序使用的对象或变量一直被占据在内存中。java 中有垃圾
回收机制,它可以保证一对象不再被引用的时候,即对象编程了孤儿的时候,对象将自动被
垃圾回收器从内存中清除掉。由于Java 使用有向图的方式进行垃圾回收管理,可以消除引
用循环的问题,例如有两个对象,相互引用,只要它们和根进程不可达的,那么GC 也是可
以回收它们的,例如下面的代码可以看到这种情况的内存回收:
package com.huawei.interview;
import java.io.IOException;
public class GarbageTest {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
try {
gcTest();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("has exited gcTest!");
System.in.read();
System.in.read();
System.out.println("out begin gc!");
for(int i=0;i<100;i++)
{
System.gc();
System.in.read();
System.in.read();
}
}
private static void gcTest() throws IOException {
System.in.read();
System.in.read();
Person p1 = new Person();
System.in.read();
System.in.read();
Person p2 = new Person();
p1.setMate(p2);
p2.setMate(p1);
System.out.println("before exit gctest!");
System.in.read();
System.in.read();
System.gc();
System.out.println("exit gctest!");
}
private static class Person
{
byte[] data = new byte[20000000];
Person mate = null;
public void setMate(Person other)
{
mate = other;
}
}
}
java 中的内存泄露的情况:长生命周期的对象持有短生命周期对象的引用就很可能发生内存
泄露,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不
能被回收,这就是java 中内存泄露的发生场景,通俗地说,就是程序员可能创建了一个对
象,以后一直不再使用这个对象,这个对象却一直被引用,即这个对象无用但是却无法被垃
圾回收器回收的,这就是java 中可能出现内存泄露的情况,例如,缓存系统,我们加载了
一个对象放在缓存中(例如放在一个全局map 对象中),然后一直不再使用它,这个对象一直
被缓存引用,但却不再被使用。
检查java 中的内存泄露,一定要让程序将各种分支情况都完整执行到程序结束,然后看某
个对象是否被使用过,如果没有,则才能判定这个对象属于内存泄露。
下面内容来自于网上(主要特点就是清空堆栈中的某个元素,并不是彻底把它从数组中拿掉,
而是把存储的总数减少,本人写得可以比这个好,在拿掉某个元素时,顺便也让它从数组中
消失,将那个元素所在的位置的值设置为null 即可):
我实在想不到比那个堆栈更经典的例子了,以致于我还要引用别人的例子,下面
的例子不是我想到的,是书上看到的,当然如果没有在书上看到,可能过一段时
间我自己也想的到,可是那时我说是我自己想到的也没有人相信的。
public class Stack {
private Object[] elements=new Object[10];
private int size = 0;
public void push(Object e){
ensureCapacity();
elements[size++] = e;
}
public Object pop(){
if( size == 0)
throw new EmptyStackException();
return elements[--size];
}
private void ensureCapacity(){
if(elements.length == size){
Object[] ldElements = elements;
elements = new Object[2 * elements.length+1];
System.arraycopy(oldElements,0, elements, 0, size);
}
}
}
上面的原理应该很简单,假如堆栈加了10 个元素,然后全部弹出来,虽然
堆栈是空的,没有我们要的东西,但是这是个对象是无法回收的,这个才符合了
内存泄露的两个条件:无用,无法回收。
但是就是存在这样的东西也不一定会导致什么样的后果,如果这个堆栈用的
比较少,也就浪费了几个K 内存而已,反正我们的内存都上G 了,哪里会有什么
影响,再说这个东西很快就会被回收的,有什么关系。下面看两个例子。
例子1
public class Bad{
public static Stack s=Stack();
static{
s.push(new Object());
s.pop(); //这里有一个对象发生内存泄露
s.push(new Object()); //上面的对象可以被回收了,等于是自愈了
}
}
因为是static,就一直存在到程序退出,但是我们也可以看到它有自愈功
能,就是说如果你的Stack 最多有100 个对象,那么最多也就只有100 个对象无
法被回收其实这个应该很容易理解,Stack 内部持有100 个引用,最坏的情况就
是他们都是无用的,因为我们一旦放新的进取,以前的引用自然消失!
第2题:
交警说 他要我陪500元我就给他了 他在事故认定书上签了字 我就走了 以后他有什么事情我还有责任吗
第3题:
有没知道的,请问这个跟java关联的紧吗?我只是个搞java开发的,请问他们有联系啊,对这个技术有必要去学吗,请知道的老大们告诉我下,还要我找资料学习下,就做事,我都开发的web方面的系统!
第4题:
我准备挣扎在这个线上,我之前去北大青鸟最好的学校嘉华校区咨询,对方说我高中毕业最好进修java先,貌似java的语言最流行,是不是真的啊?
可是我问了别人,c++的待遇更高,而且人才比较少,更有利于发展,我不知道怎么选,这两个难度那个大呢?我都学得会吗?
C++ 虽然功能强大 堪称无所不能
但是C++也就是因为有了这么复杂的强大功能影响了学习撒。
功能太多 太杂乱
建议先学Java 再学C++.
因为Java的一些语法 思想都是与C++差不多的。 但是Java相对更为容易一些。
第5题:
GSM数字手机会被盗号#机、MA机吗?
第6题:
下面有关java和c++的描述,错误的是()。
第7题:
在Java中,开发图形用户界面的程序需要使用一个系统提供的类库,这个类库就是()包。
第8题:
java和javascript是同一种语言吗?它们之间的关系怎样?
第9题:
只要手机中带有java虚拟机(java功能)就可以安装所有的java软件。
第10题:
指定一个导入JSP页面的page指令之前,可以在该页面中使用java类吗?
第11题:
Java,Javascript,SQL
C/C++,Java,CLR
SQL,C# .Net,Perl
Perl,C/C++,SQL
第12题:
第13题:
JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。
用try来指定一块预防所有"异常"的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的"异常"的类型。
throw语句用来明确地抛出一个"异常"。
throws用来标明一个成员函数可能抛出的各种"异常"。
Finally为确保一段代码不管发生什么"异常"都被执行一段代码。
可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码。每当遇到一个try语句,"异常"的框架就放到堆栈上面,直到所有的try语句都完成。如果下一级的try语句没有对某种"异常"进行处理,堆栈就会展开,直到遇到有处理这种"异常"的try语句。
第14题:
sun 已经被Oracle 兼并了以后Oracle 会怎么利用之前sun公司的java语言呢?
第15题:
目前在公司里做软件技术支持,熟悉业务流程,以前有开发的基础,培训过java开发和数据库,js语言等。
第16题:
下列哪种编程语言可以用于开发UDF?()
第17题:
Java与C/C++比较说法错误的是()。
第18题:
Java程序是由什么组成的?一个程序中必须有public类吗?Java源文件的命名规则是怎样的?
第19题:
简述Java语言与C/C++语言的主要差异。
第20题:
离线应用:用户从无线Java平台下载所需应用并()到手机中,该应用只在()运行中需要访问无线JAVA平台,以后的使用则不再需要()的支持
第21题:
用户可以使用以下哪几种语言开发MapReduce程序()
第22题:
你们开发公司()以后,年总产值能达到一亿元吗?
第23题: