【发布时间】:2018-07-18 10:28:07
【问题描述】:
任何人都可以向我解释从 java 中的方法内部的类创建对象的范围,这是一种不好的方式并浪费资源还是正常的?程序正在运行,但我不确定这一步:
/**
* Sending Packets Method
* @param message-the message we want to send to the client side
* @param IP-in InetAddress format
* @param Port-in integer format
* @return Null
*/
public static void send(String message,InetAddress IP,int Port){
byte [] buffer=message.getBytes();
DatagramPacket datagrampacket=new DatagramPacket(buffer,buffer.length,IP,Port);
datagrampacket.setPort(20002);
try {
DatagramSocket datagramSocket=new DatagramSocket();
datagramSocket.send(datagrampacket);
datagramSocket.setReuseAddress(true);
datagramSocket.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
在这种情况下,我每次调用函数时都会创建一个新的DatagramSocket对象并浪费资源或函数完成后对象消失?
谢谢
【问题讨论】:
-
“从类创建对象”的范围?您是指可以使用变量的范围吗?这取决于它的声明位置。
-
但是,是的,在这段代码中,每次调用此方法时都会创建一个新的 DatagramSocket 实例(java 没有函数),它确实会在终止时为 GC 做好准备方法。
-
这并不理想,不。您会想要打开套接字并保持打开状态。打开 IO 套接字确实相当昂贵...
-
谢谢...我每隔几分钟从主类调用一次发送函数,该函数会创建“DatagramSocket”的对象....这样可以吗?
-
@KamelK 它会起作用,但它是否“OK”是另一回事。如果您在应用程序启动时创建一个实例并继续重复使用该实例,而不是不断地创建新实例,这可能会(很多)更好。基本上,您正在丢弃您的系统资源
标签: java object scope object-lifetime object-construction