我最近正在考虑释放Java对象占用的内存.在这样做时,我对如何在Java中复制(浅/深)对象以及如何避免在对象仍处于使用状态时意外清除/无效而感到困惑.
考虑以下场景:
ArrayList<Object>作为参数传递给方法.ArrayList<Object>给可由线程处理的runnable类.ArrayList<Object>一个HashMap.现在在这种情况下,如果我打电话,list = null;或者list.clear();对象会发生什么?在这种情况下,对象会丢失,在哪种情况下只将引用设置为null?
我想这与浅层和深层复制对象有关,但在哪些情况下会发生浅层复制,在这种情况下,深层复制是否发生在Java中?
是否System.currentTimeMillis总是返回的值固定的长度.在我的Windows Core2中,它返回一个13位长的值.
从其API:
以毫秒为单位返回当前时间.请注意,虽然返回值的时间单位是毫秒,但值的粒度取决于底层操作系统,并且可能更大.例如,许多操作系统以几十毫秒为单位测量时间.
我们有一种情况,我们最终会使用多级哈希映射;也就是说,哈希映射内部的哈希映射,深度为三或四级。
本能地,这感觉哪里不对劲。我在这里读过讨论如何迭代/使用多级哈希映射的帖子,但几乎没有人说这方面的最佳实践是什么。
为什么多级哈希映射不好,如果有的话,什么是更好的设计?
这是我们拥有的多级哈希映射的示例设计:
Map<String, Object1> map1;
class Object1 {
String version;
Map<String,Object2> map2;
}
class Object2 {
Map<String,List<Object3>> map4;
Map<String,String> map5;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在Alpine docker env中安装Gdal。我安装了Gdal的依赖项,一切顺利
RUN apk add --no-cache gcc build-base /gdal/gdal-dev-2.4.0-r1.apk /gdal/gdal-2.4.0-r1.apk /gdal/geos-3.7.1-r0.apk /gdal/libcrypto1.1-1.1.1b-r1.apk
Run Code Online (Sandbox Code Playgroud)
然后,我运行命令“ "pip install gdal"
下载”,GDAL-3.0.0.tar.gz但安装时最终出现错误。
修剪后的原木;
Building wheels for collected packages: gdal
Building wheel for gdal (setup.py) ... error
ERROR: Complete output from command /usr/local/bin/python -u -c 'import setuptools, tokenize;__file__='"'"'/tmp/pip-install-hlldvrpz/gdal/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-dj2y5pji --python-tag cp37:
ERROR: WARNING: numpy not available! Array support will not be enabled
running bdist_wheel
running build
running build_py
creating build
creating build/lib.linux-x86_64-3.7
copying gdal.py -> build/lib.linux-x86_64-3.7 …Run Code Online (Sandbox Code Playgroud) java ×3
alpine-linux ×1
deep-copy ×1
docker ×1
epoch ×1
gcc ×1
gdal ×1
hashmap ×1
milliseconds ×1
multi-level ×1
null ×1
shallow-copy ×1
time ×1
timer ×1